我想知道对于我在为我们的团队设置沙箱环境时遇到的问题,社区最推荐的是什么。
目前,我们使用两个单独的 MongoDB 实例,均为 3 个成员副本集,分别用于我们的测试和部署环境。内部人士普遍认为,测试环境中的所有数据大部分都是一次性的,并且只是由开发人员在对应用程序进行单元测试的过程中创建的。
我想为开发团队提供使用真实实时数据进行测试的新选项,但要在单独的安全沙箱实例中进行。起初,我最初认为我可以只使用 copyDatabase
命令每晚将数据复制到一个新数据库中,并将各个开发人员应用程序服务器连接到这个数据库。问题是系统中有大量 GridFS 数据,像这样复制会浪费大量磁盘 i/o,而且我们在较小的云实例中运行。
我对走这条路持谨慎态度,尤其是在有更合适的替代方案的情况下。
是否有可能,例如,设置部署副本集的第四个成员,它只作为从节点运行,将所有查询设置为 slaveOkay = True
并针对该单个节点运行测试?这会传播回其他成员吗?如何处理插入?
我的建议可能不切实际,特别是如果传输必须跨越网络,这也会浪费网络传输。有没有人曾经解决过类似的问题?谢谢!
最佳答案
Slave 仅用于读取。所有写入都必须交给master。这排除了您的“第四个奴隶”选项。
至于测试目的,您真的需要包含所有 gridfs 数据的数据库的精确副本吗?我会尝试只复制“大量”数据的相关部分。这排除了 db.copyDatabase()
:) 改为执行 mongodump
/mongorestore
。
此外,我想指出测试数据库和暂存数据库应该是不同的数据库。测试数据库用于单元测试(使用模拟/生成的数据)。暂存数据库填充了生产数据,用于集成/验收测试。
关于testing - 设置重复的mongodb测试环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685737/