Как отобразить огромное количество данных отчета на стороне клиента (mongoDB, JS)

Из-за характера данных, которые мы собираем в нашем приложении, необходимо, чтобы пользователь мог выполнять поиск по более чем 1 000 000 строк данных и получать результаты на стороне клиента как можно быстрее.

Мы экспериментировали с различными методами и в настоящее время экспериментируем с механизмом хранения документов MongoDB. По сути, мы храним данные отчета в Mongo так, как хотим показать их на стороне клиента.

Но здесь я хотел опираться на ваш опыт. Мы использовали некоторые подключаемые модули таблиц отчетов, такие как datatables.net, но когда клиент запрашивает данные, которые могут соответствовать более чем 100 000 записей, задержка доставки этих данных на сторону клиента может занять более минуты, чтобы экспортировать JSON с сервера в клиент.

Я пробовал фильтровать набор результатов, отправляя клиенту только 1000 результатов за раз, но что, если пользователь решит отсортировать столбец? Весь запрос должен быть выполнен снова, и первая 1000 результатов загружена в клиент.

Но что, если клиент решит искать в столбце, результаты должны быть получены повторно. Всех этих проблем не существует, когда все данные загружены на стороне клиента.

По сути, мой вопрос заключается в том, как вы можете эффективно и быстро позволить клиентам выполнять поиск и манипулировать большими наборами данных, но при этом доставлять результаты на сторону клиента таким образом, чтобы не требовалось, чтобы каждый результат был отправлен за один раз, поэтому сохраняя клиентская сторона максимально облегчена?

Я уверен, что для MongoDB должны быть какие-то интерфейсные плагины с данными, потенциально через node.js для прямой связи JSON, но я ничего не могу найти!

Спасибо за вашу помощь.


person Peter John    schedule 05.02.2011    source источник
comment
Стоит отметить, что MongoDB хранит объекты в BSON, поэтому преобразование в JSON все еще происходит. Я подозреваю, что большая часть задержки, которую вы видите, просто связана с объемом данных, которые необходимо передать и проанализировать на стороне клиента.   -  person Chris Heald    schedule 05.02.2011


Ответы (2)


Похоже, ваша проблема связана с огромным объемом данных, которые вы пытаетесь передать на стороне клиента. Какой экран отображает 1000 строк данных??

Сделайте запрос с начальным индексом, порядком сортировки и размером страницы и извлеките только столько данных в этом порядке и верните его на стороне клиента.

Взгляните, например, на jqGrid как на сетку на стороне клиента, которая передает информацию о подкачке и сортировке обратно на сервер и извлекает только одну страницу за раз. jqGrid с MongoDB и правильными индексами невероятно быстр.

person Ian Mercer    schedule 06.02.2011
comment
Это похоже на отличный плагин для таблиц, спасибо! Я буду иметь хорошую игру с этим. - person Peter John; 06.02.2011

MongoDB великолепен, однако вы можете захотеть также проиндексировать этот контент вне MongoDB, чтобы обеспечить описанную вами производительность и гибкость. Взгляните на Apache Solr или Эластичный поиск. Оба они основаны на Lucene, который имеет очень надежные возможности поиска. В частности, вы можете очень эффективно выполнить запрос с разбиением на страницы и сортировкой. Оба этих инструмента могут возвращать набор результатов в формате JSON. С таким количеством записей и с помощью чего-то, основанного на Lucene, вы также сможете очень легко предоставлять более продвинутые возможности фильтрации, такие как просмотр фактов и поиск корней.

person Kenan    schedule 05.02.2011