在 MongoDB 上使用 UUID 而不是其字符串表示作为 _id 可以提高性能吗?

Dav*_*d G 4 performance uuid key mongodb

在 REST 应用程序中,我需要将UUID字符串表示形式(在 中接收json)转换为UUID Object将其存储在 MongoDB 的_id字段中。UUID我这样做是因为我听说使用vs时查找/插入时间有性能提升String

UUID在 MongoDB 上使用as_id而不是其字符串表示形式真的会带来性能提升吗?(即使是很小的性能提升也会对我产生很大的影响)

PS:我看到这篇文章说性能更好ObjectID(不完全相同,不确定它是否适用于),但唯一的原因似乎是vsUUID的潜在较小尺寸。ObjectIDString

Dav*_*d G 6

我正在使用PyMongowhich 编码UUID作为BSON::Binary.

从MongoDB文档中我们可以看到:

为了更有效地存储集合和 _id 索引中的 UUID 值,请将 UUID 存储为 BSON BinData 类型的值。如果满足以下条件,则 BinData 类型的索引键可以更有效地存储在索引中: 二进制子类型值在 0-7 或 128-135 范围内,并且字节数组的长度为: 0, 1, 2, 3 、4、5、6、7、8、10、12、14、16、20、24 或 32。

UUID的在这个范围内,因此性能将比String表示法有所提高。

  • 看来你或多或少回答了你自己的问题。:-) 值得强调的是,存储为 UUID 将节省数据库中的大量空间。当存储为 BinData 与 String 时,您的索引大小将减少近一半,并且文档大小也将减少。这意味着您将能够在内存(缓存)中保留更多索引数据和更多文档数据,并节省磁盘空间。 (5认同)