情况概述: 如果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 天后被自动关闭。不再允许新回复。