gpt4 book ai didi

mysql - 在 MySQL 中存储 100k x 100k 数组

转载 作者:搜寻专家 更新时间:2023-10-30 22:30:28 24 4
gpt4 key购买 nike

我需要在 MySQL 中存储一个固定大小的大方阵。数组的值只是 INT,但需要相当快地访问和修改它们。

这就是我的想法:

  • 只需使用 1 列作为主键,并将二维数组索引转换为一维索引。所以如果二维数组是 n by n => 2dArray[i][j] = 1dArray[n*(i-1)+j]

这将问题转化为在数据库中存储大量一维数组。

  • 然后使用另一列作为值。

  • 将数组中的每个条目都排成一行。

不过,我对MySQL的内部运作不是很熟悉。

100k*100k 产生 100 亿个数据点,这比 32 位可以得到的多,所以我不能使用 INT 作为主键。在研究 stackoverflow 时,有些人在使用 BIGINT 作为主键时遇到了性能问题。

在这种情况下,我只存储 INT,MySQL 的性能会随着行数的增加而下降吗?

或者,如果我将数据分散到同一台服务器上的多个表中,是否可以提高性能?现在,看起来我无法访问多台机器,所以我无法真正对数据进行集群。

我对上面列出的每个想法都非常灵活,并且乐于接受建议(除了不使用 MySQL,因为我有点致力于此!)

最佳答案

至于您担心 BIGINT 或添加更多行会降低性能,这当然是正确的。您将有 100 亿行,这将需要一张大表和大量 RAM。需要注意针对此数据集运行的查询以确定最佳存储方法。

我可能建议使用两个 列作为主键。开发人员经常忽视复合主键的可能性。

然后,如果需要,您可以对两个主键列都使用 INT。

CREATE TABLE MyTable (
array_index1 INT NOT NULL,
array_index1 INT NOT NULL,
datum WHATEVER_TYPE NOT NULL,
PRIMARY KEY (array_index1, array_index2)
);

请注意,像这样的复合索引意味着如果您在第一列上没有相等条件的情况下搜索第二列,则搜索将不会使用该索引。所以如果你想支持它,你需要一个二级索引。

MySQL 不支持 100,000 列。 MySQL 有 limits 4096 列,每行 65,535 字节(不包括 BLOB/TEXT 列)。

可以将数据存储在多个表中,但可能会使您的查询非常尴尬。

您还可以考虑使用表 PARTITIONING ,但这并不像听起来那么有用。

关于mysql - 在 MySQL 中存储 100k x 100k 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44478055/

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