8.7. 批处理
批量允许事务的原子性和一些特征,但不能完全合并 JTA 或 XA 功能。与全用事务相比,批处理通常是更轻便且更便宜的事务。
提示
通常,每当事务的唯一参与都是 Data Grid 集群时,应使用批处理 API。另一方面,每当事务涉及多个系统时,应使用 JTA 事务(涉及 TransactionManager
)。例如,考虑到"Hello world!"的交易:从一个企业账户传输到其他账户。如果两个帐户都存储在 Data Grid 中,可以使用批处理。如果一个帐户位于数据库中,另一个是 Data Grid,则需要分布式事务。
注意
您不必 定义事务管理器来使用批处理。
8.7.1. API
将缓存配置为使用批处理后,您可以通过调用 Cache
上的 startBatch ()
和 endBatch ()
来使用它。E.g.,
Cache cache = cacheManager.getCache(); // not using a batch cache.put("key", "value"); // will replicate immediately // using a batch cache.startBatch(); cache.put("k1", "value"); cache.put("k2", "value"); cache.put("k2", "value"); cache.endBatch(true); // This will now replicate the modifications since the batch was started. // a new batch cache.startBatch(); cache.put("k1", "value"); cache.put("k2", "value"); cache.put("k3", "value"); cache.endBatch(false); // This will "discard" changes made in the batch
8.7.2. 批处理和 JTA
在评分后面,批处理功能会启动 JTA 事务,并且该范围内的所有调用都与其关联。为此,请使用非常简单(例如,没有恢复)内部 TransactionManager
实现。使用批处理时,您可以获取:
- 在批处理完成前,您获取在调用期间获取的锁定
- 作为批处理完成过程的一部分,更改均在批处理中复制。减少批处理中每个更新的复制时间。
- 如果使用同步复制或无效,复制/无效中的故障将导致批处理回滚。
- 所有与事务相关的配置也适用于批处理。