1
  • 我了解 Tarantool 在存储过程中有 ACID 事务。我的问题是:它是否还确保内存数据与持久文件系统数据同步?例如,如果我使用存储过程更改 5 条记录,并且在将更改写入 WAL 文件时出现问题,内存缓存是否会回滚到所有 5 条记录的原始值?

  • 此外,当更新事务正在进行时,其他读者是否会看到“脏”的未提交记录或记录的一致视图,因为这些记录在事务开始之前就存在?

谢谢

4

1 回答 1

1
  1. Tarantool 在存储过程中具有特殊的事务控制功能[1]。但它有一些限制,例如:您不能在 box.begin() box.end() 部分调用 fiber.yield()[2] (包括底层调用,即 fio、套接字等)。您可以在此处找到有关事务控制的更多信息:https ://tarantool.io/en/doc/1.9/book/box/atomic.html?highlight=yield 。

而且,tarantool 支持 fsync[3]。

[1] https://tarantool.io/en/doc/1.9/book/box/box_txn_management.html?highlight=commit#lua-function.box.commit

[2] https://tarantool.io/en/doc/1.9/reference/reference_lua/fiber.html?highlight=yield#lua-function.fiber.yield

[3] https://tarantool.io/en/doc/1.9/reference/configuration/index.html?highlight=fsync#confval-wal_mode

  1. 只有当用户使用光纤并且不控制自己的代码时才有可能。这意味着只有在用户代码中存在逻辑错误时才有可能。

不客气。

于 2018-06-04T19:22:53.933 回答