NoSQL的用例
NoSQL近来在业界引起了很多关注。 我真的很感兴趣的是人们对于关系数据库存储的最佳使用案例。 什么应该引发开发人员认为特定的数据集更适合于NoSQL解决scheme。 我对MongoDB和CouchDB特别感兴趣,因为他们似乎获得了有关PHP开发的最多报道,这是我的焦点。
只要承诺自己永远不会尝试将关系数据模型映射到像MongoDB或CouchDB这样的NoSQL数据库……这是开发人员在评估新兴技术时最常犯的错误。
这种方法类似于采取一辆汽车,并试图用它像马一样把你的车拉下马路。
由于每个人的经验,这是一个自然的反应,但使用文档数据库的真正价值是能够简化您的数据模型,并尽量减less作为开发人员的痛苦。 你的代码库将缩小,你的bug会更less,更容易find,性能会变得很棒,而且规模也会变得更简单。
作为一个Joomla的创始人,我偏向于:-),但是来自CMS的空间,像MongoDB这样的东西是一个silverlight的子弹,因为内容很自然地映射到文档系统。
MongoDB的另一个好例子是实时分析,因为MongoDB在并发性方面有着非常强大的性能和规模。 在MongoDB.org网站上有个案例研究来展示这些属性。
我同意每个数据库都有自己的目的和用例的概念, 以相应的数据库为目的进行评估。
在MongoDB网站上提到了MongoDB的一些很好的用例。 给出的例子是实时分析,logging和全文search。 这些文章都值得一读http://www.mongodb.com/use-cases
NoSQL数据库最适合哪种types的项目也有很好的说明: http : //kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
我build议这篇由Rick Cattell撰写的关于杂项数据存储(又名NoSQL)的文章,它们的区别以及它们的一些用例: http : //www.cattell.net/datastores/index.html
在TekPub上使用NoSQL很好的写法
我喜欢的NoSQL与性能无关,与可用性无关。 当您的primefaces数据单元是类似文档的文档时,文档存储更容易处理,因为与对象序列化是微不足道的。 这只是更有趣,这是个人或侧面项目的重要因素。
我一直在使用NoSQL DB一段时间,这是我对这个主题的贡献:
NoSQL数据库的一个很好的用例就是用于统计和/或报告生成的应用程序,特别是当从第三方来源提供数据时。
在这样的情况下,NoSQL数据库可能是一个不错的select
让我们考虑一下,例如, MongoDB :
一旦在JSON中有数据(可能来自第三方API,或者从sql应用程序导出),那么在MongoDB中非常容易导入和更新数据库中的JSON 数据 ; 例如使用命令行mongoimport
实用程序
此时用过滤和分组构builddynamic查询非常简单 ,非常适合这种应用程序。
例如,使用聚合框架 :
$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 );
我想指出一点,我们可以通过使用php数据结构来增加/删除filter ,避免繁琐的string连接来build立我们的查询。 使用这种方法,添加/删除filter就像添加/删除arrays中的元素一样简单
另一个很大的好处来自这样一个事实,像这样的解决scheme可能比使用关系数据库 更快 ,我们必须使用不同的表来连接,以获得我们需要的所有数据
另外,这个用例是最优的,因为避免了NoSQL数据库的所有主要限制 :
-
缺乏交易:应用程序不执行写入,但只能读取,所以我们根本不需要交易
-
缺less表之间的连接:我们不需要连接,因为我们可以使用冗余来将非规范化的数据存储在集合中。 由于我们只读取数据,所以我们不必担心同步更新之间的非规格化数据。
通过这种方式,我们可以专注于以一种非常适合我们查询的方式 存储冗余数据 ,这将集中在单个集合上。
我只是写这个,因为前几次我读过这样的东西,这会节省我一些时间去研究
希望对某人有用
我强烈推荐Martin Fowler的这个演讲:
https://www.youtube.com/watch?v=qI_g07C_Q5I
摘要: Martin给出了NoSQL数据库的快速介绍:他们来自哪里,他们使用的数据模型的性质,以及您需要考虑一致性的不同方式。 从这里,他概述了您应该考虑使用什么样的环境,为什么他们不会使关系数据库过时,以及多边形持久性的重要后果。
它从关系数据库的世界中了解了NoSQL是什么,不同的类别以及每个人都需要了解的东西。 问候。
首先,您必须了解CAP(一致性,可用性和分区,您必须提取三个中的两个)理论和我们的业务用例。 MongoDB满足一致性和分区&Couch DB满足可用性和分区。
youtube上关于NoSQL的Edurekavideo是一些最好的video教程。
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/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 (此演示文稿支持YouTube中的video教程)
对于你需要的一些用例,尤其是对于分析查询,你可以使用Postgres的这个包装器在MongoDB上运行SQL查询。
因为现在市场上的NoSQL数据库比以前更多了,所以我build议看一下Gartner魔力象限,如果你正在寻找一个数据库,这对于基于支持,可扩展性和pipe理的企业应用程序来说也是非常好的。成本。
http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb
我想build议Couchbase给那些还没有尝试过的人,但不是基于报告(2.5.1)中显示的版本,因为在今天的CB服务器上有将近2次修订,接近2H15的4.0版本。
http://www.couchbase.com/coming-in-couchbase-server-4-0
关于Couchbase作为供应商/产品的另一部分是它是一种多用途types的数据库。 它可以作为一个纯粹的K / V存储,具有多维扩展的面向文档的数据库,Memcached,带有持久性的caching,并支持符合ANSI 92的自动连接的SQL,按下button复制到DR群集,甚至还有一个内置于生态系统的移动组件。
如果没有别的,值得看看最新的基准:
http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html