Transactions RDBMS和Nosql中的事务有何不同?
我试图理解NO-SQL和RDBMS模型之间的区别,我在网上的任何地方都读到,RDBMS比NOSQL更好地支持事务。根据我读到的一篇博客 在数据可靠性和执行事务的安全保证方面,SQL数据库仍然是更好的选择 根据这一点等等 删除原子性可以缩短锁定的时间表(数据集)。示例:MongoDB、CouchDB 我理解原子性的含义 假设我有一个与银行相关的交易,有一个贷记操作和一个借记操作,要么两者都会成功,要么没有人会成功Transactions RDBMS和Nosql中的事务有何不同?,transactions,rdbms,nosql,Transactions,Rdbms,Nosql,我试图理解NO-SQL和RDBMS模型之间的区别,我在网上的任何地方都读到,RDBMS比NOSQL更好地支持事务。根据我读到的一篇博客 在数据可靠性和执行事务的安全保证方面,SQL数据库仍然是更好的选择 根据这一点等等 删除原子性可以缩短锁定的时间表(数据集)。示例:MongoDB、CouchDB 我理解原子性的含义 假设我有一个与银行相关的交易,有一个贷记操作和一个借记操作,要么两者都会成功,要么没有人会成功 如果没有事务,这个特定的事务在没有sql的世界中是如何运行的?首先,NoSQL并不是
如果没有事务,这个特定的事务在没有sql的世界中是如何运行的?首先,NoSQL并不是许多人(错误地)认为的一种模型,在这一点上有4种不同的模型:键值、文档、列和图,并且每种模型都各不相同。每个不同的模型都有许多供应商,每个供应商都为数据库提供了一组不同的功能。有支持事务和ACID属性的NoSQL数据库,也有其他一些不支持事务和ACID属性的NoSQL数据库 为了回答您的问题,如果您选择一个支持事务和ACID属性的NoSQL数据库,它与SQL相同,由数据库来处理它 但另一方面,如果您选择的数据库不直接支持事务,那么责任就在于应用程序本身。 有一些被普遍接受的策略来处理这个问题,比如
希望它能有所帮助。首先,NoSQL并不是很多人(错误地)认为的一种模型,在这一点上有4种不同的模型:键值、文档、列和图形,并且每种模型都是不同的。每个不同的模型都有许多供应商,每个供应商都为数据库提供了一组不同的功能。有支持事务和ACID属性的NoSQL数据库,也有其他一些不支持事务和ACID属性的NoSQL数据库 为了回答您的问题,如果您选择一个支持事务和ACID属性的NoSQL数据库,它与SQL相同,由数据库来处理它 但另一方面,如果您选择的数据库不直接支持事务,那么责任就在于应用程序本身。 有一些被普遍接受的策略来处理这个问题,比如
希望它能有所帮助。我的猜测是,当你说NoSQL时,你指的是一个纯键值的NoSQL数据库。这不允许您自动更改两个不同键的两个值 在许多情况下,当您的每个事务通过特定的键只更改一个值时,这些数据库仍然很有用 但是,在借记一个帐户和贷记另一个帐户的情况下,您应该使用另一个SQL或NoSQL数据库,该数据库至少支持两个操作的“全部或无”
所以NoSQL意味着没有SQL,但不是没有事务。我的猜测是,当你说NoSQL时,你指的是一个纯键值的NoSQL数据库。这不允许您自动更改两个不同键的两个值 在许多情况下,当您的每个事务通过特定的键只更改一个值时,这些数据库仍然很有用 但是,在借记一个帐户和贷记另一个帐户的情况下,您应该使用另一个SQL或NoSQL数据库,该数据库至少支持两个操作的“全部或无”
因此,NoSQL意味着没有SQL,但不意味着没有事务。通常NoSQL数据存储缺少原子多键更新,只支持文档级别的事务。这意味着,如果您使用直接的方法将资金从一个帐户转移到另一个帐户,您可能会得到非常意外的结果。以下是一些可能发生的情况:
- 取款,在转账过程中出错,丢失了交易信息,因此丢失了钱
- 在同时提款操作(双重支出)的情况下,从账户中两次提取相同的资金
- 取款并成功地将钱存入目标帐户,但由于并发帐户更新(丢失更新)而丢失
通常,NoSQL数据存储缺少原子多键更新,只支持文档级别的事务。这意味着,如果您使用直接的方法将资金从一个帐户转移到另一个帐户,您可能会得到非常意外的结果。以下是一些可能发生的情况:
- 取款,在转账过程中出错,丢失了交易信息,因此丢失了钱
- 在同时提款操作(双重支出)的情况下,从账户中两次提取相同的资金
- 取款并成功地将钱存入目标帐户,但由于并发帐户upda而丢失