0

我计划将现有服务从 mongodb 迁移到 neo4j graphdb 以实现持久性。我有使用 mongo 后端的配置文件和订单服务。我的订单域实体引用了 profileId,我使用应用程序代码根据 profileId 加入订单和配置文件。现在如果我选择neo4j,我想避免应用程序代码加入,而是使用neo4j的方式来做简单到复杂的加入要求。现在,问题是我将如何避免在设计中给定配置文件和订单位于 2 个不同的微服务中?当配置文件和订单存在于有界上下文中的 2 个微服务中时,我将如何有效地在 neo4j 中建模并定义它们之间的关系。我是否要复制配置文件和订单实体来定义关系。请帮忙。

例如,像下面这样的场景:

  1. 一些业务事务必须强制执行跨越多个服务的不变量。例如,下订单用例必须验证新订单不会超过客户的信用额度。其他业务事务,必须更新多个服务拥有的数据。

  2. 一些业务事务需要查询多个服务拥有的数据。例如,View Available Credit 使用必须查询 Customer 以找到 creditLimit 和 Orders 以计算未结订单的总金额。

  3. 某些查询必须连接由多个服务拥有的数据。例如,查找特定区域的客户及其最近的订单需要客户和订单之间的连接。

PS。引用自每服务数据库设计模式

4

1 回答 1

0

如果您使用的是每个服务的数据库,那么跨数据库连接根据定义是一种带外操作;没有办法利用 Neo4J 跨不同数据库的加入效率。

我可以看到的另一个选择是让每个微服务使用相同的数据库后端,但如果您打算使用每服务数据库,那是不可能的。

如果您感觉特别喜欢冒险和狡猾,我想可以使用大量自定义编码添加此功能,让 Neo4J 接触其他实例以执行连接,但这仍然会比实体驻留慢得多在同一个数据库中,因为它需要通过网络进行联系。

此外,上述解决方案仍将是带外处理,并且很可能开始模糊微服务架构带来的关注点分离。这是否可以取决于您。

于 2018-04-17T14:03:12.640 回答