2

我是二郎新手。我有一个关于 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). 

我如何保证手术成功或失败?

比如insert操作,如果ets:insert(table_cp,V)有问题,要不要把talbe_test的值删掉?

与删除相同,如果 ets:delete(table_cp,V) 失败,我应该重新插入该值吗?

请帮忙。

4

1 回答 1

6

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

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

这一切都取决于您需要多少依赖插入两者或两者都不插入的值。如果您的应用程序可以在仅将值插入其中一个表的情况下存活(正常工作),或者如果它能够在插入不正确的情况下更正该值,那么您所描述的以编程方式处理故障可能会正常工作。否则 ETS 将不是正确的数据结构。

于 2016-05-14T14:05:00.027 回答