【问题标题】:How to read all the records of mnesia database in erlang?如何在erlang中读取mnesia数据库的所有记录?
【发布时间】:2016-06-21 08:13:57
【问题描述】:

我是 erlang 的新手,我需要对从 mnesia 数据库获得的所有记录进行一些操作。

Result = mnesia:dirty_read(mydatabase, {key1, key2}),
        case Result of 
            [] ->
                ?DEBUG("No such record found", []);
            [#mydatabase{key3 = Key3}] ->
                %% some operations
        end

如何在我的代码中添加一个循环来对所有记录执行一些操作?

我什至不确定上面的代码是否有效?

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    您可以为此使用mnesia:foldl/3。它遍历表中的所有记录,传递一个“累加器”值。

    它没有明确的“脏”对应物,因此如果您想将其作为脏操作运行,您需要使用mnesia:activity/2。 (或者您可以在对 mnesia:transaction 的调用中使用它。)

    在这个例子中,我实际上并没有对“累加器”做任何事情,始终保持为ignored_acc

    mnesia:activity(sync_dirty,
      fun() ->
          mnesia:foldl(
              fun(#mydatabase{}, Acc) ->
                  %% do something with the record here
                  Acc
              end,
              ignored_acc,
              my_table)
      end)
    

    【讨论】:

      【解决方案2】:

      我觉得你可以试试 all_keys(Tab)

      all_keys(Tab) -> KeyList |交易中止

      此函数返回名为 Tab 的表中所有键的列表。这 此函数的语义是上下文相关的。见 mnesia:activity/4 了解更多信息。在事务上下文中,它获取一个读锁 整张桌子上。

      【讨论】:

        猜你喜欢
        • 2018-09-18
        • 2012-01-10
        • 2015-05-24
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 2011-03-10
        • 2011-05-03
        相关资源
        最近更新 更多