Transactions NoSQL中的事务?
我正在研究NoSQL以扩展数据库的替代方案。如果我想要基于事务的东西对这类东西敏感,我该怎么办?取决于您的数据库,但是。。。我通常会说,您可以使用来实现这一点,但我认为应该确保了解数据库实现的保证(例如,什么样的写和读操作是原子的)Transactions NoSQL中的事务?,transactions,nosql,Transactions,Nosql,我正在研究NoSQL以扩展数据库的替代方案。如果我想要基于事务的东西对这类东西敏感,我该怎么办?取决于您的数据库,但是。。。我通常会说,您可以使用来实现这一点,但我认为应该确保了解数据库实现的保证(例如,什么样的写和读操作是原子的) 如果有什么帮助的话,似乎有关于事务的问题。一般来说,NoSQL解决方案比关系数据库具有更轻的事务语义,但在某种程度上仍然具有原子操作的功能 一般来说,主复制提供的一致性更少,可用性更高。因此,我们应该为正确的问题选择正确的工具 许多提供单文档(或行等)级别的事务。例
如果有什么帮助的话,似乎有关于事务的问题。一般来说,NoSQL解决方案比关系数据库具有更轻的事务语义,但在某种程度上仍然具有原子操作的功能 一般来说,主复制提供的一致性更少,可用性更高。因此,我们应该为正确的问题选择正确的工具
许多提供单文档(或行等)级别的事务。例如,在MongoDB中,单个文档具有原子性,但文档可能相当丰富,因此通常工作得很好。更多信息。您可以在SQL DB中始终使用NoSQL方法。NoSQL似乎通常使用“键/值数据存储”:您始终可以在首选RDBMS中实现这一点,从而保留事务、ACID属性、友好DBA的支持等好东西,同时实现NoSQL的性能和灵活性优势,例如通过
CREATE TABLE MY_KEY_VALUE_DATA
(
id_content INTEGER PRIMARY KEY,
b_content BLOB
);
额外的好处是,您可以在这里添加额外的字段,将内容链接到其他适当的关系表中,同时仍将大量内容保留在主BLOB(或文本,如果是apt)字段中
就我个人而言,我倾向于使用文本表示,这样您就不必拘泥于处理数据的语言,例如,使用序列化Java意味着您可以从Perl访问内容以进行报告。文本也更容易调试,通常作为开发人员使用。这是我找到的最接近任何NoSQL数据库的答案。Heroku.com的Adam Wiggins在2007年的一篇博文中写道: 使用数据库事务将资金从一个银行帐户转移到另一个帐户的旧示例是total bull。正确的解决方案是存储分类账事件列表(账户之间的转账)并将当前余额显示为分类账的总和。如果您是用函数式语言编程(或者这样思考),这是显而易见的 发件人:(他的网站非常适合提供可扩展性方面的想法。) 我将上述段落解释为:
免责声明:我还没有以任何方式实现这一点。我读这些东西是出于好奇,尽管我对它们没有实际需要。是的,@gbn是正确的,带有事务的RDBMS可能足以满足Timmy和我的需要。尽管如此,通过开源工具和一个名为“.”的how-to网站,看看NoSQL数据库能走多远将是一件很有趣的事情。只是想在这个线程上对货币交易建议发表评论。交易是你真正想用于资金转移的东西 举的例子是如何做的转让是非常好和整洁 但在现实生活中,转账可能包括向其他账户支付费用或款项。人们使用来自另一个帐户的某些卡可以获得奖金,或者他们可以从他们的帐户中获得费用,并将其转移到同一系统中的另一个帐户。费用或付款可能因金融交易而异,您可能需要保持簿记系统,以显示每笔交易的贷方和借方 这意味着您要同时更新多行,因为一个帐户上的贷方可以是一个或多个帐户上的借方。首先锁定行,以便在更新之前不能更改任何内容,然后确保写入的数据与事务一致 这就是为什么您真正想要使用事务。如果写入一行时出现任何错误,您可以回滚所有更新,而不会导致财务事务数据不一致 一次交易和两次操作(例如一次支付5000美元,第二次接收5000美元)的问题在于,您有两个具有相同优先级的帐户。您不能使用一个帐户来确认第二个帐户(或按相反顺序)。在这种情况下,您可以保证只有一个帐户是正确的(即已确认),第二个帐户(即已确认)可能已失败。让我们看看它失败的原因(使用消息aproach,发送方由接收方确认):