在Erlang中存储和管理高性能可变对象的最佳方法是什么?假设我想用真实的游戏玩法编写非常简单的在线游戏服务器。不知何故,我需要在Erlang内存中表示玩家的状态。例如,它可能只是一个简单的元组,如
{name, "Bob", health, 100, ammo, 50, score, 0}
这些对象应该存放很长时间(至少在用户会话还活着时),应该是可变的(因为玩家可以互相交互,比如互相射击,杀死,治疗等),应该是高性能(因为游戏是实时的,但不是一步一步的)。因此,我不想将这些数据保存在SQL或Mnesia中。什么样的数据结构是最好的方法?
答案 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。