8.3. 事务锁定


8.3.1. pessimistic 事务缓存

从锁定的角度的角度来看,在写入密钥时,pessimistic 事务会获取密钥的锁定。

  1. 锁定请求发送到主所有者(可以是显式锁定请求或操作)
  2. 主所有者尝试获取锁定:

    1. 如果成功,它会发回正回复;
    2. 否则,会发送负回复,并回滚事务。

例如:

transactionManager.begin();
cache.put(k1,v1); //k1 is locked.
cache.remove(k2); //k2 is locked when this returns
transactionManager.commit();

cache.put (k1,v1) 返回时,k1 会被锁定,且集群中其它任何事务都无法写入它。仍可读取 k1。当事务完成时(提交或回滚)后,k1 上的锁定会被释放。

注意

对于条件操作,验证在 originator 中执行。

8.3.2. 光率事务缓存

在事务准备时,会获取特定的事务锁定,且仅保留在事务提交(或回滚)上点。这与 5.0 默认锁定模型不同,本地锁定在写时获得,并在准备期间获取集群锁定。

  1. 准备发送到所有所有者。
  2. 主所有者会尝试获取所需的锁定:

    1. 如果锁定成功,它将执行写入偏移检查。
    2. 如果写入偏移检查成功(或被禁用),请发送正回复。
    3. 否则,会发送负回复,并回滚事务。

例如:

transactionManager.begin();
cache.put(k1,v1);
cache.remove(k2);
transactionManager.commit(); //at prepare time, K1 and K2 is locked until committed/rolled back.
注意

对于条件命令,验证仍然在原始卷中发生。

8.3.3. 我需要什么 - pessimistic 或 optimistic 事务?

从用例的角度来看,当同时运行的多个事务之间没有竞争时,应使用选择的事务。这是因为,如果数据在读取和提交的时间之间有所变化(启用了 write skew 检查),则最佳事务回滚。

另一方面,当密钥和事务回滚有高竞争时,pessimistic 事务可能更加适合。Pessimistic 事务本身更经济:每个写入操作可能涉及 RPC 进行锁定。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.