首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么从大型mongodb集合中删除文档时,索引大小没有减小?

从大型MongoDB集合中删除文档时,索引大小没有减小的原因可能是由于MongoDB的删除操作并不会立即释放索引所占用的空间。这是因为MongoDB使用了一种称为“写时复制(copy-on-write)”的机制来处理删除操作。

在MongoDB中,当执行删除操作时,实际上是将要删除的文档标记为已删除,而不是立即从磁盘上删除。这是为了避免在删除操作后重新建立索引时的性能开销。当文档被标记为已删除后,MongoDB会在后台的任务中进行清理操作,将已删除的文档从磁盘上彻底删除,并释放索引所占用的空间。

因此,即使从大型MongoDB集合中删除了文档,索引大小可能不会立即减小。如果希望立即释放索引所占用的空间,可以考虑执行以下操作:

  1. 执行db.collection.reIndex()命令,该命令会重建集合的索引,从而释放已删除文档所占用的空间。但需要注意的是,该操作可能会对系统性能产生一定的影响,因此在生产环境中需要谨慎使用。
  2. 如果集合中的大量文档已被删除,可以考虑使用db.collection.compact()命令来进行集合的压缩操作。该命令会重新组织集合的数据文件,从而释放已删除文档所占用的空间。但同样需要注意该操作可能会对系统性能产生影响。

需要注意的是,以上操作都需要在适当的时机进行,并且需要根据具体情况评估其对系统性能的影响。此外,还可以通过合理设计数据模型和索引策略,以及定期进行数据清理和维护来优化MongoDB的性能和空间利用率。

推荐的腾讯云相关产品:腾讯云数据库 MongoDB,产品介绍链接地址:https://cloud.tencent.com/product/mongodb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用模式构建:子集模式

MongoDB将频繁访问的数据(称为工作集)保存在RAM。当数据和索引的工作集超过分配的物理RAM,随着磁盘访问的发生以及数据RAM中转出,性能会开始下降。 我们如何解决这个问题?...我们也可以考虑对集合进行分片,但这会带来额外的成本和复杂性,而我们的应用程序可能还没有准备好来应对这些。另一种选择是减小工作集的大小,这就是我们可以利用子集模式的地方。...子集模式 此模式用来解决工作集超出RAM,从而导致信息内存中被删除的问题。这通常是由拥有大量数据的大型文档引起的,这些数据实际上并没有被应用程序使用。我这么说到底是什么意思呢?...在考虑将数据拆分到何处文档中使用最多的部分应放入“主”集合,而使用频率较低的数据应放入另一个集合。对于我们例子的评论,这个分割点可能是产品页面上可见的评论数。...每当文档大小对工作集的大小产生压力并导致工作集超过计算机的RAM容量,子集模式便成为一个可以考虑的选项。 结论 通过使用包含有频繁访问数据的较小文档,我们减少了工作集的总体大小

70630

MongoDB的限制与阈值

索引键限制存在: 如果现有文档索引条目超过索引键限制,则MongoDB不会在集合上创建索引。 如果索引字段的索引条目超过索引键限制,则重新索引操作将出错。...在MongoDB 2.6,如果该索引字段的对应索引条目在初始同步超出了索引键限制,副本集的节点将继续复制带有索引字段的文档,但会在日志显示警告信息。...[1] [1]MongoDB 4.0开始,操作日志可以超过其配置的大小限制,以避免删除大多数提交点。 分片集群 分片群集具有此处描述的限制和阈值。...成功完成初始化分片后,您可以根据需要减小大小。如果以后减小大小,则所有块可能都需要花费一些时间才能拆分为新的大小。有关修改块大小的说明,请参阅修改分片群集中的块大小。...4.4版本中有更新 以下操作在事务不被允许: 影响数据库目录的操作,例如在使用fcv**"4.2"或更低版本创建/删除集合索引

14K10

95道MongoDB面试题(含答案),1万字详细解析!

MongoDB存储BSON对象在丛集(collection)。数据库名字和丛集名字以句点连结起来叫做名字空间(namespace)。 11、 如果用户移除对象的属性,该属性是否存储层删除?...GridFS是一种将大型文件存储在MongoDB的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了BSON对象有限制的问题。...GridFS是一种将大型文件存储在MongoDB的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了BSON对象有限制的问题。...87、在MongoDb什么是索引 索引用于高效的执行查询.没有索引MongoDB将扫描查询整个集合的所有文档这种扫描效率很低,需要处理大量数据。...update() 方法更新已有文档的值,而 save() 方法则是用传入该方法的文档来替换已有文档。 92、如何删除文档 MongoDB 利用 remove() 方法 清除集合文档

8.1K30

常见问题: MongoDB 存储

当WiredTiger创建新的日志文件,WiredTiger会同步以前的日志文件。 如何在WiredTiger回收磁盘空间? WiredTiger存储引擎在删除文档维护数据文件的空记录列表。...通常这是总数据大小的子集,但工作集的特定大小取决于数据库的实际使用时间。 如果您运行的查询要求MongoDB扫描集合的每个文档,则工作集将扩展以包括每个文档。...根据物理内存大小,这可能导致工作集中的文档“page out”,或者被操作系统物理内存移除。...2的指数大小分配( Power of 2 Sized Allocations) 确保MongoDB分配大小为2的指数大小文档空间,这有助于确保MongoDB可以有效地重用文档删除产生的空间或移动,并在许多情况下减少重新分配的发生...但是,如果必须手动填充文档,则可以向文档添加临时字段,然后使用$unset操作符删除字段,如以下示例所示。 警告 不要手动填充定容集合(capped collection)文档

2.5K30

全网最全95道MongoDB面试题1万字详细解析

MongoDB存储BSON对象在丛集(collection)。数据库名字和丛集名字以句点连结起来叫做名字空间(namespace)。 11、 如果用户移除对象的属性,该属性是否存储层删除?...GridFS是一种将大型文件存储在MongoDB的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了BSON对象有限制的问题。...() 来删除数据库集合。...87、在MongoDb什么是索引 索引用于高效的执行查询.没有索引MongoDB将扫描查询整个集合的所有文档这种扫描效率很低,需要处理大量数据。...update() 方法更新已有文档的值,而 save() 方法则是用传入该方法的文档来替换已有文档。 92、如何删除文档 MongoDB 利用 remove() 方法 清除集合文档

13.4K00

程序员的50大MongoDB面试问题及答案

ObjectID"有哪些部分组成 19.在MongoDb什么是索引 20.如何添加索引 21.如何查询集合文档 22.用什么方法可以格式化输出结果 23.如何使用"AND"或"OR"条件循环查询集合文档...42.如何使用"AND"或"OR"条件循环查询集合文档 43.如何删除文档 44.在MongoDB如何排序 45.举例说明您将从Redis和MongoDB一起使用受益的情况?...8.为什么MOngoDB? 架构简单 没有复杂的连接 深度查询能力,MongoDB支持动态查询。...19.在MongoDb什么是索引 索引用于高效的执行查询,没有索引MongoDB将扫描整个集合的所有文档,这种扫描效率很低,需要处理大量的数据....GridFS是一种将大型文件存储在MongoDB的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了BSON对象有限制的问题。

31920

MongoDB数据存储-深入了解

etent ns文件里面命名空间记录指向那个集合的第一个extent MongoDB数据文件与空间分配 当创建数据库(其实MongoDB没有显式创建数据库的方法,在向数据库集合写入数据时会自动创建该数据库...该值在文档size变小的时候,这个值不会减少,除非文档删除,或者执行compact或者repairDatabase操作 "storageSize" : 97834319392, #分配给集合的空间大小...(包括为集合增长预留的额外空间和未分配的已删除空间,即不会因为文档size变小或者删除减小),实际上数据文件中分配给集合的空间是以块为单位,也称之为extents,即分配的extents的大小...所有的记录在磁盘上连续存储,当一个document尺寸变大mongodb需要重新分配一个新的记录(旧的record标记删除,新的记record在文件尾部重新分配空间),这意味 着mongodb同时还需要更新此文档索引...从上面介绍已经得知,删除document会导致磁盘碎片,有些update也会导致磁盘碎片,比如update导致文档尺寸变大,进而超过原来分配的空间;当有新的insert操作mongodb会检测现有的

5.4K100

常见问题:MongoDB诊断

磁盘加载数据到内存MongoDB交给操作系统进行。它只是通过内存映射其所有数据文件,并依赖于操作系统来缓存数据。当内存不足,操作系统通常会内存驱逐最近最少使用的数据。...例如,如果客户端访问索引比访问文档更频繁,则索引更可能保留在内存,但这取决于您的特定用法。 要计算所需的内存大小,您必须计算working set大小或客户最常使用的数据部分。...这取决于您的访问模式,您拥有的索引以及文档大小。由于MongoDB每个连接使用一个线程,因此每个数据库连接也需要最多1 MB的内存,无论是活动还是空闲。...在大型数据库上,VSIZE (虚拟内存大小,单位字节)往往是整个数据库的大小。...MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者的较大者: · 50%(内存大小 - 1 GB),或 · 256 MB。

1.1K30

浅尝辄止MongoDB:管理(2)

一旦修复结束,就可以正常启动服务器,然后备份恢复任何丢失的数据。如果尝试修复一个大型数据库,那么驱动器上的磁盘空间可能会不足,因为MongoDB需要在同一驱动器上创建数据库的副本作为数据源。...该选项将显示数据文件或索引是否存在问题,但不会检查所有文档的正确性。...将会删除集合目前的所有索引,然后重建它们。...后者将修复单个数据库的所有集合文件,然后重建所有已定义的索引。...在分析问题,值得关注的其它列还有: faults:查询磁盘读取数据,标志服务器未达到最佳,所需的数据并未完全保存找内存。 qr/qw:队列等待的数目。

41720

MongoDB是什么?看完你就知道了!

相同点: 若新增的数据没有主键,会增加一条记录。...在关于schema 的设计要注意一些原则,比如: 不能创建没用的索引 不能在同一个字段存不同的类型 不能把多类实体都放在一个集合里 不能创建体积大、嵌套深的文档 不能过多的创建集合集合索引、数据库的命名空间都是有限的...五、索引与查询优化 1.索引的经验法则 (1)索引能显著减少获取文档的所需工作量,具体的对比可以通过 .explain()方法进行对比 (2)解析查询MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引...cursor当没有索引,用的是BasicCursor,当使用索引使用的是BtreeCursor n 表示需要返回的结果集 nscanned表示需要遍历的文档数 indexBounds 表示索引边界...7.提交与回滚 如果主节点的数据还没有写到库,那么数据不能算提交,当该主节点变成节点,便会触发回滚,那些没写到库的数据将会被删除,可以通过rollback子目录的BSON文件恢复回滚的内容。

82430

MongoDB是什么?看完你就知道了!

相同点: 若新增的数据没有主键,会增加一条记录。...在关于schema 的设计要注意一些原则,比如: 不能创建没用的索引 不能在同一个字段存不同的类型 不能把多类实体都放在一个集合里 不能创建体积大、嵌套深的文档 不能过多的创建集合集合索引、数据库的命名空间都是有限的...五、索引与查询优化 1.索引的经验法则 (1)索引能显著减少获取文档的所需工作量,具体的对比可以通过 .explain()方法进行对比 (2)解析查询MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引...cursor当没有索引,用的是BasicCursor,当使用索引使用的是BtreeCursor n 表示需要返回的结果集 nscanned表示需要遍历的文档数 indexBounds 表示索引边界...7.提交与回滚 如果主节点的数据还没有写到库,那么数据不能算提交,当该主节点变成节点,便会触发回滚,那些没写到库的数据将会被删除,可以通过rollback子目录的BSON文件恢复回滚的内容。

1.2K20

MongoDB GridFS

当你想访问大型文件的部分信息,却不想加载整个文件到内存,您可以使用GridFS 存储文件,并读取文件部分信息,而不需要加载整个文件到内存。...然后将文件信息存储在 fs.files 集合的唯一一份文档。其中 fs.chunks 集合多个文档的 file_id 字段对应 fs.files 集中文档 _id 字段。...读文件,先根据查询条件在 files 集合中找到对应的文档,同时得到 _id 字段,再根据 _id 在chunks 集合查询所有 “files_id” 等于_id 的文档。...即使删除 db 集合MongoDB 也不会释放磁盘空间。同样,如果使用 GridFS 存储文件, GridFS 存储删除无用的垃圾文件,MongoDB 依然不会释放磁盘空间的。...当使用 db.repairDatabase()命令没有足够的磁盘剩余空间,可以采用 dump & restore 方式回收磁盘资源。

5210

008.MongoDB分片群集概念及原理

MongoDB单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或需要部署大型应用以充分利用内存,可以使用分片技术。 二 MongoDB分片架构 2.1 主要组件 ?...数据划分 MongoDB的数据划分,是以集合级别为标准。分片通过shard key来划分集合数据。 2.2 shard key 在集合中分发文档MongoDB使用shard key对进行进行分片。...shard key既可以是集合的每个文档索引字段也可以是集合每个文档都有的组合索引字段。...对于数值型的shard key:可以虚构一条负无穷到正无穷的直线(理解为x轴),每个shard key 值都落在这条直线的某个点上,然后MongoDB把这条线划分为许多更小的没有重复的范围成为块(chunks...4.3 集群增加和删除分片 添加新分片到集群中会产生数据不平衡,因为新分片中没有块,当MongoDB开始迁移数据到新分片中,等到数据分片平衡需要一定时间。

1.1K30

技术干货| 如何在MongoDB轻松使用GridFS?

GridFS集合一节详细介绍了每个集合。 当你GridFS查询文件,驱动程序将根据需要重新组装该文件所有的块。你可以对GridFS存储的文件进行范围查询。...什么时候使用GridFS 在MongoDB,使用GridFS存储大于16 MB的文件。 在某些情况下,在MongoDB数据库存储大型文件可能比在系统级文件系统上存储效率更高。...上传文件的新版本后,您可以原子更新元数据中指示为“最新”状态的字段,然后在需要删除以前的版本。...MongoDB驱动程序已弃用MD5支持,并将在未来版本删除MD5的生成。需要文件摘要的应用程序应在GridFS外部实现它,并将其存储在files.metadata。...如果希望将其他任意字段添加到文件集合文档,请将其添加到元数据字段的对象。 GridFS索引 GridFS使用每个块和文件集合上的索引来提高效率。

6.5K30

MongoDB系列7:MongoDB存储引擎

·WiredTiger缓存大小默认为50%RAM 没有了文件系统缓存,最小的可用内存为20%,这对于任何较低的操作系统来说都可能受到资源的限制。...这种方法允许多个客户端同时修改集合的不同文档,从而提高并发和吞吐量。当使用多核服务器,多个线程正在写入不同的文档,就实现了最佳的写入性能。...某些其他操作,如删除集合,则需要独占数据库锁。...当为true,mongod会分别单独以索引命名的子目录存储索引和以集合命令的子目录存储集合数据。 blockCompressor:默认值为snappy,用于压缩集合数据的压缩的默认类型。...nsSize:默认为16,命名空间文件的默认大小,这些文件是以ns结尾的文件。每个集合索引都算作名称空间。此设置控制新创建的命名空间文件的大小。此项对现有文件没有影响。

2.3K60

Mongodb(一)

3.MongoDB扩展性非常好。因为在MongoDB文档结构可以不同,随意对文档结构进行扩展,不像MySQL每个字段都是固定好的,你需要往里填数据。 4.为什么要使用NoSQL?...2.使用use之后并没有创建数据库。 3.数据库是在手动创建集合或者使用集合的时候创建的。 删除当前的数据库: db.dropDatabase() 使用该命令必须已经选择了当前要删除的数据库。...MongoDB集合的存储空间默认最大为16M,也可以使用固定集合指定大小。...当对已存在数据的集合创建唯一索引,可能会因为重复,导致创建不成功,使用dropDups可以删除重复文档,但是我们一般不建议使用: db.colname.ensureIndex({‘key’:1},{“...非关系型数据库是文档形式存储数据,没有表的概念,有集合(表)和文档(记录),存储基于硬盘存储数据,吧硬盘的数据放入内存中进行读写操作。 ?

2.2K20

MongoDB系列6:MongoDB索引的介绍

2.4.1 全文索引版本历史 MongoDB 3.2开始,MongoDB全文索引默认的版本为Version3....调整索引列的权重,可以使用包含weights选项的db.collection.createIndex()方法。 注:选择权重需要注意防止索引重建。 例子,集合blog,文档如下: ?...通配符全文索引索引每一个包含字符串数据集合的每个文档。...它们为每一个插入的文档在每个索引字段包含一个唯一的索引词。 ·构建全文索引与构建一个大型多键索引非常相似,而且相同数据下,比构建一个简单的有序索引要长。...·当在现有集合上构建一个大型全文索引,确保打开的文件描述符有足够高的限制。 ·全文索引会影响插入效率,因为MongoDB必须为每一个新的源文档的每一个唯一索引词添加索引

2.9K101

面试之MongoDB「建议收藏」

MongoDB 和 CouchDB 都是面向文档的数据库。MongoDB 和 CouchDB 都是开源 NoSQL 数据库的最典型代表。 除了都以文档形式存储外它们没有其他的共同点。...MongoDB 存储 BSON 对象在丛集(collection)。数据库名字和丛集名字以句点连结起来叫做名字空间 (namespace)。 如果用户移除对象的属性,该属性是否存储层删除?...MongoDB 分片是基于区域(range)的。所以一个集合(collection)的所有的对象都被存放到一个块 (chunk)。只有当存在多余一个块的时候,才会有多个分片获取数据的选项。...现在,每个默认块的大小是 64Mb,所以你需要至少 64 Mb 空间才可以实施一个迁移。 当我试图更新一个正在被迁移的块(chunk)上的文档时会发生什么?...如何理解 MongoDB 的 GridFS 机制,MongoDB 为何使用 GridFS 来存储文件? GridFS 是一种将大型文件存储在 MongoDB 的文件规范。

1.2K10

什么是MongoDB为什么要使用MongoDB

MongoDB功能 每个数据库都包含集合,而集合又包含文档。每个文档可以具有不同数量的字段。每个文档大小和内容可以互不相同。文档结构更符合开发人员如何使用各自的编程语言构造其类和对象。...NoSQL数据库的简介可以看出,行(或在MongoDB调用的文档)不需要预先定义架构。相反,可以动态创建字段。...为什么使用MongoDB 以下是一些为什么应该开始使用MongoDB的原因 面向文档的–由于MongoDB是NoSQL类型的数据库,它不是以关系类型的格式存储数据,而是将数据存储在文档。...索引-可以创建索引以提高MongoDB的搜索性能。MongoDB文档的任何字段都可以建立索引。 复制-MongoDB可以提供副本集的高可用性。副本集由两个或多个mongo数据库实例组成。...如果创建的新文档没有_id字段,MongoDB将自动创建该字段。 集合 – 这是MongoDB文档的分组。集合等效于在任何其他RDMS(例如Oracle或MS SQL)创建的表。

4.9K30
领券