使用ets函数读取mnesia表(erlang)

时间:2015-04-29 18:49:57

标签: erlang mnesia ets

使用mnesia处理erlang项目(一些表ram副本,一些表磁盘副本,一些表都是)。为了优化某个读取(ram表),我使用了ets查找而不是我一直使用的mnesia dirty_read,并定时了两个版本的例程。 ets查找明显快于mnesia dirty_read。

我的问题是,是否有一些“问题”。或者'赶上'使用ets vs mnesia读取mnesia表(必须有,否则没有理由存在较慢的mnesia读取)。如果它有任何区别,我不需要,也不会使用任何" distrubuted"或者"节点。"换句话说,我只会在一台计算机上使用单个节点。

1 个答案:

答案 0 :(得分:3)

mnesia:即使表是本地的,dirty_read也会执行rpc调用。此外,它还会检查当前活动上下文,并对脏查找进行维护。这将导致查找所需的额外时间。

在您的情况下(只有一个节点具有本地mnesia),直接ets查找应该有效但不推荐,因为它将取决于实现。最好的方法是使用mnesia:ets(Fun,[, Args])