Режимы атомарности#
По умолчанию кеш поддерживает только единичные атомарные операции (режим ATOMIC). Массовые (bulk) операции, например putAll() и removeAll(), выполняются как последовательность отдельных операций добавления и удаления.
Транзакционный режим кеша позволяет выполнить группировку нескольких кеш-операций по одному или нескольким ключам. Все сгруппированные операции или завершаются успешно, или завершаются неудачей. Частичное изменение записей, которые охвачены транзакцией, невозможно: транзакция целиком выполняется как атомарная операция.
Чтобы включить поддержку транзакций в кеше, установите в его конфигурации значение TRANSACTIONAL для параметра atomicityMode.
Внимание
Если настраивается несколько кешей в одной кеш-группе, они должны быть полностью атомарными или полностью транзакционными. В одной кеш-группе не могут одновременно присутствовать и транзакционный, и атомарный кеши. Подробнее о группах написано в разделе «Кеш-группы».
Режимы атомарности, которые поддерживает DataGrid:
Режим атомарности |
Описание |
|---|---|
|
Режим по умолчанию. Все операции выполняются атомарно, по одной. Транзакции не поддерживаются. |
|
Включает поддержку ACID-транзакций, которые выполняются через Key-Value API. Транзакции SQL не поддерживаются. |
Внимание
Режим
TRANSACTIONALувеличивает издержки на кеш-операции. Включайте его только в случаях, когда нужны транзакционные гарантии.
Включить поддержку транзакций можно в конфигурации кеша:
XML:
<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>Java:
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);С#/.NET:
var cfg = new IgniteConfiguration { CacheConfiguration = new[] { new CacheConfiguration("txCache") { AtomicityMode = CacheAtomicityMode.Transactional } }, TransactionConfiguration = new TransactionConfiguration { DefaultTransactionConcurrency = TransactionConcurrency.Optimistic } };