2

アプリケーションで収集するデータの性質上、ユーザーが1,000,000行以上のデータを検索し、クライアント側でできるだけ早く結果を受信できるようにする必要があります。

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

しかし、これは私があなたの経験に頼りたかったところです。datatables.netなどのいくつかのレポートテーブルプラグインを使用しましたが、クライアントが100,000以上のレコードに一致する可能性のあるデータを要求すると、そのデータをクライアント側に配信する際の遅延が、サーバーからサーバーにJSONをエクスポートするのに1分以上かかる場合があります。クライアント。

一度に1000件の結果のみをクライアントに送信して結果セットをフィルタリングしようとしましたが、ユーザーが列を並べ替えることを決定した場合はどうなりますか?リクエスト全体を再度実行する必要があり、最初の1000件の結果がクライアントにロードされます。

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

つまり、基本的に私の質問は、クライアントが大規模なデータセットを検索して操作できるようにする方法ですが、すべての結果を一度に送信する必要がない方法で結果をクライアント側に配信することで、クライアント側は可能な限り軽量ですか?

MongoDB用のフロントエンドデータテーブルタイプのプラグインがいくつかあるはずです。直接JSON通信用のnode.jsを経由する可能性がありますが、何も見つかりません。

ご協力いただきありがとうございます。

4

2 に答える 2

5

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

開始インデックス、並べ替え順序、ページサイズを指定してリクエストを行い、その順序でその量のデータのみをフェッチして、クライアント側に返します。

たとえば、jqGridを、ページングと並べ替えの情報をサーバーに戻し、一度に1ページ分の情報のみを取得するクライアント側のグリッドとして見てください。MongoDBと適切なインデックスを備えたjqGridは、目がくらむほど高速です。

于 2011-02-06T07:37:12.613 に答える
1

MongoDBは優れていますが、MongoDBの外部でこのコンテンツにインデックスを付けて、説明するパフォーマンスと柔軟性を提供することもできます。ApacheSolrまたはElasticSearchを見てください。これらは両方とも、非常に堅牢な検索機能を備えたLuceneに基づいています。特に、非常にパフォーマンスの高い方法でページングと並べ替えを使用してクエリを実行できます。これらのツールはどちらも、結果セットをJSONで返すことができます。その数のレコードを使用し、Luceneに基づくものを使用すると、ファクトブラウジングやステミングなどのより高度なフィルタリング機能を非常に簡単に提供することもできます。

于 2011-02-05T19:24:02.983 に答える