我们正在将一些数据从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个月(或从未),因此它会对实时Web应用程序产生性能影响直到那时。
答案 0 :(得分:5)
12字节无符号整数的范围是0..79228162514264337593543950335
(最多29位);根据文档(您引用的URL相同),DECIMAL
/ NUMERIC
列将每组九个base10数字打包成四个字节(前27个数字加起来为floor(29 / 9) * 4 = 3 * 4 = 12
个字节),剩余的2位数字需要额外的字节,DECIMAL(29)
列的存储空间最多为13个字节。
或者,您可以将它们存储为BINARY(12)
。