我们正在将一些数据从 MySQL 迁移到 Mongo,并且一直在为 ObjectId 的一些数据库表添加额外的字段。迁移数据对象的值。
目前我们将它们存储为 varchar(24) latin1_general_ci,它工作正常。
然而,为了高效的存储/索引,我们可能应该转换回 12 字节的二进制值。不幸的是,MySQL 似乎只有 native integer support up to 8 bytes。 .还有另一种选择-也许是二进制的?
更新:我正在从 MySQL 迁移,但目前只迁移某些表。所以我首先复制了某个表的Mongo中的对象。然后我返回到 MySQL 中剩余的任何其他表,这些表具有对该旧 MySQL 表 ID 的外键引用,并添加一个新的引用字段来存储 Mongo 对象的 ID。然后我将删除原始引用字段 BIGINT。
更新 2: 我提出这个问题的原因是我们可能需要 12 个月(或永远不会)才能移动其他数据,因此它会对实时网络应用程序产生性能影响直到那时。
最佳答案
12 字节无符号整数的范围为 0..79228162514264337593543950335
(最多 29 位);根据文档(您引用的相同 URL),DECIMAL
/NUMERIC
列将每组九个 base10 数字打包成四个字节(加起来为 floor(29/9) * 4 = 3 * 4 = 12
字节用于前 27 位),其余 2 位占用一个额外的字节,对于 DECIMAL(29)最多存储 13 个字节
列。
或者,您可以将它们存储为 BINARY(12)
。
关于mysql - 有没有人找到一种在 SQL 数据库中存储 BSON ObjectId 值的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978807/