我正在为嵌入式 NoSQL 数据库编写 C++ 中的数据库 LRU 缓存以解决性能问题,并且我试图理解其背后的正确假设行为和理念。
假设有一个处于某个状态 X 的 NoSQL 数据库。我们从相同的隔离状态 X 启动事务 1 (tx1) 和事务 2 (tx2)。两个事务都尝试更改相同的键/值对。每笔交易都将值更改为某个值,并且两个值不相等。Tx1 提交,然后 tx2 提交。数据库的正确行为是什么?
- 新值是从 tx2 提交的值,因为它覆盖了 tx1
- 新值是从 tx1 提交的值,因为提交 tx2 应该会失败
还是答案是别的?
如果它符合 ACID,有人可以详细说明应该如何编程这样的系统吗?
我要缓存的数据库是LMDB,它声称符合 ACID 标准。