数据库模式免费/不像mongodb但具有酸事务支持

时间:2012-04-09 14:42:13

标签: mongodb transactions rdbms

有没有数据库架构/不像mongodb但是酸交易支持我只能在必要时才能在Web应用程序的小部分中使用?

所以,我正在构建一个Web应用程序,70%它不需要交易,但是30%是。 我的问题是,当我可以查询30%时,它还需要来自nosql数据库的数据。 我知道mongodb和其他nosql数据库牺牲了酸性事务的高性能,但我选择了mongodb因为它是简单的嵌套文件和数组进入集合和查询它,然后我可以很好地扩展。但是,因为我需要交易支持,因此30%不能正常工作。

那么有一个面向酸性事务支持的dbms文档,如果我的Web应用程序在用户的访问读写操作方面增长,我可以很好地扩展吗?

4 个答案:

答案 0 :(得分:1)

nosql数据库通常不符合酸性,但据说OrientDB是(有人在此问及:Is there any NoSQL that is ACID compliant?

...来自CraigTB的回答引用了nosql wiki(http://en.wikipedia.org/wiki/NoSQL):

  

NoSQL是一个促进松散定义的类的运动   非关系数据存储打破了很长的历史   关系数据库和ACID保证。

还有:

  

该名称试图描述越来越多的人的出现   通常没有尝试的非关系型分布式数据存储   提供ACID保证。

  

NoSQL系统通常提供弱一致性保证,例如   最终的一致性和事务仅限于单个数据项,   即使可以通过添加一个来强加完整的ACID保证   补充中间件层。

另外,不要觉得你必须强制整个应用程序成为nosql,facebook一次性使用一小撮不同的数据库类型。例如,他们使用sql作为时间轴功能,并将nosql用于其他许多功能

答案 1 :(得分:0)

支持针对nosql数据库的多文档事务的唯一方法是管理应用程序中的事务。这不是一项无关紧要的任务,尤其是对于分布式数据库。关于像Mongo这样的基于doc的数据库的好处在于它可以通过对doc中的数据进行分组(例如客户文档中的订单中的订单项)来帮助减轻对事务的需求,因为它主要用于单个文档操作的ACID。 p>

如果您想管理部分数据的交易,请查看Gigaspaces。它可能成本高昂,并不是最简单的实现,但它可能适合您的需求。它完全支持内存中数据的XA事务,然后异步写入数据存储区。基本上,您针对要获得事务完整性的表以及您直接访问数据库的所有其他表,对Gigaspaces XAP产品进行操作。他们甚至有一篇关于将它与Cassandra一起使用的文章,可以很容易地应用于Mongo - http://blog.gigaspaces.com/cassandra-on-acid/。不是理想的解决方案,但它确实为您提供了非事务性数据库的事务选项。

答案 2 :(得分:0)

我只是简单地回答这个问题。

正如其他人所说,MongoDB并不完全符合ACID标准,并且无论多少NoSQL数据库与NoSQL数据库有关,实际上都会破坏ACID合规性,NoSQL的性质确实打破了ACID。

写入内存的任何事务都不符合ACID,因为内存是临时存储,因此您无法保证它已写入磁盘并在网络中复制,这会立即中断ACID以进行持久写入。我不确定Gigaspaces是如何做到的,但这听起来像我个人不会看到的。

要成为ACID,您必须先写入磁盘(也可能是网络中的两个节点?)然后数据库必须写回到临时存储,而不是相反。

现在,Mongo确实提供了写入磁盘甚至多个节点的安全性。在PHP中,它提供了safefsync选项,您可以使用该选项来指示在函数(insertsave,{{1}之前应该写入的节点数。 })返回true或false。因此,您可以在应用中获得写作关注。您也可以将实际的副本和分片设置为完全一致,本质上它们不是,但您可以。不仅如此,MongoDB还有日记功能。实际上,甚至写入内存写入都是“不耐用”100ms(严重的是你将在100ms内丢失多少数据?我敢打赌你的应用程序不如现实中那么持久)。

在进行交易和两阶段提交时遇到困难。大多数人通过使用要插入的文档的哈希值和/或版本号来找到克服这些问题的方法。我只是快速谷歌搜索Java框架,我知道它确实支持ACID事务和两阶段提交,但我找不到问题。如果你在用户组中搜索一些他们在那里,并且在用户组中有完整的解释(我知道这是因为我参与了一些)如何基于哈希和版本号在MongoDB中实现回滚。但是,我应该警告你,就像在SQL中一样,事务处于极其缓慢的状态,并且违背了MongoDB的基本原理。

所以现在你知道如何开始依赖Mongo,甚至在你的应用程序中有一个缓慢的事务处理程序,因为你需要对许多文档进行持久写入而需要相互依赖。

  

那么有一个面向酸性事务支持的dbms文档,如果我的Web应用程序在用户的访问读写操作方面增长,我可以很好地扩展吗?

这取决于你对缩放的看法有多远,我认为这里的任何人都不能给出严肃的答案。

至于其他数据库的Fbs使用情况。在写完一小时后,我在墙上丢了大约5个墙贴。我联系了Fb,并要求他们提供一个令人讨厌的解释。他们说即使墙上的帖子写入临时存储,也无法同步到永久存储。因此,所有这些谈论Fb完全符合ACID只是谈话,而Kristian说他们使用许多数据库,包括NoSQL。

我希望这有点帮助,

答案 3 :(得分:0)

ArangoDB。

声明拥有跨集合ACID事务,JOINS,文档存储,图形存储。但是交易应该是“一件”的。

因此,您无法在事务期间使用隔离来处理业务逻辑,并且仍需要手动获取锁定机制。将redis或zookeeper用于悲观锁定应该不是问题。

相关问题