最近私はRethinkDBを掘り下げていましたが、ジョイントのドキュメントのセクションを見るのは非常に怖かったです。私が知っていることから、RethinkDBはデータを分散しているシャードに格納しています(実際には結合にはNO)。では、RethinkDBはどのように結合クエリを実行しますか?それは基本的に1つのノード上のすべてのデータをダウンロードしますか(それは既存のインデックスを役に立たなくするでしょうか?)、より複雑なアルゴリズムを使用していますか?RethinkDB結合はどのように実装されていますか?
2
A
答えて
4
RethinkDB 2.2以前では、eqJoin
は、左側の入力にある各ドキュメントの右側のテーブルでインデックスgetAll
を実行します。 この操作は、eqJoin
コマンドの左手入力をホストしている各シャードで開始されます。 指摘したように、getAll
を実行するには、別のサーバー上の右側のテーブルの断片に到達するためにネットワークを経由する必要があります。しかし、索引はまだ使用されています。
(あなたがここeqJoin
の実装を見つけることができます:https://github.com/rethinkdb/rethinkdb/blob/v2.2.x/src/rdb_protocol/terms/rewrites.cc#L121それは他の操作にだけ書き換えます)今後のRethinkDB 2.3から
、eqJoin
用途はgetAll
操作をバッチ処理しました。これは、左側の入力から一連の結果(最大1 MBなど)を読み取り、次に右のテーブルの断片に単一のgetAll
を発行することを意味します。これらの破片からデータを戻すと、以前に左入力から読み取ったデータと結合してユーザーに渡します。次に、左入力からのすべてのデータが処理されるまでこれを繰り返します。 この方法では、サーバー間のネットワークラウンドトリップが大幅に少なくて済み、通常は大幅に高速化されます。新しい実装に関する詳細はhttps://github.com/rethinkdb/rethinkdb/issues/5115にあります。
最後に、その他の利用可能な結合操作(innerJoin
およびouterJoin
)は索引付けされていないため、重要なサイズのデータ・セットには使用しないでください。
関連する問題
- 1. @privateはどのように実装されていますか?
- 2. BigDecimalはどのように実装されていますか?
- 3. HttpSessionはどのように実装されていますか?
- 4. removeEventListenerはどのように実装されていますか?
- 5. INativeElementViewはどのように実装されていますか?
- 6. PTRACE_SINGLESTEPはどのように実装されていますか?
- 7. テンソルフローはどのように実装されていますか?
- 8. \ bはどのように実装されていますか?
- 9. フィルタはどのように実装されていますか?
- 10. MarshalByRefObjectはどのように実装されていますか?
- 11. クロスバリデーションはどのように実装されていますか?
- 12. タスクスケジューリングはどのように実装されていますか?
- 13. os.path.fileはどのように実装されていますか?
- 14. getchar()はどのように実装されていますか?
- 15. モバイルバックグラウンドループはどのように実装されていますか?
- 16. Collection.sortがどのように実装されていますか?
- 17. Wami Recorderは実際にどのように実装されていますか?
- 18. Objective Cではカテゴリはどのように実装されていますか?
- 19. RedisではBRPOPはどのように実装されていますか?
- 20. chshはどのようにlinuxに実装されていますか?
- 21. WebSocketハンドシェイクはどのようにPHPに実装されていますか?
- 22. ESBはどのように物理的に実装されていますか?
- 23. render_viewsはRSpecにどのように実装されていますか?
- 24. Pythonのリストクラスの__contains__メソッドはどのように実装されていますか?
- 25. Facebookのティッカーデザインはどのように実装されていますか?
- 26. pythonのfractions.limit_denominatorはどのように実装されていますか?
- 27. InputStreamのread()メソッドはどのように実装されていますか?
- 28. Jasmineの `done()`はどのように実装されていますか?
- 29. javaの "this"キーワードはどのように実装されていますか?
- 30. golangのselect文はどのように実装されていますか?