在停机时间为零的情况下在MongoDB集合之间切换

时间:2019-06-02 15:51:06

标签: node.js database mongodb mongoose

我正在从外部数据源创建一个并行集合(相同的架构-名称不同)。准备好收集后,我希望在不停机的情况下切换2个设备。有什么建议吗?

我正在使用mongoose创建并行集合,以便使用mongoose“ magic”(默认值,模型验证等),但是产生了诸如mongoexport,mongoimport之类的终端命令来快速删除并填充原始集合。不幸的是,似乎无法摆脱删除和导入新数据之间的空白。

// switching between _publications and publications
results = spawnSync('mongoexport', [
                '--db', 'convoy',
                '--collection', '_publications',
                '--out', 'res/json/_publications.json',
                '--jsonArray'
            ], {
                shell: true
            })
            console.log(`mongoexport done`)
            if (!fs.existsSync(`./res/json/_publications.json`)) return cb(`export failed - export file doesn't exist`)
            if (fs.statSync(`./res/json/_publications.json`).size < 50) return cb(`export failed - export file smaller than 50 bytes`)
            console.log(`dropping publications`)
            await mongoose.connection.db.dropCollection('publications')
            console.log(`importing _publications to publications collection`)
            // mongoimport publications.json -d convoy -c publications --jsonArray
            results = spawnSync('mongoimport', [
                'res/json/_publications.json',
                '-d', 'convoy',
                '-c', 'publications',
                '--jsonArray'
            ], {
                shell: true
            })
            fs.unlinkSync(`./res/json/_publications.json`)
            await mongoose.connection.db.dropCollection('_publications')
            cb(null, `done!`)

我有一个mongo副本集(主要,次要,仲裁者)。 这种体系结构是否已经确保我没有停机时间? 更好的方法? 谢谢!

0 个答案:

没有答案