我有一个在四个节点上运行的mnesia集群。表名学生存在,包含7个片段。根据mnesia doc,在阅读时,mnesia根据密钥的哈希值确定记录所属的片段;读取将通过mnesia:activity / 4函数完成。为了测试分区,我用1-512的键插入了512条记录。我在mnesia:activity / 4 context中查看mnesia:table_info / 2中碎片表的 size 属性;这证实了片段有512条记录。 问题是,当我读取表中存在的密钥(1-512)的记录时,如果该密钥位于第一个片段中存在的密钥范围内,我只检索了一条记录。换句话说,mnesia只从第一个片段中读取。不知道我做错了什么。拜托我需要你的帮忙。感谢
答案 0 :(得分:0)
我发现了问题。我使用mnesia 脏读取操作作为 mnesia:activity / 4 函数的功能对象参数。我观察到这个函数不应该是脏操作,因为上下文可以通过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).