有没有人找到一种在SQL数据库中存储BSON ObjectId值的有效方法?

时间:2012-06-11 10:58:25

标签: mysql mongodb migration bson

我们正在将一些数据从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应用程序产生性能影响直到那时。

1 个答案:

答案 0 :(得分:5)

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

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