Database 跨不同微服务数据库的数据完整性

Database 跨不同微服务数据库的数据完整性,database,foreign-keys,relational-database,rdbms,microservices,Database,Foreign Keys,Relational Database,Rdbms,Microservices,假设我使用关系数据库来提供微服务。我有CustomersMService,它有自己的数据库,表为Customer,然后我有OrdersMService,它也有自己的数据库,但表为Order,表中有列CustomerId。我的问题是如何确保数据库之间的数据完整性,使Orders表不会指向不存在的客户 我的问题是如何确保数据库之间的数据完整性,订单表不会指向不存在的客户 这是一个很好的问题。但是,它缺少一个重要的维度,即您希望建立引用完整性的时间跨度 如果你问,“我如何确保我所有的数据在任何时候都是

假设我使用关系数据库来提供微服务。我有
CustomersMService
,它有自己的数据库,表为
Customer
,然后我有
OrdersMService
,它也有自己的数据库,但表为
Order
,表中有列
CustomerId
。我的问题是如何确保数据库之间的数据完整性,使
Orders
表不会指向不存在的客户

我的问题是如何确保数据库之间的数据完整性,订单表不会指向不存在的客户

这是一个很好的问题。但是,它缺少一个重要的维度,即您希望建立引用完整性的时间跨度

如果你问,“我如何确保我所有的数据在任何时候都是100%一致的?”-答案是你不能。如果您希望这样做,则需要通过外键约束(在数据库中不可用)或确保在某个分布式事务之外从不写入一个数据库而不写入另一个数据库(这是荒谬的,并且会破坏使用面向服务的目的)

如果您问:“如何确保我的所有数据在合理的时间跨度后100%一致?”,那么您可以做一些事情。一种常见的方法是在服务之间实现持久的、异步的。这确保了可以在本地写入更改,然后以可靠但离线的方式远程发送。您可以做的另一件事是安排一个看守进程,定期纠正数据中的不一致


然而,必须指出的是,在交易之外,即使在合理的时间跨度内,一致性也不可能绝对保证。如果应用程序需要绝对一致性,那么面向服务可能不是您的方法

你所说的“特定产品”是什么意思@PhilipXYH表示您使用的堆栈。答案的可能重复取决于您使用的DBMS(或提供类似DBMS功能的系统)。请添加适当的标签。主题是分布式数据库。