【发布时间】:2018-01-19 10:02:21
【问题描述】:
我有一个 ram_copies mnesia 设置,我可以插入记录,我可以使用位于此处的以下代码打印它们:How to read all the records of mnesia database in erlang?
开始记录:
-record(someRecord, {a=null, b=null}).
表:
mnesia:create_table(someRecord,
[{attributes, record_info(fields, someRecord)},
{index, [#someRecord.b]},
{ram_copies, Nodes},
{type, set}]),
插入:
i(rA, rB) ->
F = fun() -> mnesia:write(#someRecord{a=rA, b=rB}) end,
mnesia:transaction(F).
阅读:
r(rB) ->
F = fun() -> mnesia:read({someRecord, rB}) end,
mnesia:transaction(F).
这会返回 {atomic, Result} 并且 Result 是空的。
想知道我做错了什么。
谢谢!
更新:事实证明,如果我使用记录“a”作为键,它会起作用。但为什么?我已将它设置为记录“b”作为键。
【问题讨论】:
-
这行得通吗:
mnesia:index_read(someRecord, B, #someRecord.b)? -
@Dogbert 这行得通。但是,为什么 create_table 有一个未使用的键值然后是“ {index, [#someRecord.b]}”(除非我用错了)。如果我用“a”替换 rB,read/2 将对我有用。似乎关键是第一个元素,这是硬编码的吗?另外,使用 index_read 与 read 有什么影响?
-
我已经发布了你所有问题的答案,除了最后一个。我不确定影响。我相信它应该和搜索第一个字段一样快,但是由于需要维护额外的索引
mnesia,其他操作会产生开销。
标签: erlang erlang-otp mnesia