Mongodb id对大容量插入性能的影响

Mongodb id对大容量插入性能的影响,mongodb,Mongodb,我有一个具有guid的类/对象,我想在保存到Mongodb时将该字段用作_id对象。是否可以使用其他值而不是ObjectId 在有_id字段的情况下执行大容量插入时,是否有任何性能考虑?_id是索引吗?如果我将_id设置为其他字段,是否会减慢批量插入?我正在插入大约1000万条记录。所以 对。可以使用除ObjectId以外的其他类型,包括将另存为BinData的GUID 是的,有一些考虑。如果你的\u id总是在增加(比如一个不断增长的数字,或者ObjectId),那就更好了,否则索引需要更频繁

我有一个具有guid的类/对象,我想在保存到Mongodb时将该字段用作_id对象。是否可以使用其他值而不是ObjectId

在有_id字段的情况下执行大容量插入时,是否有任何性能考虑?_id是索引吗?如果我将_id设置为其他字段,是否会减慢批量插入?我正在插入大约1000万条记录。

所以

  • 对。可以使用除
    ObjectId
    以外的其他类型,包括将另存为
    BinData
    GUID
  • 是的,有一些考虑。如果你的
    \u id
    总是在增加(比如一个不断增长的数字,或者
    ObjectId
    ),那就更好了,否则索引需要更频繁地重建自己。如果您计划使用分片,那么
    \u id
    也应该均匀地散列
  • \u id
    确实自动有一个索引
  • 这取决于你选择的类型。见第2节
  • 结论:最好继续使用
    ObjectId
    ,除非你有充分的理由不这样做。

    1)是的,你可以使用该字段作为id。没有提到你用于插入文档的API(如果有)。因此,如果要在命令行中执行插入操作,则命令为:

    db.collection.insert({_id : <BSONString_version_of_your_guid_value>, field1 : value1, ...});
    

    提示的标题是-“当您拥有自己的简单、唯一的id时,覆盖(Override)id”。显然,如果您有一个,并且不需要ObjectId的属性,那么最好使用您的id。如果您的ID由于上述原因而增加,这是最好的


    3) MongoDB在_id字段上有一个默认索引。

    我读到ObjectId更快。这里有一个链接@iefpw:这种联系看起来似乎有道理。不过,我对您的数据有一个疑问。您要查询您的GUID吗?如果没有,那就好了。但是如果是的话,那么您可能还需要为guid编制索引以加速其查询。此外,如果您永远不打算查询MonogoDB的_id,那么您只需在1000万个文档中的每个文档中添加一个额外字段,并携带一个死索引权重,该权重将以一定的代价进行维护。1000万份文档的快速插入最终将导致整体速度放缓。不过,假设您不使用_id,而是查询原始guid。我将查询guid。以前我在C#like
    ObjectID{get;set;}
    中有自动生成的GUID,我没有给它赋值,在插入过程中,Id由驱动程序或Mongodb服务器获得一个值。我还需要为实际的对象GUID创建一个单独的索引,我将继续这样做,因为我需要查询对象。我原以为可以将这两个Guid组合在一起,但如果将Id更改为常规Guid,则会影响批量插入性能。也许我需要考虑使用ObjectID作为我的实际对象GUID,我将查询并删除对象GUID。@iefpw如果可以,那将是最好的。
                           :from the book `50 Tips and Tricks for MongoDB Developers`