elasticsearch - 水平缩放的意义

标签 elasticsearch

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

Performing full SQL-style joins in a distributed system like Elasticsearch is prohibitively expensive. Instead, Elasticsearch offers two forms of join which are designed to scale horizontally.



请有人用外行术语向我解释第二句是什么意思。

最佳答案

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

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

如您所知,ES没有JOIN功能,并且出于上述原因(即“非常昂贵”)是有意这样做的。 ES中有four ways to model relationships:

通过对数据进行非规范化来实现

  • (首选)
  • 通过使用 nested types

  • 通过使用parent/child documents

  • 通过使用应用程序侧联接
  • 进行


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

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

  • 关于elasticsearch - 水平缩放的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51851754/

    相关文章:

    elasticsearch - 根据开发人员指南,无法构建Elastic libbeat

    logging - 是否可以通过URL控制Kibana搜索?

    c# - ElasticSearch 和 Nest 过滤不起作用

    amazon-web-services - 静态加密 : AWS Elasticsearch

    sorting - Elasticsearch使用嵌套聚合中的值对公式进行排序

    elasticsearch - 分片和副本的数量对磁盘大小有影响吗?

    elasticsearch - 如何在 java api 的 should/must 方法中添加 bool 查询?

    elasticsearch - 如何强制术语过滤器忽略停用词?

    python - 从S3向Elasticsearch发送日志文件的Python 2.7与3.8 Lambda

    ElasticSearch 和 Nest : Why am I missing the id field on a query?