【问题标题】:AWS : Redshift vs traditional dbms [closed]AWS:Redshift 与传统 dbms [关闭]
【发布时间】:2018-09-21 03:07:18
【问题描述】:

在传统的 DBMS 中,当我们尝试对表执行插入操作并从同一个表中删除(只删除数据而不是表)时,我记得它会导致死锁。

当我删除数据和插入数据同时使用 Redshift 时,我可以做到这一点。

当涉及到这种类型的死锁情况时,Redshift 架构与传统 RDBMS 有何不同?

【问题讨论】:

  • Redshift 基于 PostgreSQL,请参阅:docs.aws.amazon.com/redshift/latest/dg/… 并且不知道您是如何创建死锁的,也不知道您如何在 Redshift 中重新测试,我认为问题没有答案。
  • 它和别人有什么不同?请解释更多。那么在传统的 rdmbs 中,我们可以同时执行插入表并从同一个表中删除数据,对吗?如果有错请纠正我
  • 花点时间考虑how我们可以回答。 Redshift 与 PostgreSQL(当今使用的最古老的 RDBMS 之一)一样传统,我们完全没有关于您如何创建或重新测试死锁情况的事实。
  • 我在 redshift 中没有遇到任何死锁。我要问的是在其他数据库中是否会造成死锁。
  • @Rrr 。 . .您误解了数据库和 ACID 属性。至少在某些情况下,并发插入和删除应该适用于任何数据库。

标签: sql cloud amazon-redshift teradata rdbms


【解决方案1】:

如果您尝试执行插入表并从同一张表中删除,并没有真正的原因会出现死锁。

数据库什么时候会发生死锁?

当有两个会话时会发生死锁——我们称之为 A 和 B。如果 A 在行 x 上持有锁并等待锁行 y(在提交之前),同时会话 B 在行 y 上持有锁并且等待获得第 x 行的锁定,将会出现死锁。

为什么有人会持有锁?它需要更新行 x 和行 y(或以相反的顺序)。有各种记录在案的编码实践方式,应用程序可以通过这些方式确保不会导致死锁。

如果有简单的插入和删除,就不会有死锁。即使他们在数据库中插入和删除相同的记录(如果这只是这些线程正在执行的任务)。插入将完成它的工作,然后删除将完成它的工作。

另外,请记住,如果没有事务(如果查询是自动提交的),则永远不会出现死锁。

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 2015-05-09
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多