水平缩放

时间:2018-08-15 01:28:13

标签: elasticsearch

我正在学习ElasticSearch,并在他们的文档中写了这行

  

在像这样的分布式系统中执行完整的SQL风格的联接   Elasticsearch非常昂贵。相反,Elasticsearch   提供了两种可水平缩放的连接形式。

请有人用外行术语向我解释第二句话的含义。

2 个答案:

答案 0 :(得分:1)

作为序言,您可能希望通过SO上的另一个线程来解释horizontal vs vertical scaling

大多数时候,ES集群被设计为水平增长,这意味着只要您的集群开始表现出一些弱点迹象(查询缓慢,索引编制缓慢等),您要做的就是添加一个或多个节点到您的群集,ES会将负载分散到更多硬件上,从而减轻现有节点的负担。这就是水平扩展的全部内容,并且ES完美地为此设计,因为它可以将索引划分为分片,然后将分片分配给集群中的节点。

如您所知,ES没有JOIN功能,并且出于上述原因,它们是有意这样做的(即“过高的价格”)。 ES中有four ways to model relationships

The link you referred to介绍了nestedhas_parenthas_child查询,它与上面的第二和第三点有关。嵌套文档和父文档/子文档的设计方式应尽可能地利用ES支持的索引/分片分区模型。

使用nested字段(1-N关系)时,nested数组内的每个元素只是底层的另一个隐藏文档,并存储在群集中某个位置的分片中。使用join字段(1-N关系)时,父文档和子文档也是存储在群集中某个位置的分片中的索引中的文档。当索引增长时(即,当父子项和/或嵌套数据越来越多时),您将添加节点,并且包含文档的分片将透明地散布在群集中。这意味着无论您将文档存储在哪里,都可以检索它们以及相关文档,而不必执行昂贵的联接。

答案 1 :(得分:0)

因此,您将获得有关缩放水平here

的更多信息。

在Elasticsearch术语中,当您在具有相同集群配置的同一网络中的ES上启动两个或多个实例时,它们将彼此连接并创建一个分布式网络。因此,如果您再添加一台计算机或节点并在那里启动一个ES实例并保持群集配置不变,节点将自动附加到先前的群集,并且数据和请求负载将共享。当您向ES发出任何请求时,它可能是其读取或写入请求,每个请求都可以并行处理,并且您可以根据每个索引中节点和分片的数量来获得速度。

获取更多信息here