Apache Kudu 的事务概念

Apache Kudu目前支持单tablet的ACID写操作,采用MVCC和Raft一致性算法。多tablet事务未实现,但未来将提供完全严格的可序列化语义。Kudu的读操作包括一致性的扫描,允许READ_LATEST和READ_AT_SNAPSHOT两种模式,后者提供可重复读取和外部一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kudu 旨在最终完全获得 ACID ,但是多 tablet 事务尚未实施。最终 Kudu 将支持完全严格的可序列化语义。事实上,它已经在有限的范围内,但并不是所有的角落都被覆盖,因为这仍然是一个正在进行的工作。
Kudu 目前允许以下操作:

  • Write operations是在具有多个副本的单个 tablet 中,插入、更新或删除的 sets of rows ( 行集 )。写操作没有单独的 “read sets” ,即它们在执行写入之前不扫描现有数据。每个写入仅涉及即将更改的行的先前状态。用户不需显示调用“committed” ,它们将在系统完成后自动提交。
  • Scans 是可以遍历多个 tablets读取信息的操作,具有一致性或正确性保证。扫描可以按照时间戳读取,即用户能够设置扫描时间戳,获取该时间点上存储的结果。

Single tablet write operations

Kudu 采用多版本并发控制(MVCC)和 Raft 一致性算法。Kudu 的每个写入操作必须经过 tablet leader。

  1. leader 获取将更改行的锁。
  2. leader 在写操作提交到副本之前分配写入时间戳。这个时间戳是 MVCC 中写操作的标签。
  3. 在大多数副本确认更改后,实际的行将被更改。
  4. 更改完成后,它们可以以原子方式同时进行写入和读取。
    tablets 的所有副本都遵循相同的操作顺序,如果为写入操作分配时间戳 n 并更改行 x ,则保证时间戳 m > n 的第二次写入操作可以看到 x 的新值。
    写操作是根据时间戳排序的。换句话说,在一个公认的有限的上下文中,写入具有严格的可序列化语义。多行写入操作尚未完全原子化。批量操作中单次写入的故障不会回滚操作,而是产生每行错误。

Writing to multiple tablets

Kudu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值