| // Licensed to the Apache Software Foundation (ASF) under one or more |
| // contributor license agreements. See the NOTICE file distributed with |
| // this work for additional information regarding copyright ownership. |
| // The ASF licenses this file to You under the Apache License, Version 2.0 |
| // (the "License"); you may not use this file except in compliance with |
| // the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| = Atomicity Modes |
| |
| By default, a cache supports only atomic operations, and bulk operations such as `putAll()` or `removeAll()` are executed as a sequence of individual puts and removes. |
| You can enable transactional support and group multiple cache operations, on one or more keys, into a single atomic transaction. |
| These operations are executed without any other interleaved operations on the specified keys, and either all succeed or all fail. |
| There is no partial execution of the operations. |
| |
| To enable support for transactions for a cache, set the `atomicityMode` parameter in the cache configuration to `TRANSACTIONAL`. |
| |
| CAUTION: If you configure multiple caches within one link:configuring-caches/cache-groups[cache group], the caches must be either all atomic, or all transactional. You cannot have both TRANSACTIONAL and ATOMIC caches in one cache group. |
| |
| Ignite supports 3 atomicity modes, which are described in the following table. |
| |
| [cols="30%,70%",opts="autowidth"] |
| |=== |
| | Atomicity Mode | Description |
| |
| | ATOMIC | The default mode. |
| All operations are performed atomically, one at a time. |
| Transactions are not supported. |
| The `ATOMIC` mode provides better performance by avoiding transactional locks, whilst providing data atomicity and consistency for each single operation. |
| Bulk writes, such as the `putAll(...)` and `removeAll(...)` methods, are not executed in one transaction and can partially fail. |
| If this happens, a `CachePartialUpdateException` is thrown and contains a list of keys for which the update failed. |
| | TRANSACTIONAL |
| a| Enables support for ACID-compliant transactions executed via the key-value API. |
| SQL transactions are not supported. |
| Transactions in this mode can have different link:key-value-api/transactions#concurrency-modes-and-isolation-levels[concurrency modes and isolation levels]. |
| Enable this mode only if you need support for ACID-compliant operations. |
| For more information about transactions, see link:key-value-api/transactions[Performing Transactions]. |
| |
| [NOTE] |
| ==== |
| [discrete] |
| === Performance Considerations |
| The `TRANSACTIONAL` mode adds a performance cost to cache operations and should be enabled only if you need transactions. |
| ==== |
| |
| | TRANSACTIONAL_SNAPSHOT |
| |
| a| An experimental mode that implements multiversion concurrency control (MVCC) and supports both key-value transactions and SQL transactions. See link:transactions/mvcc[Multiversion Concurrency Control] for details about and limitations of this mode. |
| |
| [WARNING] |
| ==== |
| MVCC implementation is in beta and should not be considered for production. |
| ==== |
| |
| |
| |=== |
| |
| |
| You can enable transactions for a cache in the cache configuration. |
| |
| [tabs] |
| -- |
| tab:XML[] |
| [source,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> |
| |
| <!-- Optional transaction configuration. --> |
| <property name="transactionConfiguration"> |
| <bean class="org.apache.ignite.configuration.TransactionConfiguration"> |
| <!-- Configure TM lookup here. --> |
| </bean> |
| </property> |
| </bean> |
| ---- |
| tab:Java[] |
| [source,java] |
| ---- |
| include::{javaCodeDir}/PerformingTransactions.java[tags=enabling,!exclude,indent=0] |
| ---- |
| tab:C#/.NET[] |
| [source,csharp] |
| ---- |
| var cfg = new IgniteConfiguration |
| { |
| CacheConfiguration = new[] |
| { |
| new CacheConfiguration("txCache") |
| { |
| AtomicityMode = CacheAtomicityMode.Transactional |
| } |
| }, |
| TransactionConfiguration = new TransactionConfiguration |
| { |
| DefaultTransactionConcurrency = TransactionConcurrency.Optimistic |
| } |
| }; |
| ---- |
| tab:C++[unsupported] |
| -- |