我在nodejs中写了一个使用rethinkdb的add。在启动时,应用程序会执行大量数据库设置,包括创建必要的表(如果它们不存在)。代码(简化)看起来像:
r.tableList().run(conn).then(existingTables =>
requiredTables
.filter(t => existingTables.indexOf(t) === -1)
.map(name => r.tableCreate(name).run(conn)));
这很好用。问题是应用程序在docker容器内运行,我需要能够使用docker-compose scale app=3
进行扩展。当部署作业运行时,会立即创建三个新容器,每个容器都会创建一组表,导致我需要手动解决的数据库问题。我想我能理解为什么会这样,但我无法理解如何解决它。我曾想过尝试在一个查询中编写它,但真正的用途是相当复杂(即创建索引,运行迁移,填充样本数据),我不认为有任何方法我可以在一个查询中做很多事。
答案 0 :(得分:0)
RethinkDB目前不保证管理操作是原子的。最好的办法可能是分离管理操作(创建数据库,表和索引),然后在仅在一个容器中运行的单独设置步骤中运行它们。