加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

nosql – ElasticSearch中的GET一致性(和Quorum)

发布时间:2020-12-13 13:32:05 所属栏目:百科 来源:网络整理
导读:我是ElasticSearch的新手,我正在为一个项目进行评估. 在ES中,复制可以是同步或异步.在异步的情况下,只要将文档写入主分片,客户端就会返回成功.然后将文档异步推送到其他副本. 当异步编写时,我们如何确保在完成GET时,即使数据没有传播到所有副本,也会返回数据
我是ElasticSearch的新手,我正在为一个项目进行评估.

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

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

是的,您可以将 replication设置为异步(默认为同步)以便不等待副本,尽管在实践中这并不会给您带来太多帮助.

每当您读取数据时,您都可以指定preference参数来控制文档的取自何处.如果您使用首选项:_primary,请确保始终从主分片中获取文档,否则,如果在文档在所有副本上可用之前完成获取,则可能会遇到没有它的分片然而.鉴于get api实时工作,保持复制同步通常是有意义的,这样在索引操作返回后,您总是可以从任何应该包含它的分片中通过id返回文档.尽管如此,如果您在第一次索引文档时尝试取回文档,那么您可能会发现它没有找到它.

elasticsearch中也有一个写一致性参数,但与其他数据存储的工作方式不同,它与复制是同步还是异步无关.使用consistency参数,您可以控制需要多少份数据副本才能允许写入操作.如果没有足够的数据副本可用,则写操作将失败(等待最多1分钟后,您可以通过timeout参数更改的间隔).这只是一个初步检查,以决定是否接受该操作.这并不意味着如果操作在副本上失败,它将被回滚.实际上,如果写操作在副本上失败但在主数据库上成功,则假设副本存在错误(或者正在运行的硬件),因此该分片将被标记为失败并在另一个节点上重新创建.一致性的默认值是仲裁,也可以设置为一个或全部.

也就是说,当谈到get api时,elasticsearch最终并不一致,但只是一致,因为一旦文档被索引,你就可以检索它.

事实上新添加的文档直到下一次刷新操作才能进行搜索,默认情况下每秒自动发生一次,这实际上不是最终的一致性(因为文档在那里并且可以通过id检索),但更多关于如何搜索和lucene工作以及如何通过lucene使文档可见.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读