不小心我正在编写的一些代码自己慢慢变成了一个数据库系统,具有增量索引、自由格式的“文档”(又名 CouchDB 类型),它可以具有任意属性...... annyywaay......我决定继续发展它,主要是为了教育目的,并且为了我的需要而真正严格地定制它并保持精简,因为我不想让它对我自己的需要有用(多么慷慨:))......
无论如何,我想知道是否有人对 Mnesia 如何“在幕后”实施交易有意见/更多信息。
Ulf W.,我一直很欣赏你在网上的帖子,所以也许你对此有更深入的信息?
Mnesia 使用两阶段提交协议来管理分布式事务。
所以我一直在考虑更多的事情......事务锁可以通过在每个表示表行的元组中都有一个“Lock”元素来破解......该元素将包含Pid持有执行当前事务的锁的进程(并且由事务管理器产生)(或者出于效率原因,Pid 将存储在其他地方,关键是每行都有一个 Pid)。如果另一个事务想要从锁定的行写入/读取,事务管理器将不执行它,并将其留在队列中以供以后尝试(下一次尾递归)。我将不得不更多地考虑检查点如何工作......但总的来说,我开始理解事物的结构,至少在概念上......它会很丑;
关于分布式事务......我猜测事务乐趣是通过电线发送到另一个节点,首先将其转换为二进制文件,然后在另一端重建它......现在,关于这个的问题。由于 fun 是一个闭包,假设我在 fun 中使用了一个绑定在 fun 之外的变量,例如 10 个元素的列表,然后闭包作为要在另一个节点上执行的事务传入(由事务管理器透明地显示)-我假设闭包语义代表将发送具有 10 个元素的列表以及闭包“关闭”的词汇环境的一部分……我在这里遗漏了什么吗?只是在想如何实现分布式事务......
谢谢
由于 Mnesia 是开源的,您可以查看代码本身。与 CouchDB 类似。