Как сортировать горизонтальные секционированные данные

У меня есть программная система для выставления счетов для телекоммуникаций. В нем есть ежедневные журналы вызовов пользователей. Журналы горизонтально разделены по дате (месяц). Каждый раздел хранится в отдельной базе данных и может распространяться на несколько экземпляров.

В пользовательском интерфейсе пользователь укажет диапазон дат. Возвращенные данные могут быть отсортированы в любом поле. Диапазон дат может охватывать несколько разделов. Приложение должно поддерживать пейджинг через данные диапазона дат.

Я не могу загружать слишком много записей в память для сортировки. Помещение сортировки внутри запроса дает мне отсортированные данные внутри одного набора результатов.

Итак, мне нужно отсортировать данные из нескольких разделов, которые сортируются по отдельности. Как я могу вернуть отсортированные записи в пользовательский интерфейс из нескольких отсортированных результирующих наборов?

РЕДАКТИРОВАТЬ: После дальнейшего анализа этой проблемы у нас есть еще несколько входов. Существует также требование разбивки на страницы. В связи с этим нам нужно выяснить еще один способ сделать сортировку в реальном времени на нескольких наборах результатов.

Ответ 1

Используя функцию ResultSet для загрузки ограниченных данных в память, мы можем предложить решение на Java с помощью Dynamic Comparator. Решение состоит в том, чтобы взять первую запись из каждого набора результатов и отсортировать ее в java и вернуть первый элемент из отсортированных данных.

Подробное решение:

Сначала мы построили программу, которая может дать нам dymanic Comparator на основе критериев, выбранных на экране.

Вторым мы написали одну обертку AggregateResultSet над DAO, которая обертывается через ResultSets из разных разделов. Примечание: эти отдельные ResultSets уже отсортированы по тем же критериям. Затем AggregateResultSet будет предоставлен динамический компаратор.

Этот AggregateResultSet будет иметь структуру данных для первоначального хранения первого элемента каждого набора результатов. Он вернет следующий элемент при вызове next(). Этот элемент будет элементом, который будет первым в соответствии с dynamicComparator. Во время следующего() вызова мы удаляем этот элемент из временной структуры данных и вставляем следующий элемент из того же набора результатов во временную структуру данных. Таким образом, AggregateResultSet вернет данные в ожидаемом порядке путем слияния/хранения/сортировки очень ограниченных данных в Java.

Мы надеемся, что не получим проблем с сравнением, поскольку в сортировке мы имеем в основном числовые/строковые данные.