面试题答案
一键面试- 使用版本控制
- 方法:Elasticsearch 支持文档版本号。每次更新文档时,版本号递增。在更新请求中指定预期版本号,如果实际版本号与预期不符,更新将失败。例如,在
update
API 中通过version
参数指定版本号。 - 适用场景:适用于多个进程或线程可能同时尝试更新同一文档的场景,确保只有符合预期版本的更新才能成功,防止数据覆盖丢失。
- 方法:Elasticsearch 支持文档版本号。每次更新文档时,版本号递增。在更新请求中指定预期版本号,如果实际版本号与预期不符,更新将失败。例如,在
- 乐观锁机制
- 方法:类似于版本控制,依赖文档版本号。应用程序在读取文档时获取版本号,在更新时携带该版本号。Elasticsearch 检查版本号匹配后才执行更新。这是一种乐观的方式,假设并发冲突概率较低,先进行更新尝试。
- 适用场景:适用于读多写少的场景,因为它不需要像悲观锁那样锁定资源,减少了等待时间,提高了系统吞吐量。
- 条件更新
- 方法:通过
script
或bool
查询等方式,在更新请求中设置条件。只有当文档满足指定条件时才进行更新。例如,只有当某个字段的值符合特定条件时才更新文档。 - 适用场景:适用于根据文档当前状态决定是否更新的场景,确保更新操作是有意义的,避免无效更新。比如仅当库存数量大于 0 时才进行扣减库存的更新。
- 方法:通过
- 外部系统协调
- 方法:在 Elasticsearch 外部引入协调机制,如使用分布式锁服务(如 Redis 实现的分布式锁)。在更新 Elasticsearch 文档前,先获取分布式锁,更新完成后释放锁。
- 适用场景:适用于跨多个 Elasticsearch 集群或与其他系统交互时需要确保更新一致性的场景,防止不同系统间同时发起无效更新。