我正在学习ElasticSearch,并在他们的文档中写了这行
在像这样的分布式系统中执行完整的SQL风格的联接 Elasticsearch非常昂贵。相反,Elasticsearch 提供了两种可水平缩放的连接形式。
请有人用外行术语向我解释第二句话的含义。
答案 0 :(得分:1)
作为序言,您可能希望通过SO上的另一个线程来解释horizontal vs vertical scaling。
大多数时候,ES集群被设计为水平增长,这意味着只要您的集群开始表现出一些弱点迹象(查询缓慢,索引编制缓慢等),您要做的就是添加一个或多个节点到您的群集,ES会将负载分散到更多硬件上,从而减轻现有节点的负担。这就是水平扩展的全部内容,并且ES完美地为此设计,因为它可以将索引划分为分片,然后将分片分配给集群中的节点。
如您所知,ES没有JOIN功能,并且出于上述原因,它们是有意这样做的(即“过高的价格”)。 ES中有four ways to model relationships:
nested
types The link you referred to介绍了nested
,has_parent
和has_child
查询,它与上面的第二和第三点有关。嵌套文档和父文档/子文档的设计方式应尽可能地利用ES支持的索引/分片分区模型。
使用nested
字段(1-N关系)时,nested
数组内的每个元素只是底层的另一个隐藏文档,并存储在群集中某个位置的分片中。使用join
字段(1-N关系)时,父文档和子文档也是存储在群集中某个位置的分片中的索引中的文档。当索引增长时(即,当父子项和/或嵌套数据越来越多时),您将添加节点,并且包含文档的分片将透明地散布在群集中。这意味着无论您将文档存储在哪里,都可以检索它们以及相关文档,而不必执行昂贵的联接。
答案 1 :(得分:0)