- ES写入后,refresh前,各个分片的数据一致吗? 就是说,数据写入主分片,是先同步到副分片再refresh,还是先refresh再同步?
- 假设是先同步再refresh,如果设置了refresh_interval = 30s,各个分片会同时刷新(同一秒)吗? 就是说,会出现这种情况吗:一个是0s 30s 60s 刷新,一个是5s 35s 65s刷新。如果会,那么查询分别走主副分片,结果数量也会先大后小了——这个的用户体验不好吧
ES数据同步-refresh-查询
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-08 16:56关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在ES中,当数据被写入到主分片时,数据会在所有副本上同步更新,然后触发refresh操作。这是为了确保所有的数据都是最新的。
关于您的第二个问题,如果设置
refresh_interval为30s,那么在30秒内,每个分片都会执行一次refresh操作。这将导致在同一秒内,一些分片可能会刷新得更早,而其他分片则可能稍晚些。然而,由于refresh的操作不会影响到实际的数据存储顺序,所以最终的结果并不会对用户的体验造成太大的影响。对于用户来说,他们的请求会被发送给最接近他们地理位置的分片处理。因此,即使某些分片比其他分片刷新得更快,只要这些分片中的数据仍然是最新的,用户的体验应该不会有太大差异。
以下是一个简单的示例代码:
const { Client } = require('@elastic/elasticsearch'); async function main() { const client = new Client({ node: 'http://localhost:9200', }); await client.indices.refresh({ index: 'my-index' }); } main();在这个例子中,我们使用了一个模拟的Elasticsearch客户端来执行一个简单的
indices.refresh操作,并没有涉及到任何复杂的刷新机制。但是,你可以看到,无论何时,索引都将在所有副本上刷新,以确保数据的一致性。解决 无用评论 打赏 举报