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

标签 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 个月(或永远不会)才能移动其他数据,因此它会对实时网络应用程序产生性能影响直到那时。

最佳答案

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

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

关于mysql - 有没有人找到一种在 SQL 数据库中存储 BSON ObjectId 值的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978807/

相关文章:

mongodb - 如何在 NoSQL 世界中实现数据库抽象/独立

javascript - 在 MongoDB 中存储日期而不考虑时区

php - 如何使用 jQuery 数据表插件实现这种复杂的搜索?

mysql - 使用 pivot 命令时出现动态 SQL 错误

mysql - 处理 JOIN 中的 NULL

java - 将 Hibernate 4.3 迁移到 5.2 - 缺少表

jpa - Hibernate 5 中的命名策略与 Hibernate 4 兼容

mysql - 选择多个表中 EACH 2 个表之间共有的所有值

node.js - nodejs和mongoskin,保存所有项目后的回调

mongodb - 将用户从 Firebase 迁移到 MongoDB