我是Erlang的新手。我对ets表有疑问。
我有两个ets表,我需要插入或删除两者的值。
insert(V) ->
ets:insert(table_test,V),
ets:insert(table_cp,V).
delete(V)->
ets:delete(table_test,V),
ets:delete(table_cp,V).
我怎样才能保证两者的操作成功或失败?
例如,插入操作,如果在ets上有错误:insert(table_cp,V),我应该从talbe_test中删除该值吗?
删除相同,如果ets:delete(table_cp,V)失败,我应该重新插入值吗?
请帮忙。
答案 0 :(得分:5)
您要求的是交易。 ETS不支持交易。即使第一次插入不成功,也不在另一个表中插入值,如果第一次插入成功,则无法保证插入第二个值,因为在这两个写入之间可能发生某些情况,例如:这个过程可能会死亡。
如果您需要交易,请考虑建立在ETS之上的mnesia
,并为交易提供支持,甚至跨分布式Erlang节点。
这一切都取决于您需要依赖于两者或两者都没有插入的值。如果您的应用程序可以存活(正常工作),并且只将值插入其中一个表中,或者如果它能够在错误插入的情况下更正该值,那么按照您的描述编程处理失败可能会正常工作。否则ETS将不是正确的数据结构。