NoSql与关系数据库


Answers:


123

并非所有数据都是关系数据。对于那些情况,NoSQL可能会有所帮助。

话虽如此,NoSQL代表“ Not Only SQL”。它不是要敲SQL或取代它。

SQL具有几个非常大的优点:

  1. 强大的数学基础。
  2. 声明性语法。
  3. 结构化查询语言(SQL)中的一种众所周知的语言。

那些还没有消失。

将其视为“或”或“论点”是错误的。NoSQL是人们需要考虑的替代方法,仅此而已。

可以将文档存储在非关系型数据库中,例如CouchDB。

也许读会有所帮助。


10
您能举一些非关系数据的例子吗?
user496949

7
文档和图像也可以像SQL Server和Oracle一样存储在RDBMS中吗?那为什么要用NoSQL呢?
user496949

2
半结构化数据就是这样的一类。它包含XML,电子邮件,JSON等。请参见其上的Wikipedia页面。通常的规则是结构在那里,但是定义松散并且可以动态扩展(后者倾向于使用关系模型进行分类-尽管不是不可能建模,但肯定很麻烦)。另一类是“自然数据”:一本小说,一个图像,都没有附加元数据。
我给予解答答案

2
好吧,你做不到SELECT blob FROM images WHERE blob CONTAINS('red car')。因此,尽管您可以将原始数据存储在数据库中,但是如果不附加元数据就无法搜索数据。RDBMS系统中的全文本搜索模块弥合了一些半结构性鸿沟。
我给予解答答案

1
@duffymo:文档不是“无关的”。文档通常存储在SQL DBMS中,您不需要使用NOSQL DBMS。实际上,NOSQL数据库通常使用的数据模型与关系模型相比,其通用性较低,应用范围更广。例如图数据库。存储的数据类型不能解释NOSQL的任何优势。
nvogel

98

历史看起来像这样:

  1. Google需要其反向搜索索引的存储层。他们认为传统的RDBMS不会削减它。因此,他们在其GFS文件系统之上实现了NoSQL数据存储BigTable。主要部分是成千上万的廉价商品硬件机器提供了速度和冗余。

  2. 其他人都知道Google刚刚做了什么。

  3. Brewers CAP定理得到证明。所有使用的RDBMS系统都是CA系统。人们也开始使用CP和AP系统。K / V商店非常简单,因此它们是研究的主要工具。

  4. 软件即服务系统通常不提供类似SQL的存储。因此,人们对NoSQL类型存储越来越感兴趣。

我认为起飞的大部分原因都与这段历史有关。Google扩展Google在Google提出了一些新想法,其他所有人也纷纷效仿,因为这是他们目前知道的唯一解决扩展问题的解决方案。因此,您愿意围绕Google的分布式数据库概念进行所有工作,因为这是扩展到一定规模以上的唯一方法。

C-一致性
A-可用性
P-分区容限
K / V-键/值


10
什么是CAP,CP,AP,K / V?
已知

3
在Wikipedia上查找CAP定理。CA和CP源自此。K / V是键/值的缩写,是键到值的(分布式)有限映射。
我给予解答答案2012年

其他所有人都意识到Google刚刚做了什么。 ”大声笑。好像是苏格兰人对我的回答(又名NOT CRAP)。
鲁芬

38

由于NoSQL的以下原因/特性,NoSQL比RDBMS更好

  1. 它支持半结构化数据和易失性数据
  2. 它没有架构
  3. 读/写吞吐量非常高
  4. 水平扩展性可以轻松实现
  5. 将在Terra字节和Peta字节的卷中支持Bigdata
  6. 为Bigdata之上的分析工具提供良好的支持
  7. 可以托管在便宜的硬件机器中
  8. 内存中缓存选项可用于提高查询性能
  9. 加快开发人员的开发生命周期

编辑:

要回答“为什么RDBMS无法扩展”,请查看Stavros Harizopoulos,Daniel J. Abadi,Samuel Madden和Michael Stonebraker撰写的RDBMS Overheads pdf。

RDBMS在处理兆兆字节和Peta字节的巨大数据量方面面临挑战。即使您具有独立/廉价磁盘冗余阵列(RAID)和数据粉碎,它也无法很好地扩展以处理海量数据。您需要非常昂贵的硬件。

日志记录组装日志记录并跟踪数据库结构中的所有更改都会降低性能。如果不要求可恢复性,或者通过其他方式(例如,网络上的其他站点)提供了可恢复性,则可能不需要记录日志。

锁定:传统的两阶段锁定带来了相当大的开销,因为对数据库结构的所有访问均由单独的实体(锁定管理器)控制。

锁存:在多线程数据库中,必须先锁存许多数据结构才能访问它们。删除此功能并采用单线程方法会对性能产生明显影响。

缓冲区管理:主内存数据库系统不需要通过缓冲池访问页面,从而消除了每次记录访问的间接级别。

这并不意味着我们必须在SQL上使用NoSQL。

但是,由于以下原因/ RDBMS的属性,RDBMS比NoSQL更好

  1. 具有ACID属性的事务-原子性,一致性,隔离性和耐久性
  2. 遵守要写入/读取的数据的强模式
  3. 实时查询管理(如果数据大小小于10 Tera字节)
  4. 执行涉及join和group by子句的复杂查询

根据业务案例和要求,我们必须使用RDBMS(SQL)和NoSQL(不仅是SQL)


2
值得注意的是,某些NoSQL数据库支持ACID事务。
戴夫·卡塞尔

15

与关系数据库模型相比,NOSQL没有特殊优势。NOSQL确实解决了当前SQL DBMS的某些局限性,但是它并不意味着在以前的数据模型上有任何根本上的新功能。

NOSQL仅意味着没有SQL(或“不仅是SQL”),但这并不意味着没有关系。原则上,关系数据库将是一个非常好的NOSQL解决方案-只是当前的NOSQL产品集都不使用关系模型。


4
似乎在最近的O'Reilly Strata会议上,Mark Madsen在他的数据库历史上创造了对“ NoSQL”的新解释以取代“不仅SQL”。现在是:“否,SQL” ;-)
Lukas Eder 2013年

4

RDBMS更加关注关系,而NoSQL更加关注存储。

RDBMS遇到瓶颈时,可以考虑使用NoSQLNoSQL使RDBMS更加灵活。


4

与RDBMS相比,NoSQL的最大优势是可伸缩性
NoSQL数据库可以轻松扩展到许多节点,但是对于RDBMS来说很难。
可伸缩性不仅为您提供更多的存储空间,而且由于许多主机可以同时工作,因此性能更高。


3

如果您需要高性能处理大量数据

要么

如果没有预先确定数据模型

然后

NoSQL数据库是更好的选择。


2

仅添加到上面给出的所有信息中

NoSql的优点:

1)NoSQL是很好的选择,因为它希望支持无模式和面向对象的体系结构,因此希望快速投入生产。

2)NoSql数据库最终是一致的,这在简单的语言中意味着它们不会像RDBMS那样对数据(文档)提供任何锁定,这意味着最新的数据快照始终可用,从而增加了应用程序的延迟。

3)它使用MVCC(多视图并发控制)策略来维护和创建数据(文档)快照。

4)如果要建立索引数据,则可以创建视图,该视图将根据您提供的视图定义自动为数据建立索引。

NoSql的缺点:

1)它绝对不适合大型的繁琐交易应用程序,因为它最终会保持一致并且不支持ACID属性。

2)由于它使用MVCC方法进行并发控制,因此还会创建数据(文档)的多个快照(修订),其结果是占用空间比以前快,这使得压缩和重新索引更加频繁,这会减慢您的工作速度随着应用程序中数据和事务的增长,应用程序响应。为了解决这个问题,您可以水平扩展节点,但是与SQL数据库相比,它的成本更高。


1

mongodb.com

NoSQL数据库在四个主要方面与旧的关系技术不同:

数据模型:与关系数据库不同,关系数据库使您可以在向系统添加任何数据之前定义模式,而NoSQL数据库使您无需先定义模式即可构建应用程序。没有预定义的架构会使NoSQL数据库在您的数据和需求更改时更容易更新。

数据结构:关系数据库是在一个数据被合理地构造并通过其关系明确定义的时代建立的。NoSQL数据库旨在处理非结构化数据(例如,文本,社交媒体帖子,视频,电子邮件),这些数据构成了当今存在的大部分数据。

扩展:扩展NoSQL数据库要比关系数据库便宜得多,因为您可以通过扩展廉价的商用服务器来增加容量。另一方面,关系数据库需要一台服务器来托管您的整个数据库。要进行扩展,您需要购买更大,更昂贵的服务器。

开发模型:NoSQL数据库是开放源代码,而关系数据库通常是封闭源代码,其许可费已计入其软件的使用中。使用NoSQL,您无需花费大量软件费用就可以开始项目。

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.