MongoDb多键索引-稀疏、唯一和增长问题

MongoDb多键索引-稀疏、唯一和增长问题,mongodb,indexing,Mongodb,Indexing,至于— 我对为publisherO'Reilly Media在book数组字段上创建多键索引有一些疑问: 出于学习目的,我将在未来假装书本数组最多只会增长5个元素,因此我想使用数组只关注此模式: 当我向book数组添加objectId时,它会自动为新元素编制索引吗 当我创建db.publishers.createIndex(books)时,是否要 背景是真的,所以当我添加到书中时它不会阻塞 数组,并对新值进行索引 我看到默认情况下,unique值为false。我对这件事感到困惑 这是因为我不知道

至于—

我对为publisher
O'Reilly Media
book
数组字段上创建多键索引有一些疑问:

出于学习目的,我将在未来假装书本数组最多只会增长5个元素,因此我想使用数组只关注此模式:

  • 当我向book数组添加objectId时,它会自动为新元素编制索引吗

  • 当我创建
    db.publishers.createIndex(books)
    时,是否要 背景是真的,所以当我添加到书中时它不会阻塞 数组,并对新值进行索引

  • 我看到默认情况下,
    unique
    值为false。我对这件事感到困惑 这是因为我不知道MongoDb索引的内部工作原理。
    books
    数组上的唯一值不需要为真吗
  • 对于
    sparse
    ,我为什么要使用它,为什么设置为false?这个
    books
    数组已是指定字段
  • 如果我删除了数组中的一个元素,索引的大小 自动减少
  • 我假设如果我以后修改图书文档,它将不会生效 写入性能,因为它的objectId在中之前已被索引 出版商图书数组,对吗

    {
       name: "O'Reilly Media",
       founded: 1980,
       location: "CA",
       books: [12346789, 234567890, ...]
    }
    
    {
        _id: 123456789,
        title: "MongoDB: The Definitive Guide",
        author: [ "Kristina Chodorow", "Mike Dirolf" ],
        published_date: ISODate("2010-09-24"),
        pages: 216,
        language: "English"
    }
    
  • MongoDB会自动将图书ID添加到多键索引中。然而,这个索引当然不包括实际的图书文档
  • 该块仅在创建索引时发生,而不是在添加项时发生(尽管将新项放入索引中的开销很小)。想象一下,你已经出版了10万本书,每本书有20万本——建立索引只需要一段时间,或者阻止任何操作,因此速度更快,我们在后台进行
  • null
    值也是唯一的值。所以如果没有一本出版的书,你不可能有两个出版商
  • 稀疏索引用于保存宝贵的RAM。如果您有数百万个文档,其中只有一小部分具有特定字段,那么拥有几百万个
    null
    条目将是对RAM的浪费。现在,部分索引是首选的,它提供了与稀疏诱导相同的功能,然后是一些
  • 是的,根据您删除的值。如果数组被删除而清空,并且您使用了稀疏索引或部分索引,那么相应的文档引用也将被删除
  • 完全,完全错误。索引非常简单,只不过是索引字段的寄存器和相应文档在数据文件中的位置。对于books数组,这将是包含索引值的publisher文档。同样,索引的不是图书文档,而是保存图书文档引用的字段。books字段被索引的原因是,对于给定的书籍,可以更快地找到出版商:

    db.publishers.find({books:someBookId})
    
    在编辑books文档时,您仍然需要首先找到它并应用最终需要同步到磁盘(甚至之前的日志)的更改。索引并不能神奇地消除持久化数据的需要