事务设计问题

情况概述: 如果lua线程作为业务线程,n个线程作为sql客户端线程,lua使用协程实现业务并发。
问题描述: 事务设计时如何保证begin和commit或rollback之间的sql逻辑不被其他业务sql干扰?

采用悲观事务就好了,数据被锁住了,其他的只能读,不能变更,等到事务提交(或者释放),其他的 SQL才能变更数据。

你不会想让这几个lua线程公用一个数据库session吧?

你只要保证每个lua线程用的是不同的seesion就不会相互干扰。一般你只要从连接池里面取session,基本不会有相互干扰的问题。这应该是连接池解决的问题。

线程锁是不是可以解决问题

可以,学习一下

其实是一个lua线程和多个sql线程池,如果事务执行在sql线程A,那么怎么保证在线程A执行的其他sql业务不影响事务。

我的理解是在事务执行的过程中,其他在该sql线程执行的sql业务直接阻塞执行,只有事务commit或者rollback后该线程才会执行其他业务的sql。是不是这个意思?

每个sql线程维护一个sql客户端的,同一个事务的所有逻辑只会在一个sql线程执行。

和数据有关系,数据加锁了,其他的事务就没办法改变这个数据…只能读…

这样子解释,应该可以理解吧

我明白你的意思,只是lua线程是用协程并发,同一个sql线程的begin到commit或rollback期间,可能会有其他业务sql在该sql线程执行的。

这个没啥关系了,即使是 线程池也是共享资源的,减少创建和销毁成本,比较正常

重启一下

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。