Erlang 记忆缺失错误

Erlang 记忆缺失错误,erlang,ejabberd,mnesia,Erlang,Ejabberd,Mnesia,我使用的是mnesia表。这个表有两个属性(主键和它的值)。 现在我正在尝试从mnesia表中删除一个元组。我正在使用mnesia的delete/1函数进行删除。该函数使用必须删除的元组对应的表名和键。我的问题是,当传递的键对应的元组不存在时,如何处理该场景。该删除函数给出{atomic,ok}每次?对于您的案例,您必须先阅读记录,然后再删除它。要防止“读取”和“删除”操作之间的其他事务访问记录,请在读取记录时使用“写入”锁定类型。它为您的交易提供独家访问权: delete_record(Tab

我使用的是mnesia表。这个表有两个属性(主键和它的值)。
现在我正在尝试从mnesia表中删除一个元组。我正在使用mnesia的delete/1函数进行删除。该函数使用必须删除的元组对应的表名和键。我的问题是,当传递的键对应的元组不存在时,如何处理该场景。该删除函数给出{atomic,ok}每次?

对于您的案例,您必须先阅读记录,然后再删除它。要防止“读取”和“删除”操作之间的其他事务访问记录,请在读取记录时使用“写入”锁定类型。它为您的交易提供独家访问权:

delete_record(Table, Key) ->
    F = fun () ->
            case mnesia:read(Table, Key, write) of
                [Record] ->
                    mnesia:delete({Table, Key}),
                    {ok, Record};
                [] ->
                    mnesia:abort(not_exist)
            end
        end,
    mnesia:transaction(F).

没有其他选择吗?意味着是否存在某种可以捕获此问题的删除功能?据我所知,没有。