五、Document APIs

本节首先简要介绍Elasticsearch的数据复制模型,然后详细描述以下CRUD API:

读写文件(Reading and Writing documents):

1、介绍:

Elasticsearch的每个索引都被分成分片,每个分片可以有多个副本。这些副本称为复制组,在添加或删除文档时必须保持同步。如果我们不这样做,会导致不同的结果在两个读取副本时。保持分片副本同步并提供从中读取的过程称为数据复制模型。Elasticsearch的数据复制模型基于主备份模型,在微软研究院PacificA的论文中有很好的描。该模型基于复制组中作为主分片的一个副本。其他的副本称为复制分片。主索引作为所有索引操作的主要入口点。它负责验证它们并确保它们是正确的。一旦主操作接受了索引操作,主操作还负责将操作复制到其他副本。本节的目的是对Elasticsearch复制模型作一个高层次的概述,并讨论它对读写操作之间的各种交互的影响。

2、基本写模型:

Elasticsearch中的每个索引操作首先使用路由解析为一个复制组,通常基于文档ID。一旦确定了复制组,操作将在内部转发到组的当前主分片。主碎片负责验证操作并将其转发到其他副本。由于副本可以脱机,主副本不需要复制到所有副本。相反,Elasticsearch维护应该接收操作的分片副本列表。这个列表称为同步副本,由主节点维护。顾名思义,这些是一组“good”分片副本,它们保证已经处理了所有已向用户承认的索引和删除操作。主程序负责维护这个不变量,因此必须将所有操作复制到这个集合中的每个副本。

主分片遵循这个基本流程:

(1)验证传入操作并在结构上无效时拒绝它(例如:有一个对象字段,其中预期有一个数字)

(2)在本地执行操作,即索引或删除相关文档。这还将验证字段的内容并在需要时拒绝(例如:在Lucene中索引关键字值太长)。

(3)将操作转发到当前同步复制集中的每个副本。如果有多个副本,则并行执行。

(4)一旦所有副本都成功地执行了操作并响应了主副本,主副本就会确认对客户机的请求已经成功完成。

故障处理

在索引过程中,很多事情都可能出错——磁盘可能损坏,节点可能彼此断开连接,或者一些配置错误可能会导致副本上的操作失败,尽管主服务器上的操作是成功的。这种情况并不常见,但主要工作人员必须对其作出反应。在主节点本身失败的情况下,主服务器所在的节点将向主服务器发送关于主服务器的消息。索引操作将等待(默认情况下最多1分钟),以便主服务器将一个副本提升为一个新的主副本。然后,操作将被转发到新的主服务器进行处理。注意,主节点还监视节点的健康状况,并可能决定提前降级主节点。这通常发生在持有主节点的节点由于网络问题与集群隔离时。更多细节见这里。

在主服务器上成功执行操作之后,主服务器必须在副本分片上执行操作时处理潜在的故障。这可能是由于副本上的实际故障,或由于网络问题阻止操作副本(或阻止副本响应)造成的。所有这些都有一个共同的最终结果:一个副本是同步复制集的一部分,会错过一个将要被确认的操作。为了避免违反不变量,主分片向主服务器发送一条消息,请求从同步复制集中删除有问题的分片。只有在主服务器确认移除碎片后,主分片才会确认操作。注意,主节点还将指示另一个节点开始构建一个新的分片副本,以便将系统恢复到健康状态。在将操作转发到副本时,主服务器将使用副本来验证它仍然是活动的主服务器。如果主服务器由于网络分区(或长时间GC)而被隔离,那么它可能会继续处理传入的索引操作,然后才会意识到它已经降级了。来自过期主程序的操作将被副本拒绝。当主服务器收到来自副本的拒绝请求的响应,因为它不再是主服务器时,它会联系主服务器,并知道它已经被替换了。然后将操作路由到新的主服务器。

如果没有副本将会发生什么:

这是一个由于索引配置或仅仅因为所有副本都失败而可能发生的有效场景。在这种情况下,主要是在没有任何外部验证的情况下处理操作,这可能看起来有问题。另一方面,主服务器自身不能失败其他分片,但是请求主服务器可以代表它这样做。这意味着主程序知道主分片是唯一一个好的副本。因此,我们保证主服务器不会将任何其他(过期的)分片副本提升为新的主服务器,并且主服务器中索引的任何操作都不会丢失。当然,因为此时我们只运行数据的一个副本,所以物理硬件问题可能导致数据丢失。请参见等待一些缓解选项的活动分片。

单一文档API(single   document  API):

1、Index  API:

2、Get     API:

3.   Delete  API:

4、Update  API:

多文档API( Multi-document APIs):

1、Multi Get  API:

2、Bulk   API:

3、Delete  By Query API:

4、Update  By Query API:

5、Reindex API:

注意:所有CRUD API都是单索引API。索引参数接受单个索引名,或指向单个索引的别名。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值