我是新来ElasticSearch,我估计它的一个项目。
在ES,复制可以是同步或异步。 在异步的情况下,客户端只要文件被写入主碎片返回成功。 然后将文档推到其他副本是异步的。
当异步写入,我们如何确保当GET完成,数据即使它没有传播到所有副本返回。 因为当我们在做一个ES GET,查询被转发到相应的碎片的副本之一。 只要我们写异步,主碎片可以在文档但doingthe获取选中的副本可能没有收到/写文件呢。 在卡桑德拉,我们可以在写入时指定的一致性水平(ONE,QUORUM,ALL)以及读取。 是类似的东西可能在ES读?
对了,你可以设置复制是异步(默认是同步)不等待副本,但在实践中,这不会给你太多。
每当你读取数据可以指定偏好参数来控制,其中的文件将要取之。 如果你使用preference:_primary
你要确保你总是把文件从主碎片,否则,如果get完成之前的文件可在所有副本,它可能发生,你打一个碎片是没有它然而。 鉴于获取API的实时工作,它通常是有道理的,以保持同步的复制,从而使指数操作返回后你可以随时从应该包含任何碎片取回由ID文件。 不过,如果你试图得到一个文件建立索引时它的第一次,也可能发生的是你没有找到它。
有一个在elasticsearch写一致性参数为好,但相比其他数据存储器的工作方式是不同的,它是不相关的复制是同步或异步。 随着一致性参数可以控制数据的多个副本需要如何可为了写操作将被允许的。 如果数据没有足够的副本可写操作(等待长达1分钟,时间间隔,你可以通过超时参数更改后)失败。 这只是一个初步的检查,以决定是否接受手术与否。 这并不意味着,如果在副本的操作失败将rollbacked。 事实上,如果对副本的写操作失败,但成功的一个主要的假设是,也有一些是错误的副本(或者它运行的hardward),从而为失败并重新创建另一节点上的碎片将被标记。 为了一致性默认值是quorum
,并且还可以设置为one
或all
。
这就是说,当涉及到获取API,elasticsearch不是最终一致,但正如一旦文档被索引,你可以找回一致。
新添加的文件不适用于搜索,直到下一个刷新操作,这恰好每一秒自动默认的事实,是不是真正的最终一致性(如文件存在,可以通过ID检索),但更多关于如何搜索和Lucene的工作,以及如何文档是由通过Lucene的可见。
下面是我给邮件列表上的答案:
据我了解大局,当你索引它写在事务日志文件,然后你从ES一个成功的答案。 之后,以异步方式,它的复制在其他节点上,并通过Lucene的索引。
这就是说,你不能对文档立刻搜索 ,但你可以得到它。 如果需要的话,当你得到一个文件ES将读取TLOG。
我认为(不知道),如果该副本是不是最新的,则得到的将是在主TLOG发送。
如我错了请纠正我。