使用ets函数读取mnesia table (erlang)
Using ets function to read mnesia table (erlang)
使用 mnesia 进行 erlang 项目(一些 tables ram 副本,一些 tables 磁盘副本,一些 tables 两者)。为了优化某个读取(ram table),我使用了 ets 查找而不是我一直在使用的 mnesia dirty_read,并对例程的两个版本计时。 ets 查找明显快于 mnesia dirty_read.
我的问题是是否有一些 'gotcha' 或 'catch' 使用 ets 与 mnesia 阅读 mnesia table (必须有,否则没有理由让 mnesia 变慢阅读存在)。如果它有任何区别,我不需要也不会使用任何 "distrubuted" 或 "nodes." 换句话说,我现在并且只会在一台计算机上使用单个节点。
mnesia:dirty_read 执行 rpc 调用,即使 table 是本地的。它还检查当前 activity 上下文并维护它,即使是脏查找。这将导致查找所需的额外时间。
在您的情况下(只有一个节点具有本地 mnesia),直接 ets 查找应该可行,但不推荐,因为它将依赖于实现。更好的方法是使用 mnesia:ets(Fun,[, Args]).
使用 mnesia 进行 erlang 项目(一些 tables ram 副本,一些 tables 磁盘副本,一些 tables 两者)。为了优化某个读取(ram table),我使用了 ets 查找而不是我一直在使用的 mnesia dirty_read,并对例程的两个版本计时。 ets 查找明显快于 mnesia dirty_read.
我的问题是是否有一些 'gotcha' 或 'catch' 使用 ets 与 mnesia 阅读 mnesia table (必须有,否则没有理由让 mnesia 变慢阅读存在)。如果它有任何区别,我不需要也不会使用任何 "distrubuted" 或 "nodes." 换句话说,我现在并且只会在一台计算机上使用单个节点。
mnesia:dirty_read 执行 rpc 调用,即使 table 是本地的。它还检查当前 activity 上下文并维护它,即使是脏查找。这将导致查找所需的额外时间。
在您的情况下(只有一个节点具有本地 mnesia),直接 ets 查找应该可行,但不推荐,因为它将依赖于实现。更好的方法是使用 mnesia:ets(Fun,[, Args]).