切换到新标准UUID BinData subtype 4是否有任何性能优势?
我们的大多数集合都设置为使用GuidRepresenation.CSharpLegacy
,the default用于C#驱动程序。如果我设置Mongo.Bson.BsonDefaults.GuidPresenation = Mongo.Bson.GuidRepresentation.Standard
,它会对性能有益吗?还假设我们将所有现有数据转换为使用标准子类型。
答案 0 :(得分:6)
不同的UUID BinData子类型与兼容性有关,而不是性能..所以没有明显的性能优势。
历史上(我的意思是,几年前)ObjectIDs只是期望是独特的,并且使用类似的公式生成。一些驱动程序在序列化UUID方面存在分歧(例如,字节顺序或字节顺序不同)。所以type 3 UUIDs最终得到了Python,Java和C#子类型。
如果您只使用单个驱动程序,则此变体不是问题,但如果您在同一数据库上使用不同的驱动程序(例如C#vs Java vs Python),则可能会出现问题。生成ObjectID的方式的差异可能会影响驱动程序对子值排序或解释的假设(例如,如果要提取ObjectID的timestamp
组件)。
如果您想深入了解格式的不同之处,请查看mongo-csharp-driver存储库中的uuidhelpers.js。该脚本包含一些辅助函数,用于在mongo
shell中使用不同的UUID格式。