首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现RethinkDB连接?

如何实现RethinkDB连接?
EN

Stack Overflow用户
提问于 2016-03-29 23:23:46
回答 1查看 78关注 0票数 2

最近我一直在窥探RethinkDB,并且非常害怕看到joins文档部分。据我所知,RethinkDB将数据存储在碎片中,这些碎片可能是分布式的(这实际上是一个用于联接的巨大的NO )。那么RethinkDB如何执行连接查询呢?它基本上是下载一个节点上的所有数据(这会使现有的索引毫无用处,不是吗?),还是使用更复杂的算法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 18:46:00

在RethinkDB 2.2和之前,eqJoin对左侧输入中的每个文档在右表上执行索引getAll操作。此操作是在承载eqJoin命令左侧输入的每个碎片上启动的。正如您所指出的,执行getAll可能需要经过网络才能到达另一台服务器上的右表碎片。但是,仍在使用索引。

(您可以在这里找到eqJoin的实现:protocol/terms/rewrites.cc#L121 --它只是对其他操作的重写)

从即将发布的RethinkDB 2.3开始,eqJoin使用批处理getAll操作。这意味着它从左侧输入读取一组结果(例如,最多1MB),然后向右侧表的碎片发出一个getAll。一旦从这些碎片中获取数据,就会将其与先前从左侧输入读取的数据组合起来,并将其传递给用户。然后,它会重复这一点,直到左输入的所有数据都被处理了。这种方法需要大大减少服务器之间的网络往返,而且通常要快得多。您可以在https://github.com/rethinkdb/rethinkdb/issues/5115上找到有关新实现的更多细节。

最后,其他可用的连接操作(innerJoinouterJoin)没有索引,不应该用于任何重要大小的数据集,正如文档还指出的那样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36296890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档