【发布时间】:2014-08-21 01:21:03
【问题描述】:
我们正在将 mongodb 迁移到 MySQL。我们的大多数客户端应用程序和基础设施都使用 24 个字符的 mongo id 对象。我现在正在寻找一种可以在 SQL 中生成类似的唯一字符串的方法。
我已经阅读了有关该主题的内容,并且一些帖子表明不可能在 sql 中获得相同的 mongo id。
我知道 MongoID 包括: [4 字节秒数,3 字节机器哈希,2 字节进程 ID,3 字节计数器]
我正在考虑编写一个名为 get_mongo_id() 的 MySql 函数,它将返回以下内容:
LEFT(SHA2(UUID(),256),24)
但我担心它仍然会导致重复,因为我只使用了 64 个字符 HASH 中的第一个 24 个字符。
以前有没有人遇到过类似的问题?任何建议将不胜感激。
【问题讨论】:
-
嗯,mongo id 是一个 12byte/96bit 的值。如果您使用 auto_increment bigint (8byte/64bit),mysql 将礼貌地跳过 db 中已经存在的任何值。当然,您必须将 mongoids 减少到 64bit 以适合该 bigint 字段,以便您可以使用 auto_increment .
-
@Conrad 也许跑题了,但我很想知道离开 MongoDB 的主要原因?
-
主要原因是关系数据。在 mongo 中很难管理。
-
数据是否需要重新移植到 mongo?如果不是,那么只需使用自动增量整数,或者如果您真的很自虐,则使用 uuid。