gpt4 book ai didi

java - 顶点 : pass initial data to verticle on it deployment

转载 作者:行者123 更新时间:2023-12-01 09:18:21 24 4
gpt4 key购买 nike

我如何传递 int[][] 的副本数组到垂直部署?

我有一个ServerVerticle从中部署 5-10 ServiceVerticle s。

每个 ServiceVerticle必须使用相同的共享数据结构 - Map<Integer, Short[]>可以是 100-2000 Mb。

问题 - 我无法创建 Local以数组作为值的映射。

我看到的唯一内存解决方案 - 传递 int[][] 的副本给每个ServiceVerticle在其上部署并保留5-10份数据。

附注这种数据结构必须具有尽可能快的查找速度,因此我不喜欢像 Hazelcast IMap 这样的集群范围解决方案。 .

最佳答案

虽然在 LocalMap 中使用的类型没有太多自由度,但您可以使用 Buffer。缓冲区是一个优化的字节数组,您可以快速使其适应您的用例。使用Buffer还意味着您将拥有紧凑的内存表示形式,这样您就可以节省内存并且任何操作都会变得更快。

您只需编写从 2D 平面到 1D 线的转换。例如,假设您有以下数组 (2 x 3):

int[][] data = new int[] {
new int[] {1, 2, 3},
new int[] {4, 5, 6},
};

如果将其转换为缓冲区:

Buffer.buffer()
.appendInt(1).appendInt(2).appendInt(3)
.appendInt(4).appendInt(5).appendInt(6);

(稍后您可以只使用字节表示,这只是为了说明它是如何工作的)。

现在您可以通过执行以下操作来引用任何xy:

int getInt(int x, int y) {
// transform from 2D to 1D
int pos = y * LENGTH + x;
// Where LENGTH is the the example: 3

// For safety assert on length
if (pos > buffer.length()) throw new ArrayIndexOutOfBoundsException();
// TODO: assert on min, max (x, y)

return buffer.getInt(pos);
}

关于java - 顶点 : pass initial data to verticle on it deployment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352471/

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