5

在传递给 mnesia:async_dirty() 的函数中执行的一系列 mnesia:dirty_ 命令与“原始”执行的相同事务有什么区别?

即,这样做有什么区别:

mnesia:dirty_write({table, Rec1}),
mnesia:dirty_write({table, Rec1}),
mnesia:dirty_write({table, Rec1})

F = fun() ->
        mnesia:dirty_write({table, Rec1}),
        mnesia:dirty_write({table, Rec1}),
        mnesia:dirty_write({table, Rec1})
   end,

   mnesia:async_dirty(F)

谢谢

4

1 回答 1

-1

async_dirty让我们首先在上下文中引用用户指南:

通过将相同的“乐趣”作为参数传递给函数
mnesia:async_dirty(Fun [, Args]),它将在脏上下文中执行。函数调用
映射到相应的脏函数。这仍将涉及日志记录、复制和订阅,但不会涉及锁定、本地事务存储或提交协议。检查点保留器将被更新,但将被更新为“脏”。因此,它们将被异步更新。这些函数将等待在一个节点上执行操作,而不是在其他节点上执行。如果表驻留在本地,则不会发生等待。




您提供的两个选项将以相同的方式执行。但是,当您执行fun选项一中的脏函数时,每个函数都是对 mnesia 的单独调用。使用async_dirty时,3 个调用将被捆绑,mnesia 只会等到本地节点上的 3 个调用完成后才返回。
但是,这两者的行为在 mnesia 多节点集群中可能有所不同。做一些测试:)

于 2012-11-10T09:20:49.693 回答