在javascript中缩短MongoDB ID
我怎样才能缩短mongodb的ID,以更容易parsingURL中使用的语法。 string在当前的迭代中太长了。
Base64是体面的,但仍然太长。 我正在寻找更多的亚7字符范围内。
我希望能够在node.js和浏览器中进行编码/解码。
从请求parsingObjectId并不困难(所以我不知道为什么这是一个问题?)。 如果目标是制作可键入的url,那么拥有更短的“友好”url将是有价值的。
你不能采取一个12字节的数字,在分片的MongoDB设置中保证是唯一的,并将其压缩到less于12个字节,并保证它是唯一的(例如,你提到了七个字符)。
从文档中 ,MongoDB的ObjectId包括:
- 一个4字节的时间戳
- 一个3字节的机器标识符
- 一个2字节的进程ID
- 和一个3字节的计数器。
所以,你需要牺牲ObjectId的一部分(因此分片),或者devise一个索引的备用Id创build格式。
虽然你可以对这个ID进行散列,但是可能会出现你想要编码的冲突(再次,你不能把12个字节减less到4个字节并保证唯一性)。 如果有可能的冲突(如果你减less可用的总位数,那么你将会需要某种辅助表)(你需要创build一个从生成的ID到ObjectId的索引) 。
结果选项:
- 删除通常有意义的位 – 如果你这样做, 不要分割集合
- devise你自己的独特的ID解决scheme(如果它在一个networking农场,它可能最终看起来非常类似于MongoDB的处理唯一性)
- 使用ObjectId作为一个很长的数字,并运行一个简短的algorithm(它将需要首先分解成更小的块,因为它超过了JavaScript的53位数字精度),试试这个algorithm,例如= 编码它(将结束17个字符)
- 使用别的更短,但唯一的身份certificate文件
- 最简单的:只要接受这个ID很长。 🙂
(目前还不清楚为什么浏览器需要进行这种转换 – 为什么会有文档的ObjectID?)