当许多线程试图更新同一表中的不同记录时,我会收到一个死锁。在使用Java的Vertica DB系统时,是否有一种方法可以获得行级锁而不是表级锁?
发布于 2021-11-10 17:05:39
不是的。
Vertica是一个专用的大数据数据库,15年前设计时就考虑到OLAP工作负载--这不利于对OLTP工作负载的支持。
行级锁是OLTP数据库的一部分。
Vertica可以提交和回滚数百万行的事务,而无需任何压力。要做到这一点,它必须惩罚对单行交易的支持。
支持这种行为的设计的一部分是它是一个只插入的数据库。删除是删除标记,稍后在后台解析;行保持不变,标记为“已删除”。在后台运行去碎片期间,被删除的行将被物理删除。
更新是删除的,后面是插入。
在事务持续期间,每个Delete事务都在受影响的表上获取并保持一个排他的“X”锁。
https://stackoverflow.com/questions/69913700
复制相似问题