gpt4 book ai didi

erlang - Erlang 中的快速可变对象

转载 作者:行者123 更新时间:2023-12-05 00:21:57 28 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

  • set -- 无序、无重复、恒定时间访问
  • ordered_set -- 有序,无重复,O(log N) 时间访问
  • bag -- 无顺序,重复键(但不是值),O(log N) 时间访问
  • duplicate_bag -- 无顺序,重复的键和值,O(log N) 时间访问

  • 如果您需要持久的长期存储,请尝试 DETS-Module .

    关于erlang - Erlang 中的快速可变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30682167/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com