CQRS 和微服务中的数据管理
Data management in CQRS and Microservices
我是微服务架构的新手,根据本文档,我了解了很多关于微服务架构的基础知识、CQRS 和事件溯源 http://microservices.io,但我有一些问题仍然不清楚:
是否需要为每个CQRS读取模型配备不同的数据库服务器,或者可以将它们放在同一个数据库中但在不同的tables中。
如果您有不同的数据库,那么您应该如何加入 table。如果我们使用相同的数据库,那么我们的微服务是否会紧密耦合,这将破坏使用此架构的全部目的
命令查询责任分离 (CQRS) 是一种模式,您可以在其中将用于更新的模型与用于读取数据的模型分开。这意味着您的微服务的读取端将是高度专业化和独立的。
所以说到阅读方面,您可以拥有任意数量的数据库,通常,您会根据需要执行的数据类型和查询拥有一个专门优化的数据库。例如,您可以使用 Elastsearch 进行快速搜索或使用 Neo4J 进行图形结构。
这些数据库由Events
你的微服务发布更新,所以你不需要连接不同数据库之间的表,它们是独立的。
无论您是否为每个微服务使用关系数据库并有一个 Query
服务来连接来自多个数据库的数据,这都是一种反模式,它会在服务之间创建一对并受到锁表的影响。
Do you need to have different database servers for each CQRS read model, or you can put them in the same database but in different tables.
您通常会期望不同的逻辑 数据库。它们可能恰好托管在同一个持久存储设备上,但是 none 的代码应该 期望 将数据存储在同一个地方。
If you have different databases then how are you supposed to join table.
您应该不加入表格。相反,您复制数据——从对写入有意义的表示形式转换为对读取有意义的表示形式。
if we use the same database then wouldn't our microservices be tightly coupled and that would defeat the whole purpose of using this architecture
耦合实际上来自于不同服务接触相同 行 的假设。换句话说,我们不希望进程通过数据库进行通信。相反,我们在服务之间传递消息,服务管理自己的数据。
如果你做对了,那么你碰巧将数据存储在同一个设备中这一事实就无关紧要了,因为你的服务实际上永远不会在他们自己的小泡沫之外。
表达相同想法的另一种方式:您应该能够更改 "your" 架构而无需与其他任何人协调。
let’s say we have a users microservice and a posts microservice, how am I supposed to query the posts with each user that published them, how can I manage related data between different microservices?
您将数据复制到一个公共数据库,然后您可以在其中创建您需要的报告。
我是微服务架构的新手,根据本文档,我了解了很多关于微服务架构的基础知识、CQRS 和事件溯源 http://microservices.io,但我有一些问题仍然不清楚:
是否需要为每个CQRS读取模型配备不同的数据库服务器,或者可以将它们放在同一个数据库中但在不同的tables中。
如果您有不同的数据库,那么您应该如何加入 table。如果我们使用相同的数据库,那么我们的微服务是否会紧密耦合,这将破坏使用此架构的全部目的
命令查询责任分离 (CQRS) 是一种模式,您可以在其中将用于更新的模型与用于读取数据的模型分开。这意味着您的微服务的读取端将是高度专业化和独立的。
所以说到阅读方面,您可以拥有任意数量的数据库,通常,您会根据需要执行的数据类型和查询拥有一个专门优化的数据库。例如,您可以使用 Elastsearch 进行快速搜索或使用 Neo4J 进行图形结构。
这些数据库由Events
你的微服务发布更新,所以你不需要连接不同数据库之间的表,它们是独立的。
无论您是否为每个微服务使用关系数据库并有一个 Query
服务来连接来自多个数据库的数据,这都是一种反模式,它会在服务之间创建一对并受到锁表的影响。
Do you need to have different database servers for each CQRS read model, or you can put them in the same database but in different tables.
您通常会期望不同的逻辑 数据库。它们可能恰好托管在同一个持久存储设备上,但是 none 的代码应该 期望 将数据存储在同一个地方。
If you have different databases then how are you supposed to join table.
您应该不加入表格。相反,您复制数据——从对写入有意义的表示形式转换为对读取有意义的表示形式。
if we use the same database then wouldn't our microservices be tightly coupled and that would defeat the whole purpose of using this architecture
耦合实际上来自于不同服务接触相同 行 的假设。换句话说,我们不希望进程通过数据库进行通信。相反,我们在服务之间传递消息,服务管理自己的数据。
如果你做对了,那么你碰巧将数据存储在同一个设备中这一事实就无关紧要了,因为你的服务实际上永远不会在他们自己的小泡沫之外。
表达相同想法的另一种方式:您应该能够更改 "your" 架构而无需与其他任何人协调。
let’s say we have a users microservice and a posts microservice, how am I supposed to query the posts with each user that published them, how can I manage related data between different microservices?
您将数据复制到一个公共数据库,然后您可以在其中创建您需要的报告。