Rethinkdb竞赛条件创build表

我有一个使用rethinkdb的nodejs写入的添加。 在启动时,应用程序会执行一堆数据库设置,包括创build必要的表(如果它们不存在)。 代码(简体)看起来像这样:

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进行docker-compose scale app=3 。 部署作业运行时,会立即创build三个新的容器,每个容器都会创build一组导致数据库问题的表,这些问题需要手动解决。 我想我可以理解为什么发生这种情况,但是我看不出如何解决这个问题。 我曾经想过把所有这些都写在一个单一的查询中,但是真正的用法是比较复杂的(比如创build索引,运行迁移,填充样本数据),我不认为我可以做任何事情在一个单一的查询很多。

RethinkDB目前不保证pipe理操作是primefaces性的。 要做的最好的事情可能是将pipe理操作(创build数据库,表和索引)分开,然后在单独的设置步骤中运行这些步骤,只在一个容器中运行。

Interesting Posts