数据库负责文件元信息的增删改查, minio 负责存储.
最好有现成的案例或者框架, 我想吃个现成的.
真诚感谢!

数据库负责文件元信息的增删改查, minio 负责存储.
最好有现成的案例或者框架, 我想吃个现成的.
真诚感谢!
1 yangtianming Sep 6, 2024 对文件唯一路径加锁,修改期间不允许其他线程修改 |
2 AEnjoyable Sep 6, 2024 我们是把整个函数视为事务先更新数据库 如果 minio 失败了就往 mysql txn 报错,这样就自动回滚事务了 伪代码: txn=dbClient.Begin() defer HandleErrorCh(errorChan). ErrorWillDo( txn.Rollback() }). SuccessWillDo( _ = txn.Commit() }).Do() err=txn.update(xxxx) if err!=nil{ txn.report(err) } err=minio.uploadfile(xxx,yyy) if err!=nil{ txn.report(err) } |
3 timethinker Sep 6, 2024 理论上无法保证强一致性。不过最终一致性本身就是靠异步重试+幂等补偿来实现的,这意味着每个业务都可能不一样,通用的方案也只是为你做了一些比较底层的事情。 |
4 ampedee Sep 6, 2024 via iPhone 看看 juicefs? |
5 afeiche Sep 6, 2024 分布式事务,应该是有现成方案的 |
6 wxf666 Sep 6, 2024 @AEnjoyable #2 如果执行完 minio.uploadfile(xxx,yyy),就突然崩了,数据是不是就不一致了 |
7 chaleaochexist OP @timethinker 异步重试+幂等补偿 rabitmq+死信队列+saga? |
8 securityCoding Sep 7, 2024 via Android 保证不了,正常写就好 |
9 AEnjoyable Sep 7, 2024 via Android @wxf666 如果你后面没有步骤了,执行完这一步就相当于事务提交更改了。 如果是 minio 返回成功后蹦的,那没话可说,但这种情况应该非常少,没法保证 |
10 noparking188 Sep 7, 2024 |
11 knives Sep 7, 2024 不了解具体的业务场景。只谈最终一致的话,可以考虑反过来,只操作 Minio ,用 Minio 的事件通知机制调用 webhook 、消息队列、whatever ,最终写入 MySQL 。 |
12 julyclyde Sep 7, 2024 分布式事务协调 |