Erlang 中的大型可变字节数组

2024-02-29

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

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


由于二进制文件是只读的,我可以想到以下方法(假设您预计变化率很高):

  1. 使用叶子中具有相对较小的不可变二进制文件的树状结构。在这种情况下,当您修改数据时,您只需要重新创建小叶子二进制文件+直到根的所有节点。假设更改对于某个位置是“本地”的,我认为,您可以从八叉树开始。
  2. 使用“大”二进制文件+更改列表(可以是简单的函数列表)。当您需要修改世界时,只需将新功能添加到列表中即可。当有人请求世界状态时,获取基本二进制文件并应用列表中的所有更改。时不时地“压缩”所有更改并准备新的基线状态二进制文件。这可以与以前的方法(叶子中具有成对的二进制/变化的树)相结合。
  3. 将可变世界管理移至外部代码。您可以使用NIFs http://www.erlang.org/doc/tutorial/nif.html or Ports http://www.erlang.org/doc/reference_manual/ports.html。我想,这将是最快的方法。另外,我认为实施起来相对容易。 API 的第一个版本可能很简单world:new(X, Y, Z) -> ref(); world:get(Ref, X, Y, Z); world:set(Ref, X, Y, Z, Value);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Erlang 中的大型可变字节数组 的相关文章

  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 合并 JavaScript 数组中的重复项

    我有一个愚蠢的问题 乍一看似乎很容易解决 但结果却很棘手 我有一个对象数组 每个对象都有两个属性 id 和 value id 2 value 10 id 4 value 3 id 2 value 2 id 1 value 15 我想编写一个
  • TypeScript 枚举到对象数组

    我有一个这样定义的枚举 export enum GoalProgressMeasurements Percentage 1 Numeric Target 2 Completed Tasks 3 Average Milestone Progr
  • 在 C 中通过引用传递数组

    我是 C 新手 我有一个疑问 由于 C 函数创建其参数的本地副本 我想知道为什么以下代码按预期工作 void function int array array 0 4 array 1 5 array 2 6 int main int arr
  • Turbo C 阵列问题

    我只是想问一些关于我的代码的事情 define LIM 40 main int day 0 float temp LIM clrscr do printf Enter temperature for day d day scanf f te
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • 如何将 UDF 中的结构或类数组返回到数据帧列值中?

    d ID 1 pID 1000 startTime 2018 07 02T03 34 20 endTime 2018 07 03T02 40 20 ID 1 pID 1000 startTime 2018 07 02T03 45 20 en
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 如何在Django中显示内存中的图片?

    我知道如何将图片显示为内存中的页面 如下所示 import cStringIO mStream cStringIO StringIO picBin return HttpResponse mStream getvalue image jpg
  • 是否有 java.lang.String 的内存高效替代品?

    看完之后这篇旧文章 http www javaworld com javaworld javatips jw javatip130 html page 2测量几种对象类型的内存消耗 我惊讶地发现有多少内存String在Java中的使用 le
  • 在用户窗体终止/关闭 VBA 时调用数组

    我有一个问题 我想在用户窗体关闭时将用户窗体的内容存储在数组中 我认为我的语法正确 但似乎不会在用户窗体初始化时重新填充 我尝试将数组放入其自己的模块中 但这也不起作用 有人愿意启发我吗 示例代码 Public Sub DPArrayStu
  • 在 MongoDB 中查找具有字符串 ID 数组的文档

    我有一个 id 字符串数组 我想将其与 find 函数一起使用 db companies find id in arr arr看起来像这样 563a2c60b511b7ff2c61e938 563a2c60b511b7ff2c61e8b7
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • 如何将哈希表添加到多维数组?无法通过成员访问枚举分配值

    我在将哈希表添加到多维数组时遇到问题 我编码如下 Data BIBs BIB BIBName BIBName Standort Standort B cher BuchName BuchName Autor Autor 此代码正在运行并创建
  • 如何使用 JSON 以外的方法将数组转换为字符串?

    除了使用 JSON 之外 PHP 中还有什么函数可以将数组转换为字符串 我知道有一个函数可以像 JSON 一样直接执行 我只是不记得了 serialize http php net manual function serialize php
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • SSRS 报告服务 - 字符串中的粗体字

    出版物 如何在字符串中加粗作者姓名 如果返回 1 个值 但它是一个字符串 情况会是这样的 iif Fields Author Value Parameters 5aAuthor Value Bold Normal 示例 作者 年份 标题 期
  • 多维数组将每个列表数组存储在另一个数组中

    我嵌套了可能有 2 或 3 层深度的多维数组 在它里面我可能有也可能没有列表数组 我需要循环数组 Array 0 gt Array id gt 1 name gt cat name 1 list gt Array 1 gt swgdgbdg

随机推荐

  • JSON.parse 从 JSON 返回 [object]

    我正在使用一个名为的 npm 包request发出 http 请求 现在我想解析收到的数据 以提取经纬度并将其写入我的数据库 但到目前为止 我得到的控制台输出是 address components Object Object Object
  • C# using 和 Java import 之间的区别

    我知道在java中我们使用 星号 来导入包中的所有内容 例如 import java lang 那为什么我们不在C 中使用相同的 星号 来导入所有内容 有没有像java中那样的方法来导入所有内容 有什么区别 import java awt
  • 是否可以使用相同的 requestCode 和不同的 extras 创建多个 PendingIntents ?

    我在用着AlarmManager安排 1 到 35 个警报 取决于用户输入 当用户请求安排新警报时 我需要取消当前警报 因此我使用相同的 requestCode 创建所有警报 该请求代码在final多变的 clear remaining a
  • 如何在 UWP 应用中播放 JS 的声音?

    我正在开发一个 UWP 其中包含一个 Web 应用程序 该应用程序具有一些调用一些 C 函数的 JS 函数 现在 我正在尝试播放我存储在 UWP 应用程序的 Assets 文件夹中的声音 这是我想要发挥的功能Windows 运行时组件 pu
  • html5本地数据库位于客户端计算机上的哪里?

    我正在不同的浏览器 Firefox Opera Safari 和 Chrome 上使用 html5 本地存储 我只是想知道我使用 创建的本地数据库的位置在哪里 开放数据库 我可以更改该数据库的位置吗 Gath 它将存储在用户的配置文件目录中
  • jQuery 的 ajax 成功函数的额外参数

    我正在使用以下代码获取 XML 文件 function getMaps toLoad loadMaps length for var i 0 i lt loadMaps length i ajax type GET url loadMaps
  • 为什么“findById()”在同一实体上调用 getOne() 后返回代理?

    在我的网络应用程序中 在服务布局中 我使用 餐厅 实体的代理 餐厅 字段中的 FetchType Lazy User user userRepository get userId Getting proxy here not restaur
  • 如何在 docker 容器中对 elasticsearch.yml 进行简单编辑?

    我在用docker compose as in https github com davidefiocco dockerized elasticsearch indexer blob master docker compose yml ht
  • 为什么 html5 postMessage 对我不起作用?

    我使用几行 javascript 来创建一个 iframe 元素 然后我想向它发送一条消息 如下所示 function loadiframe callback var body document getElementsByTagName b
  • 如何修改和使用R包的函数?

    我的问题是关于如何在 R 中调整 控制树状图中的比例 使用 portfolio 库 https stackoverflow com questions 7561423 how do you adjust control the scale
  • 溢出:滚动;在 中

    为什么 CSS 属性overflow scroll 不工作于 td while overflow hidden 效果很好 table border 1 style width 100px tr td style width 50px 100
  • CF9 中的 QueryNew() 数据类型

    我接管了运行 CF9 0 1 的生产服务器上的系统 但在开发人员版本中找不到该系统的副本 因此我正在运行 CF10 我正在将数据从数据库导出到 Excel 由于数据来自多个数据源 因此需要手动将结果输入到查询中 然后用于输出到 Excel
  • 如何比较/匹配两个不相同的声音片段

    我需要每 5 秒采集一次短声音样本 然后将其上传到我们的云服务器 然后 我需要找到一种方法来比较 检查该样本是否是完整长音频文件的一部分 样本将通过手机麦克风录制 因此它们确实不准确 我知道这个主题可能会变得非常技术性和复杂 但我确信一定有
  • Firestore 写入限制错误代码

    Firestore 目前处于测试阶段 并且有每秒写入次数限制 写入 Firestore 数据库时是否可以检查特定的 Firestore 写入错误代码 我的用例是我需要具有查询可能性的高吞吐量 通过检查写入错误代码 我可以稍后重试写入 根据官
  • 用于具有多种类型的嵌套对象的 RedisTemplate 哈希值序列化器

    我正在尝试使用 Redis 为我的实体存储一些缓存数据 其中包含不同类型的字段 例如 public class Job private String id private Date createTime Long private Strin
  • 使用 SDWebimage 通过 url 一张一张下载图像

    我需要从以下位置下载图像Array网址一一显示并一次显示全部 前任 我有 10 个 URL 的数组 我只需要一张一张地下载图像 并一次显示 我在用SDWebImage用于下载图像 请帮我 Thanks 你可以尝试这样的事情 void dow
  • 如何更新学说中的字段以将其设置为空

    我想将原则中的一个字段设置为 null 这是句子 em this gt getDoctrine gt getManager qb em gt createQueryBuilder query qb gt update Model Examp
  • 最小化 Three.js 抽奖次数

    我正在为我的项目测试 Three js 的使用 http agentscript org http agentscript org 并且第一个测试似乎很慢 https asx vqnhxlahpe now sh test html Thre
  • 通过 3 个下拉过滤器过滤客户记录的更好或优化方法

    我有一个页面名称为 客户列表 aspx我在上面显示客户列表 这也是我的表和类文件 public partial class Customer public int CustomerID get set public string FullN
  • Erlang 中的大型可变字节数组

    当我在 Erlang 中编写一个简单的 Minecraft 服务器应用程序时 我现在关心的问题是如何有效地存储和修改块数据 对于那些不了解 Minecraft 内部结构的人 我需要在内存中存储大量高达 32kB 大小的二进制文件 100 1