Erlang ets插入多个表中

use*_*708 2 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). 
Run Code Online (Sandbox Code Playgroud)

我怎样才能保证两者的操作成功或失败?

例如,插入操作,如果在ets上有错误:insert(table_cp,V),我应该从talbe_test中删除该值吗?

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

请帮忙.

Gre*_*reg 6

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

如果您需要事务,请考虑mnesia哪些事务是在ETS之上构建的,并提供对事务的支持,甚至跨分布式Erlang节点.

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