NoSQL 最近在我们的行业中得到了很多关注。我真正感兴趣的是人们对于最佳用例的想法——它的使用超过了关系数据库存储。什么应该触发开发人员认为特定的数据集更适合 NoSQL 解决方案。我对 MongoDB和 CouchDB特别感兴趣,因为它们似乎在 PHP 开发方面得到了最多的报道,这也是我的重点。
我喜欢 NoSQL 的原因与性能无关,而是与可用性有关。当原子数据单元类似于文档时,文档存储更容易使用,因为在对象之间序列化是很简单的。这只是更有趣,这是一个重要的因素,为个人或业余项目。
我建议 Rick Cattell 撰写这篇关于各种数据存储(又名 NoSQL)、它们之间的差异以及它们的一些用例的文章: http://www.cattell.net/datastores/index.html
只要向自己保证,永远不要试图将关系数据模型映射到 MongoDB 或 CouchDB 这样的 NoSQL 数据库... ... 这是开发人员在评估新兴技术时最常犯的错误。
这种方法类似于开一辆车,并试图使用它来拉你的购物车像马一样沿着道路前进。
当然,由于每个人的经验,这是一种自然的反应,但是使用文档数据库的真正价值在于能够简化数据模型,并将开发人员的痛苦降到最低。你的代码库将会缩小,你的 bug 将会减少并且更容易被发现,性能将会变得非常棒,规模将会变得非常简单。
作为一个 Joomla 的创始人,我有偏见: ——)但是来自 CMS 领域,MongoDB 是一个灵丹妙药,因为内容非常自然地映射到文档系统。
MongoDB 的另一个很好的例子是实时分析,因为 MongoDB 具有非常强大的性能和规模,尤其是在并发方面。MongoDB.org 网站上的案例研究证明了这些属性。
我同意每个数据库都有自己的目标和用例的观点; 相应地对每个数据库进行评估。
MongoDB 站点上提到了一些很棒的用例(至少是 MongoDB 的用例)。给出的例子有实时分析、日志记录和全文搜索。这些文章都值得一读
还有一篇关于 NoSQL 数据库最适合哪种类型的项目的文章: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
对于某些你需要的用例,特别是对于分析查询,你可以在 MongoDB 上使用 Postgres 的 这个包装纸运行 SQL 查询。
因为现在市场上的 NoSQL 数据库比以往任何时候都多,如果你正在寻找一个基于支持、可扩展性、管理和成本的适合企业应用的数据库,我建议你看看 Gartner Magic Quadrant。
Http://www.gartner.com/technology/reprints.do?id=1-23a415q&ct=141020&st=sb
我想向所有还没有尝试过 Couchbase 的人推荐它,但不是基于报告中所显示的版本(2.5.1) ,因为它比 CB Server 现在的版本晚了近两个版本,在2H15接近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
我强烈推荐马丁•福勒(Martin Fowler)的这篇演讲:
Https://www.youtube.com/watch?v=qi_g07c_q5i
摘要: Martin 快速介绍了 NoSQL 数据库: 它们来自哪里,它们使用的数据模型的性质,以及考虑一致性的不同方式。由此,他概述了应该考虑使用关系数据库的情况,为什么它们不会使关系数据库过时,以及多语言持久性的重要后果。
它很好地描绘了 NoSQL 是什么、不同的类别以及来自关系数据库世界的每个人都必须了解的事情。 问候。
首先,您必须了解 CAP (一致性、可用性和分区,其中您必须掌握三者中的两个)理论和我们的业务用例。MongoDB 满足一致性和分区,CouchDB 满足可用性和分区。
Youtube 上关于 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 中的视频教程)
我使用 NoSQL DBs 已经有一段时间了,下面是我对这个主题的贡献:
NoSQL 数据库的 很棒的用例是 统计数字和/或 生成报告的应用程序, 特别是当数据来自第三方时。
在这种情况下,NoSQL 数据库可以是 选得好
例如,让我们考虑一下 MongoDB:
一旦您将数据放在 JSON 中,(它可以来自第三方 API,也可以从 sql-application 导出)在 MongoDB中导入就非常简单了 并更新数据库中的 JSON 资料; 例如使用命令行 mongoimport实用程序
mongoimport
此时的 构建动态查询很简单具有很强的过滤和分组功能,非常适合这种应用程序。
例如,使用 < em > 聚合框架 :
$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 数据结构,避免冗长乏味 字符串连接来构建我们的查询。使用这种方法,添加/删除过滤器就像添加/删除过滤器一样简单 数组中的元素
另一个很大的好处来自于这样一个事实,这样的解决方案可能是 再快点而不是使用 关系数据库, 我们必须连接不同的表来获得所有需要的数据
此外,这个用例是最佳的,因为 NoSQL 数据库的 避免了所有的主要限制:
缺少事务: 应用程序不执行写操作,只执行读操作,因此我们根本不需要事务
表之间缺少联接: 我们不需要联接,因为我们可以使用 冗余将 非规范化数据存储在集合中。 因为我们只读取数据,所以不需要担心在更新之间同步非规范化的数据
这样我们就可以把重点放在 符合我们要求的方式中冗余的 存储数据上,这样就可以把重点放在单个集合上。
我之所以写这篇文章,是因为如果我以前读过类似的文章,我就可以节省一些时间来做研究了
希望对某些人有用