0

我想将数百万个条目存储到 mongob 数据库中。现在,我将对 device_id (这是一个类似于 aaff33raf-22daa-333fa 的字符串)进行大部分查询 我如何将此字符串映射到一个数字并将其存储到数据库中。

所以我的问题是 - 从可扩展性的角度来看(大量读取和大量写入)我应该如何保留我的 _id 字段?整数还是字符串?

4

2 回答 2

1

无论您选择整数还是字符串作为 _id 字段并没有太大的区别。这是一个索引字段,因此通过 _id 拉出或通过 _id 更新不会有很大不同。

也许存储值的大小是一个问题,但是与整个文档相比,_id 可能很小……所以也可能不是问题。

然而重要的是可读性和调试,如果你总是提到像“aaff33raf-22daa-333fa”这样的产品,那么你应该继续这样做。在数据库中保持相同可以让您保持清醒。

于 2013-06-28T17:07:51.913 回答
0

如果您的设备 ID 是不可变的,那么我将使用设备 ID 作为文档_id。如果设备 ID 可能会更改,并且您确实记录到文档引用(如外键),那么我将使用ObjectIds 并使用设备 ID 创建一个二级索引。

最重要的是,如果您可以将设备 ID 转换为数字,请确保它不会丢失。

虽然您提供的示例显然不是一个有效数字(它包含字母r),但如果这是一个拼写错误并表示设备 ID 的另一个字符,那么存储设备 ID 所需的总字节数似乎超过8 个字节)。

这超出了例如BSON中指定的 Int64 数字类型)。(双精度也只存储 8 个字节)。

鉴于此,字符串是用作文档 ID 的更合理(和安全)的键。性能差异与使用数字的差异很小。它们都将被索引,虽然搜索数字索引可能会稍微快一些(想想纳秒),但在典型的工作流程中并不重要。

此外,在早期应用程序构建期间,访问 MongoDB shell 通常很有用,我认为将 DeviceID 作为字符串比将它们以编码格式存储更方便。( db.devices.find({_id: 'aaff33raf-22daa-333fa' }))。

于 2013-06-28T19:34:13.573 回答