跨越多个 Web 请求的 MongoDB 事务

问题描述 投票:0回答:1

我正在尝试使用 Go 通过 HTTP 实现 MongoDB 事务 API 服务 客户端将请求发送到:

/db/transaction/begin
获取交易ID 为了将所有后续与事务相关的 CRUD 操作 API 请求与该事务 ID 绑定 最后客户端发送请求到
/db/transaction/{transaction_id}/commit
/db/transaction/{transaction_id}/rollback
(有点类似于 Firestore Transaction)

我能够使用 ArangoDB 实现这种行为,因为它的 Go Driver 允许我设置每个 CRUD 操作的事务 ID (https://godoc.org/github.com/arangodb/go-driver#WithTransactionID

但不幸的是我无法使用官方 MongoDB Go 驱动程序实现这一点

我错过了什么吗? 是否有解决方法或任何自定义实现可以帮助我?

mongodb go transactions
1个回答
1
投票

更简单的解决方案是将操作存储(缓冲)在应用程序中,并在提交端点运行时将它们全部提交到 MongoDB。

从技术上讲,您可以在应用程序中手动管理事务生命周期并实现跨 Web 请求的事务,但这 1)会非常尴尬,2)您将失去驱动程序在 withTransaction API 中为您执行的各种瞬态错误处理.

要执行此操作:

  • 熟悉会话规范
  • 熟悉交易规范
  • 阅读方便的 tx api 规范,以便您知道您不会免费获得什么,如果您的客户问为什么您会暴露驱动程序不会暴露的错误
  • 查看驱动程序中实现这些规范的代码
  • 根据您的应用程序要求实施足够的会话和事务管理

可能更容易分叉和修补驱动程序,但这显然会因您的代码库与官方驱动程序代码库不同而导致其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.