【问题标题】:Scaling horizontally meaning水平缩放的意思
【发布时间】:2019-01-21 22:05:53
【问题描述】:

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

在分布式系统中执行完整的 SQL 样式连接,例如 Elasticsearch 非常昂贵。相反,Elasticsearch 提供两种形式的连接,旨在水平扩展。

请有人用外行术语解释一下第二句话是什么意思。

【问题讨论】:

    标签: elasticsearch


    【解决方案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 关系)时,父文档和子文档也是存储在您的索引中的文档,该文档位于集群中某处的分片内。当您的索引增长时(即当您有越来越多的父子和/或嵌套数据时),您添加节点,包含您的文档的分片将透明地分布在集群中。这意味着无论您的文档存储在何处,您都可以检索它们以及它们的相关文档,而无需执行昂贵的连接。

    【讨论】:

      【解决方案2】:

      所以你会得到更多关于水平缩放的信息here

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

      获取更多信息here

      【讨论】:

        猜你喜欢
        • 2011-07-21
        • 2015-09-20
        • 2016-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        相关资源
        最近更新 更多