Erlang Mnesia - mnesia:交易(F)与mnesia:活动(交易,F)

Llo*_*ice 3 erlang transactions mnesia

我已经阅读并重新阅读了文档:mnesia:activity/3,mnesia:activity/4,以及mnesia/transaction/2,但它们对我来说仍然像一本不起眼的外语.

在我有限的实验中,它们似乎返回相同的结果.

某种灵魂可以帮助我理解何时以及为什么我会使用一种与另一种相比?

非常感谢,

LRP

leg*_*cia 5

有两点不同.

首先,mnesia:activity让您指定访问模块.我所知道的唯一用途就是使用碎片表.也就是说,如果您有一个包含许多记录的表,您可能希望在群集中的节点之间拆分数据.该mnesia_frag访问模块可以让你做到这一点,仍然透明地访问数据-只要你使用mnesia:activity,并指定mnesia_frag为接入模块.有关详细信息,请参阅Mnesia文档中有关表碎片的部分.

第二,成功和错误的mnesia:transaction回报.另一方面,只需返回成功,如果出现问题则发出错误信号.你喜欢哪种风格主要是品味 - 但请注意,如果不检查每个返回值,可能会"无声地"失败.{atomic, Result}{aborted, Reason}mnesia:activityResultmnesia:transaction

除了功能上的差异之外,mnesia:activity您还可以根据需要轻松更改代码中的访问上下文.如果您开始使用事务但后来想要更改为脏操作(反之亦然),您可以简单地更改您的mnesia:activity调用的第一个参数,而如果您一直在使用mnesia:transaction和直接调用mnesia:dirty_*,则从一个更改为另一个是有点更多地参与.(你可以通过使用mnesia:sync_dirty和/或来减轻后者mnesia:async_dirty.