2016-04-13 6 views
0

私は、スキンレスJSONデータを含む150万レコードのrethinkdbテーブルを持っています。私はJSONのネストされたフィールドを照会しています。例えば、 'Gate No.'フィールドはJSONの下にあります。rethinkdbの多数のレコードのクエリパフォーマンスを向上させます

私は1MNレコードを含むテーブルで同じクエリを実行した場合は、680ミリ秒で返されたクエリは、しかし、150枚のMNレコードと、クエリは全く戻らない
{ 'Name' : 'XYZ', 'Age' : 22, 'Address' : { 'Gate No.' : 7, 'Society' : 'ABC' } } 

。 Webコンソールからしばらく実行され、後でエラー:Query terminated by an unknown causeが返されます。私のJavaアプリケーションからは、クエリは永遠に実行されるようです。

私は4台のサーバでシャーディングを試みましたが、それぞれ3700万個のドキュメントを保持していましたが、それは状況を改善するようには見えません。クエリを実行するにはどうすればよいですか?

PS:JSONデータは完全にスキーマレスなので、データのインデックスは実行可能なオプションではありません。あなたは間違いなく、インデックスを作成する必要があります

まず:私はこのように、この問題に取り組むだろうとあなたが言った余分な情報に基づいて

+0

Hey Kapilは、実行している正確なクエリと、テーブルに作成したインデックスについてさらに詳しい情報を提供できますか? – dalanmiller

+0

私が実行しているクエリは、r.db( 'dbName')テーブル( 'tableName')フィルタ(r.row( 'Address')( 'Gate No。')。eq(7))です。正確に1つのレコードを返す必要があります。このテーブルには、150万レコード(4つのシャード、それぞれ〜37万レコード)が含まれています。私はインデックスを使用していませんが、インデックスを構築するためのクエリはWebコンソールからタイムアウトします。また、JSONファイルはスキーマレスなので、インデックスは機能しないと思いますか? –

+0

フィルタはインデックスをまったく使用しません。あなたはAdress.Gate No.のインデックスを持つgetAllを使う必要があります。 https://www.rethinkdb.com/api/javascript/get_all/ – jishi

答えて

2

、。あなたはあなたのデータがスキルレスであると言いましたが、私はエントリのすべてまたはほとんどがAddressGate Noフィールドを持っていると仮定しますか?これが事実であるなら、あなたはその(データエクスプローラのいずれかまたはこのクエリは、Javaに変換)などのインデックスを作成します:あなたは自動的にテーブルをやってに頼るしているインデックスを作成せずに

r.db("dbName").table("tableName").indexCreate('gate_no', r.row("Address")("Gate No.") 

をするたびにスキャンあなたはこの文書を探しています。通常、頻繁に実行するクエリに対してインデックスを作成したいとします。 AddressGate No.で検索するつもりなら、これが役に立ちます。

ここで.getAllを使用して、検索する値を指定し、使用するインデックスを明示的に渡して、探している値を返します。 (ところで、それが原因で主キーとは異なり、二次のものが複数の値を持つことができ.getAllと呼ばれています)

r.db("dbName").table("tableName").getAll(7, {index: 'gate_no'}) 

これはあなたの時間の割合で、あなたの結果を取得します。 (詳細は分かりませんが、インデックスツリーの現在の残高に応じて平均O(n log n)になります)。

データエクスプローラは、実際にはデータセットの簡単な探索を行うツールであり、何百万ものドキュメントを解析するためのものではありません。 ipythonまたはnode replにドロップすると、これらの種類のテストを実行すると、最終製品に多くの作業が簡単になり、翻訳が容易になります。

最後に、Javaドライバはそのように動作すべきではありません。あなたは間違いなくGithubの問題を開いて、正しく考えてください - https://github.com/rethinkdb/rethinkdb/issues/new

関連する問題