2

使用 mnesia 处理 erlang 项目(一些表 ram 副本,一些表磁盘副本,一些表两者)。为了优化某个读取(ram 表),我使用了 ets 查找而不是我一直使用的 mnesiadirty_read,并对例程的两个版本进行了计时。ets 查找比 mnesiadirty_read 快得多。

我的问题是使用 ets vs mnesia 读取 mnesia 表是否有一些“陷阱”或“捕捉”(必须有,否则没有理由让较慢的 mnesia 读取存在)。如果它有任何区别,我不需要也没有使用任何“分布式”或“节点”。换句话说,我现在并且只会在一台计算机上使用一个节点。

4

1 回答 1

3

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

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

于 2015-04-29T21:34:20.347 回答