我有一个表A,它维护表B中的总用户数.我只关心表A中的计数与表B中的用户数同步.
因此,每当我在表B中插入用户时,我希望根据用户插入或删除来递增/递减计数.
有两种方法: –
a)如果我在表B中插入行,我可以在一个存储过程中在表A上发出更新计数.这导致两个命令插入后跟更新.因此说需要2秒. (假设每秒txn在1秒内)
b)我可以在存储过程中编写insert命令.此外,定义一个触发器,在表A中的插入完成后更新表A中的计数.对我来说,这只需要1秒的时间,这只是在表B中插入行.我假设更新表B中的计数的’after insert trigger’在后台发生,因此是异步或非阻塞的.
这种推定是正确的还是两种方法都需要相同的时间.
注意:我不关心表A中更新计数的时间.因此,我正在寻找一种在非阻塞模式下执行同步作业的方法,就像在队列中一样!
任何建议/意见?
解决方法:
不,触发器以与存储过程相同的方式绝对同步执行.这意味着如果您开始执行更新触发器中的计数等操作,则可以使用autocommit执行简单查询,在事务中执行大量工作,因此很可能会死锁.你应该知道这一点.
如果你不希望它同步,我想你可以让它插入一个挂起的更改表,然后有一个异步进程来更新它.从长远来看,这可能会避免很多死锁(插入没有二级索引的表不能与另一个插入到同一个表中的死锁,AFAIK)