在传递给 mnesia:async_dirty() 的函数中执行的一系列 mnesia:dirty_ 命令与那些“原始”执行的完全相同的事务之间有什么区别?
即,这样做有什么区别:
mnesia:dirty_write({table, Rec1}),
mnesia:dirty_write({table, Rec1}),
mnesia:dirty_write({table, Rec1})
Run Code Online (Sandbox Code Playgroud)
和
F = fun() ->
mnesia:dirty_write({table, Rec1}),
mnesia:dirty_write({table, Rec1}),
mnesia:dirty_write({table, Rec1})
end,
mnesia:async_dirty(F)
Run Code Online (Sandbox Code Playgroud)
谢谢
让我们首先引用用户指南的上下文async_dirty:
通过将相同的“fun”作为参数传递给函数
mnesia:async_dirty(Fun [, Args]) ,它将在脏上下文中执行。
函数调用将被映射到相应的脏函数。
这仍然涉及日志记录、复制和订阅,但不会涉及
锁定、本地事务存储或提交协议。检查点
保留器将被更新,但将被更新为“脏”。因此,它们将
异步更新。这些函数将等待在一个节点上执行操作
,而不是在其他节点上执行。如果表驻留在本地,则不会发生等待。
您提供的两个选项将以相同的方式执行。然而,当您执行选项一中的脏函数时fun,每个函数都是对 mnesia 的单独调用。使用async_dirty,这 3 个调用将被捆绑在一起,并且 mnesia 只会等到这 3 个调用在本地节点上完成才返回。
然而,这两者的行为在 mnesia 多节点集群中可能有所不同。做一些测试:)
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |