当前位置: 首页 > 面试题库 >

ElasticSearch中的GET一致性(和法定人数)

景鸿才
2023-03-14
问题内容

我是ElasticSearch的新手,正在为一个项目进行评估。

在ES中,复制可以同步或异步。在异步情况下,将文档写入主分片后,客户端将成功返回。然后将文档异步推送到其他副本。

当异步写入时,我们如何确保在完成GET之后,即使数据没有传播到所有副本也返回数据。因为当我们在ES中执行GET时,查询将转发到适当分片的副本之一。假设我们异步编写,则主要分片可能具有文档,但是用于执行GET的所选副本可能尚未接收/编写文档。在Cassandra中,我们可以在写入和读取时指定一致性级别(ONE,QUARUM,ALL)。ES中的读取是否有可能这样?


问题答案:

没错,您可以将复制设置为异步(默认为同步),以不等待副本,尽管实际上这样做并不会给您带来多少好处。

每当您读取数据时,都可以指定首选项参数,以控制将从何处获取文档。如果使用,preference:_primary请确保始终从主碎片中取出文档,否则,如果在所有副本上的文档可用之前完成获取操作,则可能碰到了尚无该碎片的碎片。鉴于get
api是实时工作的,因此保持复制同步通常很有意义,因此在索引操作返回之后,您始终可以通过id从应该包含该文件的任何分片中获取该文档。不过,如果您尝试在第一次建立索引时取回文档,那么很可能会找不到您。

Elasticsearch中也有一个写一致性参数,但是与其他数据存储的工作方式不同,它与复制是同步还是异步无关。具有一致性参数,您可以控制需要多少数据副本才能允许写入操作。如果没有足够的数据副本,则写入操作将失败(等待长达1分钟后,您可以通过timeout参数更改该间隔)。这只是决定是否接受该操作的初步检查。这并不意味着如果对副本的操作失败,它将被回滚。实际上,如果对副本执行写操作失败但在主副本上执行写操作成功,则认为该副本存在问题(或副本所运行的硬盘),因此该分片将被标记为失败并在另一个节点上重新创建。一致性的默认值为quorum,也可以设置为oneall

就是说,当涉及到get api时,elasticsearch最终并不是一致的,而是一致的,因为一旦为文档建立索引就可以检索它。

新添加的文档直到下一次刷新操作(默认情况下默认每秒自动发生)才可供搜索的事实,实际上与最终的一致性(因为文档在那里并且可以通过id检索)无关,而是有关如何搜索的更多信息。和lucene的工作以及如何通过lucene使文档可见。



 类似资料:
  • 有人能告诉我我做错了什么吗? 慰问: (节点:11924)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请使用CLI标志(请参阅https://nodejs.org/api/cli.html#cli_unhand

  • 19.7.1. 尚未实施的GIS特性 19.7.1. 尚未实施的GIS特性 额外的元数据视图 OpenGIS规范建议了数种额外的元数据视图。例如,包含几何列的描述的名为GEOMETRY_COLUMNS的系统视图,对于数据库中的每列有1行相关内容。 作用在LineString和MultiLineString上的OpenGIS函数Length()目前应在MySQL中以GLength()的方式调用。 问

  • 本文向大家介绍一致性哈希算法?相关面试题,主要包含被问及一致性哈希算法?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot pot)问题,初衷和CARP(缓冲阵列路由协议,Cache Array Routing Protocol)十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT(D

  • 问题内容: 如果高速缓存一致性是在硬件级别实现的,为什么我们需要可变的?任何内核/处理器都应该获得最新值吗? 还是完全解决了另一个问题? 问题答案: 高速缓存一致性可以在处理器级别实现,但是,除非处理器内存模型保证顺序一致性(在大多数现代体系结构中不是这种情况),否则只有在需要时才会获得高速缓存一致性。 这就是volatile的含义:它要求JVM生成相关的机器指令,这些指令将要求处理器将其缓存与主

  • Visual Studio代码无法识别golang文件的错误。它适用于其他编程语言,但是当我创建go文件时,即使我是故意这样做的,也无法识别错误。即使文件没有错误或有错误,也会出现警告“错误:TypeError:不能读取未定义的属性'get'” 操作系统:ubuntu 18.04 visual Studio:1.52.1

  • 我刚开始使用Javascript和Discord进行开发。js,并收到以下错误: TypeError:无法读取未定义的属性“fetch” 我正在尝试执行轮询命令。这是代码(我删除了所有其他内容,只是想让它退出频道): 我已经试着把它放在Main.js工作: 但是我想要正确的文件。这就是我在客户上面所做的。在(‘消息’等)上。 当然,我谷歌了一下,看了看留档,但没有帮助。 正如我所说,我是编程新手,