由于MongoDB的索引是指向磁盘上位置的指针,当块数据因任何原因在磁盘上移动时,O / S是否会破坏这些索引?即碎片整理或RAID重新平衡
答案 0 :(得分:2)
磁盘上存储格式的实现因存储引擎而异,但与MongoDB 3.6一样,索引引用磁盘上 files 中的位置,而不是块设备的原始指针。文件系统或设备级别的块更改不需要更改MongoDB的内部数据文件结构。
但是,我担心在MongoDB(或其他应用程序)处于活动状态的文件系统上运行碎片整理或RAID重新平衡实用程序。存储维护将产生显着的性能开销。根据您的环境(操作系统,文件系统和使用的实用程序),对实时文件系统进行碎片整理可能还需要文件锁定,这可能会干扰正在运行的应用程序。
如果您的目标是进行碎片整理以重新获得MongoDB数据文件的空间或效率,建议的方法是使用副本集部署(或由副本集支持的分片群集),您可以一次re-sync one secondary。重新同步辅助节点将重建数据文件和索引,并且可以作为在线过程完成,假设您的副本集中有足够fault tolerance的其他数据承载成员。
另请注意,不建议将RAID 5用于MongoDB生产部署。根据{{3}},建议使用RAID 10以获得最佳RAID性能。