查阅mongo for c driver 驱动源码,
发现其 _id 是 12byte ,其中头4字节,调用time(NULL), 这个函数存在y2038问题。
建议是修改为16byte ,前面8byte,用新的浮点日期格式,这个用delphi的tdatetime ,再保存为
int64表示(是用int64保存double,不是真实的int64)。
最终方案是
16字节binary id
转换成字符串表达为32byte hex string
该算法可以用在现有的关系数据库,以及其他需要分布式生成key的场景。
限制:delphi自己的处理,有9999年问题。目前够用了。
by steven 原创。