Answers:
并非所有数据都是关系数据。对于那些情况,NoSQL可能会有所帮助。
话虽如此,NoSQL代表“ Not Only SQL”。它不是要敲SQL或取代它。
SQL具有几个非常大的优点:
那些还没有消失。
将其视为“或”或“论点”是错误的。NoSQL是人们需要考虑的替代方法,仅此而已。
可以将文档存储在非关系型数据库中,例如CouchDB。
也许读这会有所帮助。
SELECT blob FROM images WHERE blob CONTAINS('red car')
。因此,尽管您可以将原始数据存储在数据库中,但是如果不附加元数据就无法搜索数据。RDBMS系统中的全文本搜索模块弥合了一些半结构性鸿沟。
历史看起来像这样:
Google需要其反向搜索索引的存储层。他们认为传统的RDBMS不会削减它。因此,他们在其GFS文件系统之上实现了NoSQL数据存储BigTable。主要部分是成千上万的廉价商品硬件机器提供了速度和冗余。
其他人都知道Google刚刚做了什么。
Brewers CAP定理得到证明。所有使用的RDBMS系统都是CA系统。人们也开始使用CP和AP系统。K / V商店非常简单,因此它们是研究的主要工具。
软件即服务系统通常不提供类似SQL的存储。因此,人们对NoSQL类型存储越来越感兴趣。
我认为起飞的大部分原因都与这段历史有关。Google扩展Google在Google提出了一些新想法,其他所有人也纷纷效仿,因为这是他们目前知道的唯一解决扩展问题的解决方案。因此,您愿意围绕Google的分布式数据库概念进行所有工作,因为这是扩展到一定规模以上的唯一方法。
C-一致性
A-可用性
P-分区容限
K / V-键/值
由于NoSQL的以下原因/特性,NoSQL比RDBMS更好
编辑:
要回答“为什么RDBMS无法扩展”,请查看Stavros Harizopoulos,Daniel J. Abadi,Samuel Madden和Michael Stonebraker撰写的RDBMS Overheads pdf。
RDBMS在处理兆兆字节和Peta字节的巨大数据量方面面临挑战。即使您具有独立/廉价磁盘冗余阵列(RAID)和数据粉碎,它也无法很好地扩展以处理海量数据。您需要非常昂贵的硬件。
日志记录:组装日志记录并跟踪数据库结构中的所有更改都会降低性能。如果不要求可恢复性,或者通过其他方式(例如,网络上的其他站点)提供了可恢复性,则可能不需要记录日志。
锁定:传统的两阶段锁定带来了相当大的开销,因为对数据库结构的所有访问均由单独的实体(锁定管理器)控制。
锁存:在多线程数据库中,必须先锁存许多数据结构才能访问它们。删除此功能并采用单线程方法会对性能产生明显影响。
缓冲区管理:主内存数据库系统不需要通过缓冲池访问页面,从而消除了每次记录访问的间接级别。
这并不意味着我们必须在SQL上使用NoSQL。
但是,由于以下原因/ RDBMS的属性,RDBMS比NoSQL更好
根据业务案例和要求,我们必须使用RDBMS(SQL)和NoSQL(不仅是SQL)
与关系数据库模型相比,NOSQL没有特殊优势。NOSQL确实解决了当前SQL DBMS的某些局限性,但是它并不意味着在以前的数据模型上有任何根本上的新功能。
NOSQL仅意味着没有SQL(或“不仅是SQL”),但这并不意味着没有关系。原则上,关系数据库将是一个非常好的NOSQL解决方案-只是当前的NOSQL产品集都不使用关系模型。
仅添加到上面给出的所有信息中
NoSql的优点:
1)NoSQL是很好的选择,因为它希望支持无模式和面向对象的体系结构,因此希望快速投入生产。
2)NoSql数据库最终是一致的,这在简单的语言中意味着它们不会像RDBMS那样对数据(文档)提供任何锁定,这意味着最新的数据快照始终可用,从而增加了应用程序的延迟。
3)它使用MVCC(多视图并发控制)策略来维护和创建数据(文档)快照。
4)如果要建立索引数据,则可以创建视图,该视图将根据您提供的视图定义自动为数据建立索引。
NoSql的缺点:
1)它绝对不适合大型的繁琐交易应用程序,因为它最终会保持一致并且不支持ACID属性。
2)由于它使用MVCC方法进行并发控制,因此还会创建数据(文档)的多个快照(修订),其结果是占用空间比以前快,这使得压缩和重新索引更加频繁,这会减慢您的工作速度随着应用程序中数据和事务的增长,应用程序响应。为了解决这个问题,您可以水平扩展节点,但是与SQL数据库相比,它的成本更高。
NoSQL数据库在四个主要方面与旧的关系技术不同:
数据模型:与关系数据库不同,关系数据库使您可以在向系统添加任何数据之前定义模式,而NoSQL数据库使您无需先定义模式即可构建应用程序。没有预定义的架构会使NoSQL数据库在您的数据和需求更改时更容易更新。
数据结构:关系数据库是在一个数据被合理地构造并通过其关系明确定义的时代建立的。NoSQL数据库旨在处理非结构化数据(例如,文本,社交媒体帖子,视频,电子邮件),这些数据构成了当今存在的大部分数据。
扩展:扩展NoSQL数据库要比关系数据库便宜得多,因为您可以通过扩展廉价的商用服务器来增加容量。另一方面,关系数据库需要一台服务器来托管您的整个数据库。要进行扩展,您需要购买更大,更昂贵的服务器。
开发模型:NoSQL数据库是开放源代码,而关系数据库通常是封闭源代码,其许可费已计入其软件的使用中。使用NoSQL,您无需花费大量软件费用就可以开始项目。