我正在尝试使用 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。
从技术上讲,您可以在应用程序中手动管理事务生命周期并实现跨 Web 请求的事务,但这 1)会非常尴尬,2)您将失去驱动程序在 withTransaction API 中为您执行的各种瞬态错误处理.
要执行此操作:
可能更容易分叉和修补驱动程序,但这显然会因您的代码库与官方驱动程序代码库不同而导致其他问题。