参考数据中的分类法

Taxonomies In Reference Data

我有一组微服务,它们都有自己的数据库,但有时会共享参考数据。此参考数据通常是某种分类法,例如

技能列表,其中技能之间存在多个父子关系(类似图形),例如

不同的微服务将经常需要根据此分类法搜索其内部数据库,例如如果 input/search 技能是 VueX,return“相邻”实体(例如与 Vue、状态管理和前端相关)。

问题:

您可以将参考数据的主要副本保存在它们自己的微服务中,例如名为 ReferenceData 的服务。然后,您可以在需要使用它的每个系统中保留这些数据的副本。这将使这两个服务最终保持一致 https://www.keboola.com/blog/eventual-consistency

假设我们有一个名为 X 的微服务,它在关系数据库中保存了 Y 的记录。如果参考数据不经常更改并且您不需要它更新所有现有记录,您可以只让 Y 在其 table 中保存字符串值而不是 ID(这是最简单的方法)。

如果您确实需要它同步以便对参考数据的更改更新所有使用它的东西,您将需要一种机制来执行此操作。要么是一种被动机制,数据会定期从一个系统复制到另一个系统,要么是一种主动机制,在发生变化时将其推出。

对于第一个选项,您可以在 X 数据库中保留一份参考数据的副本,然后通过向 X 添加操作(例如 uploadReferenceData 和使用像 cron 这样的调度程序来处理它。

对于第二个选项,您可以使用事件驱动机制,以便在引用数据更改时 X 收到通知并更新其副本。