【问题标题】:Mesia activity/4 is reading only from the first fragmentMesia activity/4 仅从第一个片段中读取
【发布时间】:2016-11-23 09:14:52
【问题描述】:

我有一个在四个节点上运行的 mnesia 集群。表名student 存在7 个片段。根据mnesia doc,读取时,mnesia判断记录属于哪个片段,从key的hash值;读取将通过 mnesia:activity/4 函数完成。为了测试分区,我插入了 512 条记录,键为 1-512。我在 mnesia:activity/4 上下文中查看来自 mnesia:table_info/2 的碎片表的 size 属性;这证实了片段有 512 条记录。 问题是,当我读取表中存在的键范围为(1-512)的记录时,如果该键在第一个片段中存在的键范围内,我只会检索一条记录。换句话说,mnesia 只从第一个片段中读取。不知道我做错了什么。拜托我需要你的帮忙。谢谢

【问题讨论】:

    标签: mnesia


    【解决方案1】:

    我发现了问题。我使用 mnesia dirty 读取操作作为 mnesia:activity/4 函数的功能对象参数。我观察到这个函数不应该是一个 dirty 操作,因为上下文可以由 AccessContext 参数确定。例如。

    这仅从第一个片段中读取:

    KeysFun = fun () -> mnesia:dirty_all_keys(Tab) end,
    mnesia:activity(sync_dirty, KeysFun,[],mod_frag).
    

    这从所有片段中读取:

    KeysFun = fun () -> mnesia:all_keys(Tab) end,
    mnesia:activity(sync_dirty, KeysFun,[],mod_frag).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      相关资源
      最近更新 更多