Apache Ignite-包含20K对象的事务问题

时间:2018-10-03 20:01:01

标签: ignite

我想使用Apache Ignite提交一个包含近2万个对象的事务。 我已经在事务模式下使用CacheConfiguration配置了IgniteCache:

CacheConfiguration<Long, CDonneeAffichage> ccda = new    
CacheConfiguration<>(CacheConstant.CST_CACHE_DONNEE_AFFICHAGE);
ccda.setIndexedTypes(Long.class, CDonneeAffichage.class);
ccda.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);

使用IgniteTransactions创建交易:

IgniteTransactions transactions = igniteInstance.transactions();
try (Transaction tx = transactions.txStart()){
    //20K put in the Cache          
    tx.commit();
}


更新大约需要20秒钟,在此期间,可以检索部分数据,例如12秒钟之后,我可以看到总计11k个对象。
我确实需要能够拥有一致的数据: 在事务提交之前,我应该有0个数据返回 提交事务后,我应该有整个20K。
有人知道是否可以使用Apache Ignite进行这种交易吗?
谢谢,

1 个答案:

答案 0 :(得分:1)

Ignite中的事务满足ACID要求。但是某些操作不是事务性的。没有事务操作涉及缓存中的所有条目,因为它将需要锁定所有键,这是一个相当复杂的操作。其他事务将无法执行其工作,因为所有条目都将被锁定。

因此,当您调用IgniteCache#size()方法时,则不会启动事务,并且可能会收到部分结果。交易仅与其他交易隔离,而与大型交易无关。

要确定API方法是否是事务性的,可以检查它引发的异常列表。如果存在TransactionException,则表示该方法支持事务。

SQL目前也是非事务性的。计划在2.7版中以实验模式发布事务SQL,该版本即将发布。