MongoDB 个跨越多个 Web 请求的事务
MongoDB transactions spanning multiple web requests
我正在尝试使用 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 Driver
实现这一点
我错过了什么吗?
是否有解决方法或任何自定义实现可以帮助我?
提前致谢
更简单的解决方案是在您的应用程序中存储(缓冲)操作,并在提交端点运行时将它们一起提交给 MongoDB。
从技术上讲,您可以在您的应用程序中手动管理事务生命周期并实现跨 Web 请求的事务,但这是 1) 会很尴尬,并且 2) 您将失去驱动程序为您做的各种瞬态错误处理在 withTransaction API.
为此:
- 熟悉 sessions specification
- 熟悉 transactions specification
- 阅读 convenient tx api spec 以便您知道 不会 免费获得什么,如果您的客户问您为什么要显示驱动程序不显示的错误
- 查看实现这些规范的驱动程序中的代码
- 根据您在应用程序中的要求实施足够的会话和事务管理
分叉和修补驱动程序可能更容易,但这显然还有其他问题,因为您的代码库与官方驱动程序代码库不同。
我正在尝试使用 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 Driver
实现这一点我错过了什么吗? 是否有解决方法或任何自定义实现可以帮助我?
提前致谢
更简单的解决方案是在您的应用程序中存储(缓冲)操作,并在提交端点运行时将它们一起提交给 MongoDB。
从技术上讲,您可以在您的应用程序中手动管理事务生命周期并实现跨 Web 请求的事务,但这是 1) 会很尴尬,并且 2) 您将失去驱动程序为您做的各种瞬态错误处理在 withTransaction API.
为此:
- 熟悉 sessions specification
- 熟悉 transactions specification
- 阅读 convenient tx api spec 以便您知道 不会 免费获得什么,如果您的客户问您为什么要显示驱动程序不显示的错误
- 查看实现这些规范的驱动程序中的代码
- 根据您在应用程序中的要求实施足够的会话和事务管理
分叉和修补驱动程序可能更容易,但这显然还有其他问题,因为您的代码库与官方驱动程序代码库不同。