database - 对开发和生产数据库使用不同的 ID 范围

标签 database architecture integration primary-key

我正在开发具有大量集成任务的 Web 服务。我们将我们的服务与数十个其他服务连接起来,每个服务都有自己的持久存储。当然,我们有一些不同的环境用于开发、阶段和生产目的。每个集成服务至少有两个环境:dev 和 prod。我考虑了两种可靠地分离环境的方法:

第一个是使用两个不同的数据库用于开发和(阶段+生产)电路。这种方法允许每个域对象只有一个 ID 序列,因此在第三方服务中不会出现任何冲突。优点:简单。缺点:从阶段到产品数据库的危险访问。

第二个是使用三个不同的数据库和用于集成的对象主键的保留范围(例如用户pk、订单号等)。在这种情况下,我们将不稳定阶段环境的访问限制为仅阶段数据库,并防止保留范围发生任何冲突。

但是使用保留范围或 ID 的想法对我来说似乎很奇怪。有什么建议吗?

UPD:让我以另一种方式澄清我的情况。对于每个第三方服务生产环境,我这边有两个环境:舞台和生产。因此,如果我的 prod 和 stage 环境有两个不同的数据库,而没有指定从我这边传输到第三方服务的对象 ID 的非相交范围,那么我的 stage 和第三方服务端的 prod 环境之间将会发生冲突。我应该在阶段和生产环境中使用一个数据库还是引入一系列 ID?

最佳答案

为什么 stage 和 prod 在同一个数据库中?我一直拥有三个数据库:dev、stage 和 prod,每个数据库都有一个每个域对象的 ID 序列。

这使阶段和产品在物理上分开。

如果不出意外,您还如何允许在阶段验证新的数据库更改而不将它们(未经测试)应用于产品?

关于database - 对开发和生产数据库使用不同的 ID 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423980/

相关文章:

c++ - 评估多重积分

css - 三层OOCSS架构

scala - 如何处理scala中外部命令的用户交互

mysql - 这个复杂的查询该怎么做呢?

php mysql 更新具有相同字段的多个表?

iphone - 具有Facebook Connect的iPhone应用程序的体系结构

c# - 创建可重用的 ASP.NET MVC 项目

asp.net - ASP.NET/Paypal: Paypal 集成向导?

javascript - Laravel 尝试从数据库获取导航栏列表

MySql:读取时间戳旁边的数据库表条目