我每晚都使用mongoimport命令重置我的数据库。不幸的是,我知道它首先删除数据库然后再填充它。
这意味着我的数据库在半满时被查询。有没有办法使mongoimport原子?这可以通过首先填充另一个集合,丢弃第一个集合然后重命名第二个集合来实现。
这是mongoimport的内置功能吗?
谢谢,
答案 0 :(得分:1)
目前还不清楚您希望从夜间进程中采取什么行为。
如果您的夜间流程负责创建新数据集,那么首先删除所有内容都是有意义的。但是,如果您的夜间流程负责添加现有数据集,那么可能建议使用mongorestore
(不包含--drop
),因为mongorestore
的行为是:< / p>
mongorestore
可以创建新数据库或将数据添加到现有数据库。但是,mongorestore仅执行插入操作,不执行更新。也就是说,如果将文档还原到现有数据库并且集合和现有文档具有与要恢复的文档相同的值_id字段,则mongorestore不会覆盖这些文档。
但是,当仍在使用时,这些问题似乎是您需要导入/恢复数据库的次要问题。我不认为mongoimport
或mongorestore
是可行的“写入机制”,供您在数据库联机并可用于读取时使用。从您的问题中,您清楚地意识到可能会出现问题,但没有Mongo功能可以为您解决此问题。你可以:
在mongoimport
或mongorestore
期间让您的系统离线,然后在该过程完成并经过验证后将其退回
使用mongoimport
或mongorestore
创建并排数据库,然后在此数据库准备就绪后,将应用程序切换为从该数据库读取。这是Blue / Green或A / B部署模型的变体。