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

问题描述

我对交易期间的收益感到好奇。会立即中断吗?还是其他光纤能够读取尚未提交的更改?

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

解决方法

当前,有一种方法可以使交易产生收益。这是因为现在有一个用于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',})

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选项。它启用事务引擎。如果没有此选项,则交易内部的收益将导致立即回滚。

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