我可以在 Tarantool 中进行交易吗?

Can I yield during an transaction in Tarantool?

我很好奇交易过程中的收益率。会立即中断吗?或者其他纤程是否能够读取尚未提交的更改?

我忽略了文档但没有看到它。

目前在交易中有yield的方法。这是因为现在有一个用于 memtx 和 vinyl 引擎的全功能事务管理器。

这是一个工作示例:

local fiber = require('fiber')

-- If you just use box.cfg{}, this app will fail
box.cfg{memtx_use_mvcc_engine=true}
--box.cfg{}

box.schema.space.create('account', {if_not_exists=true})
box.space.account:format({ {name='id',type='unsigned'},
      {name='first_name',type='string'},
      {name='last_name',type='string'},
})

box.begin()
box.space.account:put({2, "John", "Doe"})

print("sleeping")
fiber.sleep(1)
print("woke up")

box.space.account:put({3, "Ivan", "Ivanov"})

box.commit()

os.exit(0)

注意 memtx_use_mvcc_engine 选项。它启用事务引擎。如果没有这个选项,事务内部的 yield 将导致立即回滚。

新的事务管理器还将在事务内部进行更改,以便在提交之前对其他纤程和事务不可见。并且如果发生冲突(对同一数据的并行更改),事务将被回滚。