【问题标题】:Using ets function to read mnesia table (erlang)使用 ets 函数读取 mnesia 表(erlang)
【发布时间】:2015-07-09 05:35:08
【问题描述】:

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

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

【问题讨论】:

    标签: erlang mnesia ets


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 2016-06-03
      • 2012-10-14
      • 2010-12-30
      • 2011-01-10
      • 2016-09-10
      • 2021-01-19
      • 2020-08-11
      • 2015-01-17
      相关资源
      最近更新 更多