更新时间:2022-06-21 GMT+08:00

删除命令

  • 删除分为逻辑删除(基于条件的remove删除)和快速删除(dropCollection,dropDatabase)。
  • 用户做了大量删除操作后,实际数据量可能没有多大变化,但磁盘空间使用量增加了。是因为无论是写入、更新还是删除,以及索引插入和删除等操作,在后台实际上都会转成写入。因为底层的存储引擎(WiredTiger和RocksDB)采用都是appendOnly机制。只有当存储引擎内部数据状态满足一定条件后,会触发内部的compaction操作,进行数据压缩,进而释放磁盘空间。
  • 如果整个数据库不需要了,可以执行dropDatabase命令进行删除而不是逻辑删除,这样快速释放磁盘空间。
  • 删除操作会涉及到备节点同步,可以指定writeConcern级别。详情请参见Write Concern

注意事项

  • 避免误删除。删除命令不能撤回,所以在删除前先执行db命令查看下当前所在的库。
  • 一旦误删除后,恢复时注意以下几点:
    1. 根据历史备份文件,进行备份恢复
    2. 如果有备份实例,从备份实例中,通过导入和导出恢复。误删除后,恢复过程如果有新的数据写入,需要业务端考虑数据的一致性问题,即是否应该执行恢复。
    3. 实例最后的备份时间点至当前误删除时间点的数据,无法进行恢复。
  • 删除命令,如果执行成功,则表示成功。如果执行失败,此时可能已经删除了部分数据了。所以不要继续使用删除的库表。建议继续下发删除命令,直到删除成功为止。