我们现在压倒性的有很多NoSQL选项和NoSQL。 考虑到大多数创业公司/项目可以与传统的RDBMS进行相当好的处理,放弃/忽略RDBMS并采用“盲目”NoSQL是时髦的。
让我们从NoSQL定义开始:
NoSQL定义:下一代数据库主要解决一些问题:非关系型,分布式,开源和水平可扩展。 (+无架构(实际上是隐式架构,比显式更差)和最终一致性。
NoSQL(至少处理大数据的概念)是由谷歌(BigTable),亚马逊(Dynamo),Twitter和Facebook等公司创建的。 Cassandra和Riak从那里出生。似乎只有MongoDB是自己开发的,不会影响Google和亚马逊发布的论文。
但是,大多数公司并没有达到如此规模。而且RDBMS可能非常合适。我无法找到MySQL或PostgreSQL能够以合理的性能处理的确切数据量(至少PostgreSQL表示有32TB DB可用PostgreSQL FAQ)。我们仍然可以使用RDBMS进行扩展。我们可以很容易地进行分片(在应用程序级别)(尽管分片重新平衡更具挑战性,也许可能是一个问题)。我们甚至可以进行复制并按比例缩放“读取”(考虑到我们只写“master”)。但在这种情况下,我们必须处理分布式挑战:复制延迟和最终一致性。我们可以仅针对数据集(例如,几个表)执行此操作,其中复制延迟不是问题/大问题。
为了获得更好的性能,可以引入缓存(redis或memcached)。
如果可能的话,你应该提前计划你的查询,以便从RDBMS获得最佳性能,并在它之上构建你的API,而不是相反。
当然,在NoSQL世界中没有替代ACID,当你需要它时,使用RDBMS要比在NoSQL之上发明ACID简单得多(这是由于CAP定理,是不可能)。 Braintree对PostgreSQL使用和扩展的精彩总结:Scaling PostgreSQL
RDBMS的另一个用例通常是将“实时”表拆分为报表,这些表可以有不同的(更扁平的结构)执行更高性能的查询,或者您可以创建一个单独的表/视图,用于快速读取(但同意,这增加了更多的复杂性,但至少有选项。
那么,NoSQL支持RDBMS的用例是什么?当NoSQL更适合解决问题时,RDBMS的限制是什么?在选择NoSQL之前,系统架构师应该问什么问题。
我确实相信简单(虽然简单并不容易),NoSQL并不简单,因为它可能听起来(没有免费的午餐)(另外考虑到开发人员已经拥有RDBMS专业知识的悠久历史,而且他们更多一般的成熟产品,你将拥有自己的NoSQL分布式挑战,更不用说正确配置和监控集群的更多操作工作。
答案 0 :(得分:0)
很难回答这个问题,因为NoSQL与RDBMS相反,没有任何意义 - 使用NoSQL并不意味着什么,而不说你将使用什么产品。想象一下你必须开发你的SVN的NoSQL实现并选择Cassandra - 现在你必须实现自己的文件版本控制,在每次提交中处理过去可能存在的事实,一个(可能很多)列(s) )保存文件的先前版本,并且您应该能够轻松地显示文件历史记录。经过一段时间检查NoSQL的世界,你会发现HBase,这是类似的"到Cassandra,但它提供免费的列版本。 d'!哦
首先,必须根据具体的应用需求选择 NoSQL产品。不要用螺丝刀推钉子。
以下是个人意见,基于我选择的 Cassandra ,可以整合到一个非常高流量的网站,评估公司和其他内容的可能性。
我处理用户对公司的评论,因此一致性不是真正的问题。如果评论在发表后立即不可见,则没有人会抱怨。由于假读,我没有超量预订航班。相反,由于网站有数百万的访问查询应该执行速度非常快
评论和用户一旦集成,就会出现在网站的任何页面中,从主页到公司的详细页面。由于数据库问题,我无法打倒整个网站。我不为Datastax工作,所以信不信由你,在4年多的时间里,我们没有任何下降(触摸木材) - 选择产品是因为它发现了&#34 ;没有一点失败" (幸运的是,这是真的!)
O(1)
'复杂'查询) 在开始建模数据之前,我已经知道了我必须要做的确切查询。
- 所以像
SELECT * FROM comments where city='ROME' and vote=3 and userid='abc' ORDER BY timestamp DESC LIMIT 100
执行速度非常快,因为存储数据只是为了查询特定查询(这就是为什么在NoSQL世界中你经常会听到1个表= 1个查询)
干杯, 卡罗