3

我们正在将一些数据从 MySQL 迁移到 Mongo,并且一直在向我们的一些数据库表中添加额外字段,以获取迁移数据对象的ObjectId值。

目前我们将它们存储为 varchar(24) latin1_general_ci 可以正常工作。

然而,为了有效的存储/索引,我们可能应该转换回 12 字节的二进制值。不幸的是,MySQL 似乎只支持最多 8 个字节的本机整数。还有另一种选择 - 也许是二进制?

更新:我正在从 MySQL 迁移,但目前只有某些表。所以我首先在某个表的 Mongo 中复制对象。然后我回到 MySQL 中剩下的任何其他表,这些表具有对旧 MySQL 表 ID 的外键引用,并添加一个新的引用字段来存储 Mongo 对象的 ID。然后我将删除原始参考字段 BIGINT。

更新 2:我提出这个问题的原因是,在我们移动其他数据之前可能还要再过 12 个月(或永远不会),所以在此之前它会对实时 Web 应用程序产生性能影响。

4

1 回答 1

5

12 字节无符号整数的范围是0..79228162514264337593543950335(最多 29 位);根据文档(您引用的相同 URL),DECIMAL/NUMERIC列将每组九个 base10 数字打包成四个字节(floor(29 / 9) * 4 = 3 * 4 = 12前 27 个数字加起来字节),其余 2 个数字占用一个额外字节,最多 13 个字节列的存储空间DECIMAL(29)

或者,您可以将它们存储为BINARY(12).

于 2012-06-11T11:52:33.317 回答