Erlang 中的快速可变对象
Fast mutable objects in Erlang
在 Erlang 中存储和管理高性能可变对象的最佳方法是什么?假设我想编写具有实时游戏玩法的非常简单的在线游戏服务器。我需要以某种方式在 Erlang 内存中表示玩家的状态。例如,它可能只是一个简单的元组,如
{name, "Bob", health, 100, ammo, 50, score, 0}
这些对象应该保存很长时间(至少在用户会话存在时),应该是可变的(因为玩家可以相互交互,比如互相射击、杀死、治疗等),并且应该是高性能的(因为游戏是实时的,但不是一步一步的)。所以我不想将这些数据保存在 SQL 或 Mnesia 中。什么样的数据结构是最好的方法?
你应该看看 ETS-module (Erlang Term Storage). It is an in-memory key-value-store and, as the name suggests, it can store erlang-terms in hashmap/tree-structures. I recommend reading this article,它有很好的例子,是为初学者写的。
使用 ETS,您可以有 4 种存储类型:
set
-- 无顺序,无重复,常量访问
ordered_set
-- 有序,无重复,O(log N)次访问
bag
-- 无顺序,重复键(但不是值),O(log N) 次访问
duplicate_bag
-- 无序,键值重复,O(log N)次访问
如果您需要持久的长期存储,请尝试DETS-Module。
在 Erlang 中存储和管理高性能可变对象的最佳方法是什么?假设我想编写具有实时游戏玩法的非常简单的在线游戏服务器。我需要以某种方式在 Erlang 内存中表示玩家的状态。例如,它可能只是一个简单的元组,如
{name, "Bob", health, 100, ammo, 50, score, 0}
这些对象应该保存很长时间(至少在用户会话存在时),应该是可变的(因为玩家可以相互交互,比如互相射击、杀死、治疗等),并且应该是高性能的(因为游戏是实时的,但不是一步一步的)。所以我不想将这些数据保存在 SQL 或 Mnesia 中。什么样的数据结构是最好的方法?
你应该看看 ETS-module (Erlang Term Storage). It is an in-memory key-value-store and, as the name suggests, it can store erlang-terms in hashmap/tree-structures. I recommend reading this article,它有很好的例子,是为初学者写的。
使用 ETS,您可以有 4 种存储类型:
set
-- 无顺序,无重复,常量访问ordered_set
-- 有序,无重复,O(log N)次访问bag
-- 无顺序,重复键(但不是值),O(log N) 次访问duplicate_bag
-- 无序,键值重复,O(log N)次访问
如果您需要持久的长期存储,请尝试DETS-Module。