我想将数百万个条目存储到 mongob 数据库中。现在,我将对 device_id (这是一个类似于 aaff33raf-22daa-333fa 的字符串)进行大部分查询 我如何将此字符串映射到一个数字并将其存储到数据库中。
所以我的问题是 - 从可扩展性的角度来看(大量读取和大量写入)我应该如何保留我的 _id 字段?整数还是字符串?
无论您选择整数还是字符串作为 _id 字段并没有太大的区别。这是一个索引字段,因此通过 _id 拉出或通过 _id 更新不会有很大不同。
也许存储值的大小是一个问题,但是与整个文档相比,_id 可能很小……所以也可能不是问题。
然而重要的是可读性和调试,如果你总是提到像“aaff33raf-22daa-333fa”这样的产品,那么你应该继续这样做。在数据库中保持相同可以让您保持清醒。
如果您的设备 ID 是不可变的,那么我将使用设备 ID 作为文档_id
。如果设备 ID 可能会更改,并且您确实记录到文档引用(如外键),那么我将使用ObjectId
s 并使用设备 ID 创建一个二级索引。
最重要的是,如果您可以将设备 ID 转换为数字,请确保它不会丢失。
虽然您提供的示例显然不是一个有效数字(它包含字母r
),但如果这是一个拼写错误并表示设备 ID 的另一个字符,那么存储设备 ID 所需的总字节数似乎超过8 个字节)。
这超出了例如BSON中指定的 Int64 数字类型)。(双精度也只存储 8 个字节)。
鉴于此,字符串是用作文档 ID 的更合理(和安全)的键。性能差异与使用数字的差异很小。它们都将被索引,虽然搜索数字索引可能会稍微快一些(想想纳秒),但在典型的工作流程中并不重要。
此外,在早期应用程序构建期间,访问 MongoDB shell 通常很有用,我认为将 DeviceID 作为字符串比将它们以编码格式存储更方便。( db.devices.find({_id: 'aaff33raf-22daa-333fa' })
)。