NoSQL用例[关闭]


144

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


6
Cassandra和MongoDB是完全不同的产品-完全不同的类别。如果询问特定类型的数据库(OODB,DODB,DKVS等)的用例,则此问题将更容易回答。“ NoSQL”仅是“任何非SQL的东西”的总称-它可以就像BerkleyDB之类的东西,或者一堆放在网络共享中的平面文件一样。
亚伦诺特2010年

@Aaronaught我很欣赏这些差异,我想我可能对nosql使用保护性术语感到内
robjmills 2010年

Answers:


86

只是向自己保证,您将永远不会尝试将关系数据模型映射到像MongoDB或CouchDB这样的NoSQL数据库。这是开发人员评估新兴技术时最常见的错误。

这种方法类似于乘坐汽车并试图用它像马一样将您的手推车拉下马路。

当然,由于每个人的经验,这都是很自然的反应,但是使用文档数据库的真正价值在于能够简化数据模型并最大程度地减少开发人员的痛苦。您的代码库将减少,您的错误将更少且更容易发现,性能将变得很棒,并且扩展将更加简单。

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

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

我同意每个数据库都有自己的目标和用例的观点。相应地利用每个数据库的目的进行评估。


1
真正讲得很好的spacemonkey,我和seegee处于同一位置,显然我们应该以一种新的方式思考,应该问自己如何将应用程序数据构造为文档结构,从而使我们摆脱RDBMS的思考方式这项分析
2014年



8

我对NoSQL的满意与性能无关,而与可用性无关。当您的原子数据单元类似文档时,文档存储就更容易使用,因为在对象之间进行序列化很简单。这只是更有趣,这是个人或附带项目的重要因素。


1
我不会确切地说这很简单,但这对于面向文档的数据库来说是个好主意。相反,对于其他一些NoSQL产品而言,情况恰恰相反-DKVS 比SQL /关系数据库更难映射。
亚伦诺特2010年

8

我已经使用NoSQL DB已有一段时间了,这是我对以下主题的贡献:

NoSQL数据库的一个很好的用例是用于统计和/或报告生成的应用程序,尤其是在从第三方来源提供数据时。

在这种情况下,NoSQL数据库可以是 不错的选择

让我们考虑一下,例如,MongoDB

一旦您将数据存储在JSON中(可以来自第三方API,或者可以从sql应用程序导出),在MongoDB中就可以很轻松地导入和更新数据库中的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 );

我想指出我们可以轻松添加/删除过滤器简便性使用php数据结构并避免了繁琐的字符串连接来建立查询。通过这种方法,可以在二维上添加/删除过滤器就像从数组中添加/删除元素一样容易

另一个巨大的好处是,这样的解决方案可能比使用关系数据库,在这种情况下,我们必须与不同的表进行联接以获得所需的所有数据。

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

  • 缺乏交易:该应用程序不执行写入操作,而仅执行读取操作,因此我们根本不需要交易

  • 表之间缺乏联接:我们不需要联接,因为我们可以使用冗余非规范化数据存储在集合中。由于我们仅读取数据,因此无需担心在更新之间同步非规范化数据。

这样,我们可以集中精力以一种非常适合我们查询方式来冗余存储数据,这将专注于单个集合。

我写这封信是因为我以前读过类似的东西,这样可以节省我一些时间进行研究

希望对某人有用


3

我强烈推荐Martin Fowler的演讲:

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

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

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


理解了,将来会牢记在心。
user3631881 2015年

3

首先,您必须了解CAP(一致性,可用性和分区,您必须从中选出三个)中的两个理论和我们的业务用例。MongoDB满足一致性和分区要求,而Couch DB满足可用性和分区要求。

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中的视频教程)


1

对于某些您需要的用例,尤其是对于解析查询,您可以使用Postgres的包装器在MongoDB上运行SQL查询。


1

因为现在市场上NoSQL数据库的数量比以往任何时候都要多,所以如果您要基于支持,可扩展性,管理性和可扩展性来寻找适合企业应用的数据库,建议您查看Gartner魔力象限。成本。

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

我想向尚未使用Couchbase的人推荐Couchbase,但不要基于报告(2.5.1)中显示的版本,因为它比CB Server今天的版本落后了将近2个修订版,即将在2H15发行4.0版。

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

关于Couchbase作为供应商/产品的另一部分是,它是一种多用途类型的数据库。它可以充当纯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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.