有没有人发现存储在SQL数据库BSON的ObjectId值的有效途径?(Has anyone fou

2019-06-25 10:10发布

我们要迁移一些数据从MySQL到蒙戈,并已增加额外领域的一些我们对数据库表中的ObjectId迁移的数据对象的值。

目前,我们将它们保存为varchar(24)latin1_general_ci工作正常。

然而,高效的存储/索引,我们也许应该转换回12字节的二进制值。 不幸的是,MySQL只好像有原生整数支持高达8个字节 。 是否有另一种选择 - 二进制吧?

更新 :我从MySQL迁移,但目前只有某些表。 所以我第一次做出了一定的表的蒙戈对象的副本。 然后,我回到那个有老MySQL表ID外键引用,并添加将存储蒙戈对象的ID一个新的参考场留在MySQL的任何其他表。 然后,我会删除原始的参考场的BIGINT。

更新2:我之所以提起这事是,它可以是12个多月(或从来没有),我们提出这个其他数据之前,所以它会对现场的Web应用程序的性能影响到那个时候。

Answer 1:

一个12字节的无符号整数的范围将是0..79228162514264337593543950335 (29位最大值); 根据文档(你所引用相同的URL),一个DECIMAL / NUMERIC列中的每一组的9 base10位打包成四个字节(加入至多floor(29 / 9) * 4 = 3 * 4 = 12的第27位字节) ,用剩下的2位取的附加字节,来多达13个字节的存储空间用于DECIMAL(29)柱上。

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



文章来源: Has anyone found an efficient way to store BSON ObjectId values in an SQL database?