gpt4 book ai didi

elasticsearch - ElasticSearch与ElasticSearch + Cassandra

转载 作者:行者123 更新时间:2023-12-02 22:15:08 25 4
gpt4 key购买 nike

我的主要问题是,与仅使用Elasticsearch相比,将Cassandra和Elasticsearch集成的好处是什么?

实际上,在StackOverflow上有类似问题的答案(例如herehere)。但是有一些要点:

  • 很多答案都是古老的。这些年来,可能发生了很多变化。
  • 提到的一点是“有时ElasticSearch丢失写入”。但是,可以想象那些所谓的损失可能是由于这些年来已解决的一些错误所致。可以推测,例如Cassandra也可能存在一些会导致数据丢失的错误。 Cassandra和Elasticsearch之间是否存在导致Elasticsearch丢失数据但不会导致Cassandra丢失的根本区别?
  • 提到“如果不删除所有内容并重新加载,很难在ElasticSearch中进行模式更改。”假设我们的数据模型相对稳定或至少向后兼容,这对我们来说可能不是主要问题。此外,由于Elasticsearch中的动态映射,它可能会适应新的要求(例如,额外的字段)。
  • 关于Elasticsearch中的索引延迟,Cassandra也未提供一致性。因此,在Cassandra中,您可能还会面临读取书面数据的延迟。

  • 总体而言,当与Elasticsearch结合使用时,Cassandra会提供哪些额外的功能?

    P.S.如果总体上回答该问题可能会更好。但是,如果有必要,请假设我们仅将行追加到数据库中,并且从不删除或更新任何内容。我们希望能够在数据中进行全文搜索。

    最佳答案

    因此,作为链接的答案之一(Elasticsearch vs Cassandra vs Elasticsearch with Cassandra)的作者,我想我应该在这里进行介绍。

    those alleged loses may had been because of some bugs that have been solved in these years.



    这是绝对正确的说法。我写的答案已经有将近六年的历史了,ElasticSearch在那时已经发展成为一种更加可靠的产品。话虽这么说,Cassandra可以做一些ElasticSearch并非旨在做的事情(反之亦然)。

    what extra features does Cassandra offer...



    我可以想到一些,在这里我将对其进行总结:
  • 写入吞吐量/性能/延迟

  • ElasticSearch是基于Lucene项目的搜索引擎。以低延迟处理大量的写吞吐量并不是设计的目的。至少不是“开箱即用”。有多种方法可以配置ElasticSearch来达到更好的效果,如此处所述: Techniques to Achieve High Write Throughput With ElasticSearch。但是就构建具有最低配置的新集群而言,您将花费较少的时间来设计Cassandra来完成此任务。

    “有时ElasticSearch丢失写入”

    是的,我写的。再次,ElasticSearch得到了改善。很多。但是我 仍然看到这种情况在高写入吞吐量条件下发生。如果为某个特定级别的吞吐量设计了集群,并且应用程序超出了这些容限,导致节点因写反压而变得不堪重负,则写操作将丢失。

    Cassandra (Cassandra)也不能幸免于此。它只是具有更高的容忍度。如果您将它们同时使用,那么设计类似Kafka的东西来“限制”每个文件的写入吞吐量将是一个很好的方法。
  • 多数据中心高可用性(MDHA)

  • 具有定义逻辑数据中心和可用性区域(机架)的能力,Cassandra一直擅长在多个区域上复制数据集。
    对于ElasticSearch来说,这是有问题的,因为它没有逻辑数据中心的概念,并且其“主”节点处于非 Activity 状态。
  • 对等节点与基于角色的节点

  • 作为我的MDHA点的后续工作,ElasticSearch现在允许在群集中使用“角色”指定节点。您可以指定多个节点充当“主”角色,负责添加和更新索引。任何节点都可以将搜索流量定向到在“数据”角色下工作的节点。实际上,提高写入吞吐量的一种方法(我的第一个要点)是指定一个或两个具有“最重要”角色的节点,这可以防止读写流量相互干扰。

    这与Cassandra的方法不同,后者的每个节点都是对等节点,并且可以处理读写操作。能够相同地对待所有节点,从而简化了维护和管理。尽管人们普遍误解为“不”,但“种子”节点并不是什么特别的事情。
  • 查询与搜索

  • 对我来说,这是两者之间的根本区别。查询是 ,而不是与搜索相同。它们可能看起来很相似,但是却有很大的不同。

    通过匹配一个或多个列/属性上的模式来检索数据是 搜索。同样,对于搜索,结果的数量更多地是未知的。当然,Cassandra在最近几年中添加了一些功能,以允许基于 LIKE查询进行模式匹配(我不建议您使用它)。但是,当需要具有“搜索”数据集的能力时,Cassandra就无法与ElasticSearch竞争。

    通过在特定键(列)上提供特定值来检索数据是 查询。通过查询,可以更轻松地对要返回的结果数量有准确的期望。如果我正在构建应用程序,并且知道只需要基于带有特定键的静态预定义查询来检索数据,那么我会每次选择Cassandra。

    使用Cassandra,我还可以调整查询的一致性,从而需要更多或更少副本的操作确认。同样,我也可以根据应用程序的位置将这些操作定向到特定的地理区域。

    ...when used in conjunction with Elasticsearch?



    他们互相称赞。 Cassandra 擅长ElasicSearch所不具备的某些功能(详见上文)(反之亦然……说了很多)。对应用程序的要求可能需要搜索和查询。有时您的应用程序需要高速键查找“哦,我们也要搜索”。

    摘要,tl; dr;

    因此,尽管我在这里已经写了很多文章,但我将继续提到的重点是为这项工作选择合适的工具。当我需要 搜索时,我将选择ElasticSearch。在高度可用的,具有地理位置感知的场景中,当我需要 查询时,我将选择Cassandra。我仍然看到应用程序同时使用两者,因此两者各有千秋。

    关于elasticsearch - ElasticSearch与ElasticSearch + Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61224168/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com