Erlang ets插入多个表中

时间:2016-05-14 13:28:06

标签: erlang ets

我是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)失败,我应该重新插入值吗?

请帮忙。

1 个答案:

答案 0 :(得分:5)

您要求的是交易。 ETS不支持交易。即使第一次插入不成功,也不在另一个表中插入值,如果第一次插入成功,则无法保证插入第二个值,因为在这两个写入之间可能发生某些情况,例如:这个过程可能会死亡。

如果您需要交易,请考虑建立在ETS之上的mnesia,并为交易提供支持,甚至跨分布式Erlang节点。

这一切都取决于您需要依赖于两者或两者都没有插入的值。如果您的应用程序可以存活(正常工作),并且只将值插入其中一个表中,或者如果它能够在错误插入的情况下更正该值,那么按照您的描述编程处理失败可能会正常工作。否则ETS将不是正确的数据结构。