NoSQL的用例

时间:2010-05-20 15:46:39

标签: sql mongodb couchdb relational-database nosql

NoSQL最近在我们的行业中受到了很多关注。我真正感兴趣的是关于人们对关系数据库存储使用的最佳用例的看法。什么应该引发开发人员认为特定数据集更适合NoSQL解决方案。我对MongoDBCouchDB特别感兴趣,因为它们似乎在PHP开发方面得到了最多的报道,这是我的重点。

9 个答案:

答案 0 :(得分:85)

请承诺,您永远不会尝试将关系数据模型映射到像MongoDB或CouchDB这样的NoSQL数据库......这是开发人员在评估新兴技术时最常犯的错误。

这种做法类似于驾驶汽车并试图用它像马一样把你的推车拉到马路上。

由于每个人的经验当然是一种自然的反应,但使用文档数据库的真正价值在于能够简化您的数据模型并最大限度地减少您作为开发人员的痛苦。您的代码库将缩小,您的错误将更少,更容易找到,性能将变得非常棒,并且缩放将更加简单。

作为Joomla创始人,我有偏见:-)但是来自CMS领域,像MongoDB这样的东西是一个灵丹妙药,因为内容非常自然地映射到文档系统。

MongoDB的另一个很好的例子是实时分析,因为MongoDB具有非常强大的性能和扩展性,特别是在并发性方面。 MongoDB.org网站上有一些案例研究证明了这些属性。

我同意每个数据库都有自己的目标和用例的观点;以相应的方式对每个数据库进行评估。

答案 1 :(得分:49)

MongoDB网站上提到了MongoDB的一些很好的用例。给出的示例是实时分析,记录和全文搜索。这些文章非常值得阅读http://www.mongodb.com/use-cases

还有一篇很好的文章,NoSQL数据库最适合哪种类型的项目:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

答案 2 :(得分:15)

我建议Rick Cattell撰写关于杂项数据存储(a.k.a. NoSQL)的文章,他们的差异以及他们的一些用例:http://www.cattell.net/datastores/index.html

答案 3 :(得分:8)

我喜欢NoSQL与性能无关,与可用性无关。当原子数据单元类似于文档时,文档存储更容易使用,因为在对象之间进行序列化很容易。这更有趣,这是个人或侧面项目的重要因素。

答案 4 :(得分:8)

我一直在使用NoSQL DB一段时间了,这是我对这个主题的贡献:

NoSQL数据库的很好的用例统计信息和/或报告生成的应用程序, 特别是当数据来自第三方来源时。

在类似情况下,NoSQL数据库可以是很棒的选择

我们考虑一下,例如, MongoDB

MongoDB 中使用JSON(可能来自第三方API,或者从sql-application导出)获取数据后,非常可以轻松导入 并在数据库中更新 JSON 数据;例如,使用命令行mongoimport实用程序

此时使用过滤和分组非常简单地构建动态查询,非常适合这种应用程序。

例如,使用Aggregation Framework

$pipeline = [];

//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ]  ]  ];

//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
    $pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];    

//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];

return $collection->aggretate( $pipeline );

我想指出 easyiness ,我们可以使用php数据结构 dinamically添加/删除过滤器并避免单调乏味 字符串连接以构建我们的查询。使用这种方法,添加/删除过滤器dinamycally就像添加/删除一样简单 数组中的元素

另一个很大的好处来自于这样的解决方案可能比使用关系数据库 更快, 我们必须使用不同的表进行连接以获取我们需要的所有数据

此外,这个用例是最佳的,因为避免了NoSQL数据库的所有主要限制

  • 缺少交易:应用程序不执行写入但只执行读取,因此我们根本不需要事务

  • 表之间缺少连接:我们不需要连接,因为我们可以使用冗余来存储非规范化数据在收藏中。 由于我们只读取数据,因此我们不必担心在更新之间同步非规范化数据。

通过这种方式,我们可以专注于以非常适合我们查询的方式使用冗余存储数据 ,这将专注于单个集合。

我只是写这篇文章是因为如果我以前读过类似的内容,那我可以节省一些时间进行研究

希望它对某人有用

答案 5 :(得分:3)

我强烈推荐Martin Fowler的演讲:

https://www.youtube.com/watch?v=qI_g07C_Q5I

<强>摘要: Martin快速介绍了NoSQL数据库:它们来自哪里,它们使用的数据模型的性质,以及您考虑一致性的不同方式。由此他概述了你应该考虑使用它们的情况,为什么它们不会使关系数据库过时,以及多语言持久性的重要结果。

它描绘了NoSQL是什么,不同类别以及来自关系数据库世界时每个人都必须理解的事物。 问候。

答案 6 :(得分:3)

  

首先,您必须了解CAP(一致性,可用性和分区,您必须从中获取三个)理论和我们的业务用例。 MongoDB满足一致性和分区&amp; Couch DB满足了可用性和安全性。分区。

关于NoSQL的关于NoSQL的Edureka视频是一些最好的视频教程。

https://www.youtube.com/watch?v=gJFG04Sy6NY

https://www.youtube.com/watch?v=KSq6tMMXZ8s

https://www.youtube.com/watch?v=3z1KFA2qcSo

slideshare.net提供了很好的演示文稿

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3(此演示文稿支持youtube中的视频教程)

答案 7 :(得分:1)

对于您需要的一些用例,尤其是对于分析查询,您可以使用Postgres中的this wrapper在MongoDB上运行SQL查询。

答案 8 :(得分:1)

因为现在市场上的NoSQL数据库比以往任何时候都多,所以如果您正在寻找一个基于支持,可扩展性的企业应用程序的数据库,我建议您查看Gartner Magic Quadrant。管理和成本。

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

我想向尚未尝试过的人推荐Couchbase,但不是基于报告中显示的版本(2.5.1),因为它在CB服务器今天已接近2次修订,接近发布2015年下半年4.0。

http://www.couchbase.com/coming-in-couchbase-server-4-0

关于Couchbase作为供应商/产品的另一部分是它是一种多用途类型的DB。它可以充当纯K / V存储,面向文档的数据库,具有多维扩展,Memcached,缓存和持久性,并支持ANSI 92兼容的SQL自动连接,只需按一下按钮即可复制到DR集群,以及甚至还有一个内置于生态系统中的移动组件。

如果没有别的,值得查看最新的基准测试:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html