gpt4 book ai didi

arrays - Erlang中的大型可变字节数组

转载 作者:IT王子 更新时间:2023-10-28 23:34:07 25 4
gpt4 key购买 nike

当我在 Erlang 中编写一个简单的 Minecraft 服务器应用程序时,我现在关心如何有效地存储和修改 block 数据的问题。对于那些不了解 Minecraft 内部结构的人:我需要在内存中存储大量大小高达 32kB 的二进制文件(100-1000)。到目前为止,Erlang 的内置二进制文件就足够了。但是服务器必须经常读取和更改这些二进制文件中的一些字节(通过它们的 id),我不想一直复制它们。
一个不错的功能是从/向 Erlang 的标准二进制文件导入和导出。

是否有任何 Erlang 扩展或数据库或我可以使用的任何东西?

最佳答案

由于二进制文件是只读的,我可以考虑以下方法(假设您预计更改率很高):

  1. 在叶子中使用具有相对较小的不可变二进制文件的树状结构。在这种情况下,当您修改数据时,您只需要重新创建小叶子二进制文件 + 直到根节点的所有节点。假设更改对于某个位置是“本地的”,我认为,您可以从 octo-tree 开始。
  2. 使用“大”二进制文件 + 更改列表(可以是简单的函数列表)。当您需要修改世界时,只需将新功能添加到列表中即可。当有人询问世界状态时,获取基本二进制文件并应用列表中的所有更改。不时地“压缩”所有更改并准备新的基线状态二进制文件。这可以与以前的方法(在叶子中具有成对的二进制/变化的树)结合使用。
  3. 将可变世界管理移至外部代码。您可以使用NIFsPorts .我认为,这将是最快的方式。另外,我认为实现它会相对容易。 API 的第一个版本可以像 world:new(X, Y, Z) -> ref(); 这样简单。世界:得到(引用,X,Y,Z); world:set(Ref, X, Y, Z, Value);

关于arrays - Erlang中的大型可变字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071783/

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