首页 文章

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

提问于
浏览
0

是否有一个数据库模式免费/不像mongodb但酸交易支持,我只能在必要时在Web应用程序的小部分使用?

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

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

4 回答

  • 1

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

    正如其他人所说,MongoDB并不完全符合ACID标准,并且无论多少NoSQL数据库有时会破坏ACID合规性,无论有多少营销来自NoSQL,NoSQL的性质确实打破了ACID .

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

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

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

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

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

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

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

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

    希望这会有帮助,

  • 0

    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来实现其他许多功能

  • 0

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

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

  • 0

    ArangoDB .

    声称有交叉收集ACID交易,JOINS,文档存储,图形存储 . 但是交易应该是“一件”的 .

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

相关问题