Erlang 带有dict与mnesia表与ets的gen_服务器

Erlang 带有dict与mnesia表与ets的gen_服务器,erlang,dictionary,gen-server,ets,Erlang,Dictionary,Gen Server,Ets,我正在构建一个erlang服务器。 用户向服务器发送http请求以更新其状态。 服务器上的http请求进程将用户状态消息保存在内存中。 服务器每分钟向远程服务器发送所有消息并清除内存。 如果用户在一分钟内多次更新其状态,则最后一条消息将覆盖前一条消息。 重要的是,在读取所有消息和清除这些消息之间,没有其他进程能够完成 能够编写状态消息 实施它的最佳方式是什么 带有dict的gen_服务器。密钥将是用户ID。dict:store/3将更新或创建状态。gen_服务器解决了“事务”问题 带有ram_副

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

实施它的最佳方式是什么

  • 带有dict的gen_服务器。密钥将是用户ID。dict:store/3将更新或创建状态。gen_服务器解决了“事务”问题

  • 带有ram_副本的记忆表。处理事务,我不需要实现gen_服务器。此解决方案的开销是否太大

  • ETS表重量更轻,并配有gen_服务器。是否可以在ETS中进行交易?在读取所有消息和清除消息之间锁定表


  • 谢谢

    因为您是手动同步的,所以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/...
    

    这已经在erlang问题邮件列表中进行了讨论。下面是讨论的链接,对于像我这样首先发现stackoverflow的人: