2011-02-05 12 views
2

私たちがアプリケーションで収集するデータの性質上、ユーザーが1,000,000以上の行のデータを検索できるようにするために必要です。できるだけ速く結果のクライアント側を受信します。膨大な量のレポートデータを表示する方法クライアント側(mongoDB、JS)

私たちはいろいろなテクニックを使い、ドキュメントストレージエンジンMongoDBを試しています。私たちは基本的にレポートデータをMongoにクライアント側で表示する方法で保存しています。

しかし、これは私があなたの経験に傾きたいところです。私たちはdatatables.netのようないくつかのレポートテーブルプラグインを使用してきましたが、クライアントが100,000 +レコードに一致する可能性のあるデータを要求すると、そのデータをクライアント側に渡すまでの待ち時間は、JSONをサーバからクライアント。

一度に1000件の結果しかクライアントに送信しないで、結果セットをフィルタリングしようとしましたが、ユーザーが列を並べ替えることを決定したらどうなりますか?要求全体をもう一度実行し、最初の1000の結果をクライアントにロードします。

しかし、クライアントが列内で検索することを選択した場合、結果を再度フェッチする必要があります。データのすべてがクライアント側にロードされたときに、これらの問題はすべて発生しません。

本質的に私の質問は、どのように効率的かつ迅速にクライアントが大規模なデータセットを検索して操作できるようにするのですが、すべての結果を一度に送信する必要がない方法でクライアント側に結果を提供しますしたがって、クライアントサイドをできるだけ軽量に保ちますか?

MongoDB用のフロントエンドデータタイプタイプのプラグインが必要です(潜在的にnode.js経由でダイレクトJSON通信が可能ですが、何も見つかりません)!

ありがとうございました。

+1

MongoDBは[BSON](http://bsonspec.org/)にオブジェクトを格納するので、JSONへの変換はまだあります。私はあなたが見ているレイテンシの大部分が単に転送され、クライアント側で解析されなければならないデータの量に起因すると考えています。 –

答えて

5

クライアント側を通過しようとしている膨大な量のデータに問題があるようです。 1,000行のデータを表示する画面は何ですか?

開始インデックス、並べ替え順、ページサイズを指定して、その順番に多くのデータだけを取り出してクライアント側に返します。

たとえば、jqGridは、ページングと情報の並べ替えをサーバーに戻し、一度に1ページ分しか取得しないクライアント側グリッドです。 MongoDBとのjqGridと正しいインデックスが瞬時に高速です。

+0

それは確かに素晴らしいテーブルのプラグインのように見えます、ありがとう!私はそれで良いプレーをするだろう。 –

1

MongoDBは素晴らしいですが、このコンテンツをMongoDBの外部にインデックスして、パフォーマンスと柔軟性を提供することもできます。 Apache SolrまたはElastic Searchをご覧ください。どちらもLuceneに基づいており、非常に堅牢な検索機能を備えています。特に、非常に効果的な方法でページングとソートを使用してクエリを実行できます。どちらのツールもJSONで結果セットを返すことができます。その多くのレコードで、Luceneに基づくものを使用すると、ブラウジングやステミングのようなより高度なフィルタリング機能を非常に簡単に提供できるようになります。

+0

Apache Solrは甘いです! – Stephen

関連する問題