You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch是否支持ACID特性相关技术咨询

Elasticsearch ACID特性支持说明

Elasticsearch并没有完整实现传统关系型数据库定义的ACID特性,仅在特定场景下支持部分能力,你提到的异步行为特性也确实会对部分ACID保障产生影响,各维度的具体支持情况如下:

原子性(Atomicity)

  • 仅单文档级别支持完全原子性:针对单个JSON文档的增、删、改操作是原子的,要么全部生效要么全部失败,不会出现文档部分字段更新的异常状态
  • 批量操作(如_bulk、_mget等多文档接口)不支持整体原子性,请求内的单条文档操作互相独立,某一条操作失败不会触发整个批量请求的回滚,其他操作正常执行

一致性(Consistency)

  • Elasticsearch默认采用最终一致性模型:写入操作先在主分片执行成功后即可返回,副本分片的同步是异步进行的,写入完成后立刻查询副本分片可能会拿到旧数据,等所有分片同步完成后全集群数据才会一致
  • 可通过参数调整一致性要求:比如写入时设置consistency=quorum要求多数分片确认写入后再返回成功,也可以在写入请求后加?refresh=true强制刷新索引,实现写入后立刻可见的强一致效果,但这两种配置都会显著降低写入性能

隔离性(Isolation)

  • 单文档操作天然具备隔离性:文档更新过程中,所有查询请求只会拿到更新完成前的完整旧文档,或者更新完成后的完整新文档,不会读取到中间更新状态
  • 不存在传统数据库的多事务隔离级别,多文档并发操作没有隔离保障,多个并发请求同时修改多个关联文档时,可能出现部分文档更新成功、部分失败的不一致状态,不同查询也可能拿到不同版本的关联数据

持久性(Durability)

  • 单节点层面默认提供接近完全的持久性保障:所有写入操作会先写入事务日志(translog),哪怕节点突然宕机,重启后会自动从translog中恢复未持久化到磁盘的数据
  • 集群层面的持久性取决于副本配置:如果索引没有配置副本分片,持有主分片的节点损坏会直接丢失数据;配置多副本分片的前提下,只要不是所有持有对应分片的节点同时损坏,数据就不会丢失
  • 你注意到的异步特性主要影响持久性的默认表现:translog默认是每隔5秒异步刷盘,若在刷盘间隔内节点断电,可能会丢失最多5秒的写入数据。如果需要完全保障持久性,可以将index.translog.durability参数调整为request,让每次写入请求都同步刷盘,但会大幅降低写入吞吐量。

内容的提问来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:39:03