Database 记忆交易

Database 记忆交易,database,erlang,mnesia,Database,Erlang,Mnesia,不经意间,我正在编写的一些代码正在慢慢地自行变成一个数据库系统,具有增量索引、自由形式的“文档”(又名CouchDB类),可以具有任意属性。。。安尼瓦伊。。。我决定继续发展它,主要是为了教育目的,并且为了我的需要而严格地定制它,并保持它的精简,因为我不想让它对任何人都有用,只是我自己的需要(多么慷慨:) 无论如何,我想知道是否有人对Mnesia如何“在幕后”实施交易有异议/更多信息 Ulf W.,我一直很感激你在网上的帖子,所以也许你对此有更深入的了解?所以我一直在想更多的事情。。。 通过在表示

不经意间,我正在编写的一些代码正在慢慢地自行变成一个数据库系统,具有增量索引、自由形式的“文档”(又名CouchDB类),可以具有任意属性。。。安尼瓦伊。。。我决定继续发展它,主要是为了教育目的,并且为了我的需要而严格地定制它,并保持它的精简,因为我不想让它对任何人都有用,只是我自己的需要(多么慷慨:)

无论如何,我想知道是否有人对Mnesia如何“在幕后”实施交易有异议/更多信息


Ulf W.,我一直很感激你在网上的帖子,所以也许你对此有更深入的了解?

所以我一直在想更多的事情。。。 通过在表示表行的每个元组中都有一个“Lock”元素,可以入侵事务锁。。。该元素将包含持有执行当前事务的锁的进程的Pid(由事务管理器生成)(或者出于效率原因,Pid将存储在其他地方,重点是每行有一个Pid)。如果另一个事务想从锁定行写入/读取,事务管理器将不执行它,并将它留在队列中等待以后的尝试(下次它再次出现)。我将不得不更多地考虑检查点将如何工作以及。。。但总的来说,我开始了解事物是如何构成的,至少在概念上。。。这会很难看;))也许比记忆学的发展要慢几个数量级,但至少我会学到很多

关于分布式事务。。。我猜,通过先将事务转换为二进制文件,然后在另一端重建它,可以将事务通过线路发送到另一个节点。。。现在,有一个问题。因为fun是一个闭包,假设我在fun中使用了绑定在fun之外的变量,比如10个元素的列表,然后闭包作为一个事务传入,该事务将在另一个节点上执行(由事务管理器透明地执行)-我假设闭包语义将包含10个元素的列表以及闭包“关闭”的词法环境的一部分发送出去。。。我是不是遗漏了什么?只要想想如何实现分布式事务


谢谢

因为Mnesia是开源的,您可以看看代码本身。与CouchDB类似

Mnesia使用两阶段提交协议来管理分布式事务