У меня есть программная система для выставления счетов. В нем есть ежедневные журналы вызовов пользователей. Журналы горизонтально разделены по дате (месяц). Каждый раздел хранится в отдельной базе данных и может распространяться на несколько экземпляров.Как сортировать горизонтальные секционированные данные
В пользовательском интерфейсе пользователь укажет диапазон дат. Возвращенные данные могут быть отсортированы в любом поле. Диапазон дат может охватывать несколько разделов. Приложение должно поддерживать пейджинг через данные диапазона дат.
Я не могу загрузить слишком много записей в память для сортировки. Помещение сортировки внутри запроса дает мне отсортированные данные внутри одного набора результатов.
Так что мне нужно сортировать данные из нескольких разделов, которые по отдельности сортируются отдельно. Как я могу вернуть отсортированные записи в пользовательский интерфейс из нескольких отсортированных наборов результатов?
EDIT: После более подробного анализа этой проблемы у нас есть еще несколько входов. Существует также требование разбивки на страницы. В связи с этим нам нужно выяснить еще один способ сделать сортировку в реальном времени на нескольких наборах результатов.
Вы можете загружать только отсортированный столбец и идентификаторы записей, а затем сортировать и, наконец, загружать записи, которые вы хотите отображать, на основе отсортированных идентификаторов. Я не уверен, что вы могли бы сделать какое-либо значимое чередование на уровне db, поэтому сделать это в вашем коде кажется самым простым способом. Другим вариантом может быть запись (частичных) записей в файл с отображением памяти и сортировка там, но это, вероятно, будет стоить даже больше производительности - ведь у вас здесь есть классическая ситуация с частотой вращения vs-memory. – Thomas
Мы обсудили первый подход, но недостатком этого подхода является то, что нам нужно снова запросить идентификаторы Id, а так как это из пользовательского интерфейса, необходимо также разбиение на страницы. –
Ну, у нас была аналогичная ситуация, когда загрузка всех данных занимала слишком много памяти, и поэтому мы следовали за подходом к первой загрузке только отсортированных данных, а также идентификаторов, а затем сортировки и хранения только идентификаторов. Затем пейджинг будет работать с отсортированными идентификаторами, и только записи, соответствующие идентификаторам страницы, будут загружены полностью. Конечно, вам нужно будет запросить еще раз, но с пейджингом вам все равно придется это делать. Чтобы ускорить второй (поисковый запрос), вы также можете сохранить исходный раздел и только запрашивать эти разделы. – Thomas