Erlang中的快速可变对象

时间:2015-06-06 11:18:56

标签: erlang

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

{name, "Bob", health, 100, ammo, 50, score, 0}

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

1 个答案:

答案 0 :(得分:6)

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

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

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

如果您需要持续长期存储,请尝试DETS-Module