gen_server与dict vs mnesia table vs ets

时间:2010-01-28 12:14:21

标签: erlang dictionary gen-server ets

我正在构建一个erlang服务器。 用户向服务器发送http请求以更新其状态。 服务器上的http请求进程将用户状态消息保存在内存中。 服务器每隔一分钟将所有消息发送到远程服务器并清除内存。 如果用户在一分钟内多次更新其状态,则最后一条消息将覆盖前一条消息。 重要的是,在阅读所有消息并清除它们之间没有其他过程 能够写出状态信息。

实施它的最佳方法是什么?

  1. 带有字典的gen_server。密钥将是用户ID。 dict:store / 3将更新或创建状态。 gen_server解决了“交易”问题。

  2. 使用ram_copies的mnesia表。处理事务,我不需要实现gen_server。这个解决方案有太多的开销吗?

  3. ETS表,它更轻,并具有gen_server。是否可以在ETS中进行交易?要在读取所有消息并清除它们之间锁定表格吗?

  4. 由于

1 个答案:

答案 0 :(得分:19)

由于您手动执行同步,因此mnesia非常重要。你显然不需要网络的东西,这就是ets和mnesia之间的主要区别。

就我而言,Ets只是一个围绕dict / bag / ...的otp兼容流程,并且由于你有多个进程访问你的数据,你应该使用ets。

我为自己想出了以下逻辑:

Multiple processes on multiple VMs -> mnesia
Multiple processes on one VM -> ets/dets
One process -> bag/dict/...