Erlang中的快速可变对象

nya*_*cat 4 erlang

在Erlang中存储和管理高性能可变对象的最佳方法是什么?假设我想用真实的游戏玩法编写非常简单的在线游戏服务器.不知何故,我需要在Erlang内存中表示玩家的状态.例如,它可能只是一个简单的元组

{name, "Bob", health, 100, ammo, 50, score, 0}
Run Code Online (Sandbox Code Playgroud)

这些对象应该存储很长时间(至少在用户会话还活着的时候),应该是可变的(因为玩家可以相互交互,比如互相射击,杀死,治疗等),并且应该是高性能的(因为游戏是实时的,但不是一步一步的).所以我不想将这些数据保存在SQL或Mnesia中.什么样的数据结构是最好的方法?

Mat*_*nde 6

您应该看看ETS模块(Erlang术语存储).它是一个内存中的键值存储,顾名思义,它可以在hashmap/tree-structures中存储erlang-terms.我建议阅读这篇文章,它有很好的例子,是为初学者编写的.

使用ETS,您可以拥有4种类型的存储:

  • set - 没有订单,没有重复,不间断访问
  • ordered_set - 有序,无重复,O(log N) - 时间访问
  • bag - 没有订单,重复密钥(但不是值),O(log N) - 时间访问
  • duplicate_bag - 没有订单,重复的密钥和值,O(log N) - 时间访问

如果您需要持久的长期存储,请尝试使用DETS模块.