Режимы атомарности#
По умолчанию кеш поддерживает только единичные атомарные операции (режим ATOMIC). Массовые (bulk) операции, например putAll() и removeAll(), выполняются как последовательность отдельных операций добавления и удаления.
Транзакционный режим кеша позволяет выполнить группировку нескольких кеш-операций по одному или нескольким ключам. Все сгруппированные операции или завершаются успешно, или завершаются неудачей. Частичное изменение записей, которые охвачены транзакцией, невозможно: транзакция целиком выполняется как атомарная операция.
Чтобы включить поддержку транзакций в кеше, установите в его конфигурации значение TRANSACTIONAL для параметра atomicityMode.
Внимание
Если настраивается несколько кешей в одной кеш-группе, они должны быть полностью атомарными или полностью транзакционными. В одной кеш-группе не могут одновременно присутствовать и транзакционный, и атомарный кеши. Подробнее о группах написано в разделе «Кеш-группы».
Режимы атомарности, которые поддерживает DataGrid:
Режим атомарности |
Описание |
|---|---|
|
Режим по умолчанию. Все операции выполняются атомарно, по одной. Транзакции не поддерживаются. |
|
Включает поддержку ACID-транзакций, которые выполняются через Key-Value API. Транзакции SQL не поддерживаются. |
Внимание
Режим TRANSACTIONAL увеличивает издержки на кеш-операции. Включайте его только в случаях, когда нужны транзакционные гарантии.
Включить поддержку транзакций можно в конфигурации кеша:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="cacheConfiguration">
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="myCache"/>
<property name="atomicityMode" value="TRANSACTIONAL"/>
</bean>
</property>
<!-- Дополнительная конфигурация транзакций по умолчанию. -->
<property name="transactionConfiguration">
<bean class="org.apache.ignite.configuration.TransactionConfiguration">
...
</bean>
</property>
</bean>
CacheConfiguration cacheCfg = new CacheConfiguration();
cacheCfg.setName("cacheName");
cacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCacheConfiguration(cacheCfg);
// Дополнительная конфигурация транзакций по умолчанию.
TransactionConfiguration txCfg = new TransactionConfiguration();
cfg.setTransactionConfiguration(txCfg);
// Запустите узел.
Ignition.start(cfg);
var cfg = new IgniteConfiguration
{
CacheConfiguration = new[]
{
new CacheConfiguration("txCache")
{
AtomicityMode = CacheAtomicityMode.Transactional
}
},
TransactionConfiguration = new TransactionConfiguration
{
DefaultTransactionConcurrency = TransactionConcurrency.Optimistic
}
};