Aerospike database says, that it is
[...] architected with three key objectives:
To create a flexible, scalable platform that would meet the needs of today’s web-scale applications
To provide the robustness and reliability (ie, ACID) expected from traditional databases.
To provide operational efficiency (minimal manual involvement)
And in other place:
Aerospike is optimized to work with the latest in storage and database technology to squeeze as much transaction throughput as possible while still guaranteeing strong consistency (ACID).
First of all I didn't found any definition of transaction in Aerospike. Normally I get it as a sequence of operations on a database. However reading later I don't see that transactions are ACID:
When reading a detailed Aerospike ACID description I found that it only pretends ACID guarantees.
Examples:
- I want to make a sequence of operations (a, b, c) in a transaction. Each operation is an independent DB query. If c fails then I want a and b be rolled back by a DB system. I didn't found this feature in Aerospike.
Let's consider two concurrent transactions modifying a documents A and B. At the beginning A=0 and B=0:
- T1 adds 1 to
A
andB
- T2 multiply A and B by 2.
I expect that always we end up with
A==B
- result will be either:A=1 & B=1
when T2 will firstly locks/take ownership on documents A and BA=2 & B=2
when T2 will firstly locks/take ownership on documents A and B
What is a guarantee of this result?
- T1 adds 1 to
1. Can you confirm my results of my examples?
2. Does User Defined Functions helps somehow here?
PS
To be clear - I don't want say that Aerospike is bad. I see a great piece of good work there. I'm just missing a good clarifications when ACID guarantees fails there.