0

是否有像 mongodb 这样的无数据库模式/更少但只有在需要时才能在 Web 应用程序的一小部分中使用的酸性事务支持?

所以,我正在构建一个 Web 应用程序,70% 它不需要事务,但 30% 是的。我的问题是,当我可以查询这 30% 时,它还需要来自 nosql 数据库的数据。我知道mongodb和其他nosql数据库为了高性能牺牲了酸性事务,但是我选择了mongodb,因为它是简单的将文档和数组嵌套到集合中并查询它,然后我可以很好地扩展。但是对于那 30% 效果不好,因为我需要事务支持。

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

4

4 回答 4

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 用于许多其他功能

于 2012-04-09T14:45:23.620 回答
0

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

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

于 2012-08-18T22:48:10.830 回答
0

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

正如其他人所说的那样,MongoDB 并不完全符合 ACID,实际上有时与大多数 NoSQL DB 一样会破坏 ACID 合规性,无论从他们嘴里冒出多少营销,NoSQL 的本质确实会破坏 ACID。

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

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

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

当进行事务和两阶段提交时,困难的部分就来了。大多数人通过使用要插入的文档的哈希值和/或版本号来找到克服这些问题的方法。我刚刚在 Google 上快速搜索了一个我知道支持 ACID 事务和两阶段提交的 Java 框架,但我在找到它时遇到了问题。如果您在用户组中搜索一些用户组,并且用户组中有完整的解释(我知道这一点,因为我参与了一些)关于如何根据哈希和版本号在 MongoDB 中实现回滚。然而,我应该警告你,就像在 SQL 中一样,事务非常缓慢,并且有点违背 MongoDB 的基本原理。

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

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

这取决于您对扩展的关注程度,我认为这里没有人可以对此给出认真的答案。

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

希望这会有帮助,

于 2012-08-19T10:10:01.687 回答
0

阿兰戈数据库。

声称拥有交叉集合 ACID 事务、JOINS、文档存储、图形存储。但是交易应该“一件”发送。

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

于 2016-01-26T19:00:10.377 回答