Как показать огромное количество данных на стороне клиента (mongoDB, JS) - PullRequest
2 голосов
/ 05 февраля 2011

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

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

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

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 06 февраля 2011

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

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

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

1 голос
/ 05 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...