Elasticsearch没有像Cassandra一样的“读一致性”参数。但它有“写一致性”和“读偏好”。关于写一致性,文档中说明如下:
写入一致性
为了防止在网络分区的“错误”一侧进行写入,索引操作默认情况下仅在存在大多数(>副本数/2+1)活动分片时才成功。可以使用action.write_consistency设置在节点级别上覆盖此默认值。要针对每个操作更改此行为,则可以使用一致性请求参数。
有效的写入一致性值为一个、法定人数和所有。
请注意,对于副本数为1(数据总共有2个副本)的情况,默认行为是如果1个副本(主副本)可以执行写入,则成功。
索引操作仅在复制组内所有活动分片都索引了文档(同步复制)后才返回。
如果
1)索引操作是否会在大多数分片完成索引后立即返回?(尽管所有分片都是活动的)
2)还是索引操作会在所有活动分片完成索引后返回?(即只有在出现故障/超时的情况下才考虑大多数)
为了防止在网络分区的“错误”一侧进行写入,索引操作默认情况下仅在存在大多数(>副本数/2+1)活动分片时才成功。可以使用action.write_consistency设置在节点级别上覆盖此默认值。要针对每个操作更改此行为,则可以使用一致性请求参数。
有效的写入一致性值为一个、法定人数和所有。
请注意,对于副本数为1(数据总共有2个副本)的情况,默认行为是如果1个副本(主副本)可以执行写入,则成功。
索引操作仅在复制组内所有活动分片都索引了文档(同步复制)后才返回。
如果
write_consistency=quorum
(默认)且所有分片都处于活动状态(无节点故障,无网络分区),则:1)索引操作是否会在大多数分片完成索引后立即返回?(尽管所有分片都是活动的)
2)还是索引操作会在所有活动分片完成索引后返回?(即只有在出现故障/超时的情况下才考虑大多数)
在第一种情况下 - 读取可能是最终一致的(可能获取过时数据),写入更快。
在第二种情况下 - 读取是一致的(只要没有网络分区),写入较慢(因为它等待较慢的分片/节点)。
有人知道它是如何工作的吗?
我想知道的另一件事是 - 为什么get/search请求中'preference'参数的默认值是randomized
而不是_local
(我认为后者可能更有效率)