database - 微服务 - 在无事务系统中处理幽灵记录的最佳实践

标签 database microservices nosql

我正在开发一个基于NoSQL和微服务架构的系统。

我有一个一般性的架构问题 -

假设我有三种类型的文档 - 国家/地区、城市和街道。
其中 Street 持有 CityId,City 持有 CountyId。

在国家/地区服务中,我需要开发一个 deleteCountry() 方法:

  1. 删除国家/地区。
  2. 请求城市服务删除所有按国家/地区 ID 排列的城市。
  3. 然后,城市服务会请求所有街道服务删除 cityId 的所有街道。

问题:如果在删除国家/地区后此过程失败,在无交易的世界中,我会留下一些“幽灵”文档。

  • 我可以管理编排中的故障,以便将其清理干净 在它之后,但这不是可扩展的(代码方面)解决方案。
  • 我可以使用编排模式,但它并不能真正解决问题。
  • 我可以运行定期清理过程来清理文档,但它会 难以管理,并且会留下问题仍然存在的时间漏洞。

从 NoSQL 数据库中删除幽灵记录的最佳实践是什么。
谢谢。

最佳答案

在您描述的场景中,一种解决方案可能是拥有一个可以处理流程完整性的有状态编排组件,例如 Saga in NServiceBus .

您可以通过处理 DeleteCountry 命令来启动该过程,该命令会发送 2 条消息,一条发送到国家/地区组件,另一条发送给城市组件。

两个组件都会回复“saga”,saga 将根据执行工作的组件的状态/结果来处理操作的完成或失败。

这有意义吗?

关于database - 微服务 - 在无事务系统中处理幽灵记录的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306577/

相关文章:

tomcat - Apache Tomee 7.0.2 - 微服务的 Maven 编译错误

javascript - 使用 mongodb 聚合框架计算频率

Cassandra UPDATE 在删除后不起作用

eventual-consistency - 如何在 NoSQL 中保持非规范化的一致性?

php - 用户 ID 进入数据库,而不是通过电子邮件发送

sql - Azure blob 到 Azure SQL 数据库 : Cannot bulk load because the file "xxxx.csv" could not be opened. 操作系统错误代码 5(访问被拒绝。)

php - 购物车结构问题、尺寸选择等

php - 如何简化我的数组代码

microservices - 通知微服务 API 或队列

java - 聚合根类是否仅包含公开暴露的方法