我使用MongoDB作为非规范化存储,状态每15分钟完全重建一次。重建过程需要很多时间和资源。有没有办法组织表“hotswap”进程,以避免在重建期间数据库锁定和性能下降。让我们假设我在另一台服务器上构建新版本的DB,制作所有需要的索引等,然后在主服务器上复制db文件并“交换”表,以便用户在交换后立即获得刷新数据?
答案 0 :(得分:2)
MongoDB使用pre-allocated data files所以如果你经常删除和重建数据库,你可能会在搅拌磁盘。数据文件使用memory-mapped I/O打开,没有“热插拔”或重命名数据库的条款。
可以重复使用已删除集合中的空间,因此更好的方法可能是根据您的15分钟间隔生成临时集合名称,这样您的程序就可以预测“交换”到下一个集合,并且可以删除旧集合。
如果您使用的是MongoDB 2.2或更高版本,则还有其他选项:
使用新的usePowerOf2Sizes
收集选项来改善已删除空间的重复使用
使用Time-To-Live (TTL)功能在15分钟后自动使文档过期。