OracleSQL vs NoSQL 没有硝烟的大战!

声称:本文译自SQL vs NoSQL The
Differences,如需转载请注明出处。


SQL(结构化查询语言)数据库作为一个生死攸关的数码存储机制就超越40单年头了。随着web应用及诸如MySQL、PostgreSQL和SQLite这些开源项的起,SQL使用量大大增加。

NoSQL数据库在20世纪60年份就曾面世了,但近来因MongoDB、CouchDB,Redis和Apache
Cassandra等才着普遍的关心。

你晤面发现许多课程都见面解释什么根据你的兴选择去采用SQL还是NoSQL,但是充分少讨论为什么该去挑选她。我期待能补充这同一空手。在这篇稿子被,我们以介绍中心的差距。在稍后的接轨的篇章中,我们将翻开有杰出的气象,并确定最佳的选取。

大部的事例都适用于当下流行的MySQL SQL和MongoDB
NoSQL数据库系统。其他SQL/NOSQL数据库都是类似的,但会发生一线之差别和语法特征。

SQL和NoSQL的圣战

于咱们初步之前,先改一些所谓的神话…

  • 神话1:NoSQL将取代SQL

这样说就算好比说船用让车替代,因为它们是新的技术。SQL和NoSQL做的凡如出一辙的从事:数据存储。它们以的方式不同,这或许回帮组或堵住而的品类。尽管觉得技术创新,并时时以近年来齐头长达,NoSQL不是SQL的替代品——而是同样栽选择。

  • 神话2:NoSQL比SQL更好或者重充分

局部列重新可利用SQL数据库,一些再度称NoSQL,而有足彼此交替使用。这边文章未见面是SitePoint
Smackdown,因为您无克于有方还利用相同之广泛性假设。

  • 神话3:SQL和NoSQL天壤之别

及时不自然是单真相。一些SQL数据库采用NoSQL的风味,反之亦然。选择或许会见变得更其模糊,NewSQL混合数据库可能会见在将来供有诙谐之精选。

  • 神话4:语言/框架决定了运用什么的数据库

咱们都习以为常了技术堆,比如——

  • LAMP: Linux, Apache, MySQL (SQL), PHP
  • MEAN: MongoDB (NoSQL), Express, Angular, Node.js
  • .NET, IIS and SQL Server
  • Java, Apache and Oracle.

起实践的、历史之以及经贸的来头来分解这些stack的提高——但非可知当其就规则。你可以在您的PHP或.NET项目遭到采取MongoDB
NoSQL数据库。你可以当Node.js中连续MySQL或者SQL服务器。你或无找到多课以及资源,但是是若的需决定数据库的种——而非是所谓的言语。

(有句话是这样说之,不要受在发生目地为难自己!选择一个未平凡的技艺整合或SQL和NoSQL组合是行之有效之,但艰苦的凡找到支持以及特聘有更的开发者)

起矣这么的想法,我们来瞧主要的别。

SQL表VS NoSQL文档

SQL数据库提供相关数据表的存储。例如,如果您发出一个网上书店,图书的信息以会见叫补充加到一个book的申中:

Oracle 1

各个一样推行是一个例外的笔录。设计是刚性的;你切莫克以与一个表来存储不同的音信,或者在一个数字格式输入字符。

NoSQL数据库存储JSON格式的许段值对文档,比如:

{

ISBN: 9780992461225,
title: "JavaScript: Novice to Ninja",
author: "Darren Jones",
format: "ebook",
price: 29.00
}

  

相似的文档可以储存于一个汇聚里,这看似于一个SQL表。然而你可以储存任何数在外文档里;而NoSQL数据库永远不见面埋怨,例如:

{

ISBN: 9780992461225,
title: "JavaScript: Novice to Ninja",
author: "Darren Jones",
format: "ebook",
price: 29.00
}

 

SQL表创建一个严峻的数模板,因此非常麻烦犯错误。NoSQL更加的利落和超生,但能存储任何数据或许会见招致一致性的题材。

SQL模式VS NoSQL无模式

每当一个SQL数据库中,除非你当指定模式遭遇定义了报表和字段格式,不然不可能抬高数据。该模式还可以涵盖其他的音信,例如——
主键——唯一的标识符,如ISBN,适用于单个记录。
目录——通常给询问的字段,用来助快熟搜索。
波及——数据字段之间的逻辑连接
效能——如触发器和仓储过程

你的多少模式要于旁商业逻辑可以叫开去处理数量前被规划出来并贯彻。完成后方可走一些更新,但不克到位好的改动。

每当一个NoSQL数据库,数据可以随时随地为增长。没有必要去制定一个文档设计,甚至集合前端。例如当MongoDB,下面的讲话以在初的book集合创建一个新的文档,如果是文档之前没有受创造了:

db.book.insert(

ISBN: 9780994182654,
title: "Jump Start Git",
author: "Shaumik Daityari",
format: "ebook",
price: 29.00
);

 

(MongoDB会叫每个集合内的文档自动抬高唯一的_id值。你或任然想要定义索引,如果需要的话可以稍后进行。)

倘一个类型开始数据要求特别麻烦去确定,那么NoSQL数据库可能更的可。有句话说,不要啊懒散而打困难:忽略了于档次遭到设计符合的数据库的最主要将会晤以后导致多底辛苦。

SQL规范化VS NoSQL反规范化

倘若我们如果于书店数据库中上加出版商信息。一个纯粹的出版商可以供多单标题,在一个SQL数据库里,我们创建一个新的publisher表:
Oracle 2
俺们接下好追加publisher_id到book表,这个表是publisher.id引用。
Oracle 3
立刻绝可怜限度的压缩多少的冗余;我们毫不再每本书的出版商信息——仅仅只用索引。这种技能可叫规范化,并产生实际的补益。我们只用更新单一的出版商而无用改变一切book数据。
每当NoSQL中,我们呢可以使用规范化技巧。在book集中之文档——

{

ISBN: 9780992461225,
title: "JavaScript: Novice to Ninja",
author: "Darren Jones",
format: "ebook",
price: 29.00,
publisher_id: "SP001"
}

 

——在一个出版商集合中援引一个文档:

{

id: "SP001"
name: "SitePoint",
country: "Australia",
email: "feedback@sitepoint.com"
}

 

但,这并无总是实惠之,原因在脚很显眼。我们可能选择反规范化我们的文档,重复每本书的出版商信息:

{

ISBN: 9780992461225,
title: "JavaScript: Novice to Ninja",
author: "Darren Jones",
format: "ebook",
price: 29.00,
publisher: {
    name: "SitePoint",
    country: "Australia",
    email: "feedback@sitepoint.com"
}
}

 

顿时好加快查询的进度,但在差不多个记录被更新出版商信息将会见明确变慢。

SQL关系连接VS NoSQL

SQL查询提供了一个强劲的JOIN条款。我们可以应用单个SQL语句获取不同表中的连锁数据。例如:
SELECT book.title, book.author, publisher.name
FROM book
LEFT JOIN book.publisher_id ON publisher.id;
及时将回所有的书名、作者与血脉相通出版商名称。

NoSQL没有同的JOIN,有SQL的涉的可能会见惊讶.
如果我们运用上述的规范化集合,我们拿需要获得有的book文档,检索所有的有关publisher文档,并手动在程序逻辑中连接两者。这就是反规范化常常是必备的一个缘故。

SQL VS NoSQL数据完整性

多数SQL数据库允许而以外键约束去强制性数据完整性(除非你仍于采用初的,在MySQL已不设有的MyISAM存储引擎)。我们的书店可以——

  •  确保有的修还起一个行之有效之publisher_id编码,这个编码在
    publisher表中都出配合的章
  •  如果一个要多单写让分配受其,则出版商不克吃去除。

模式强制数据库遵循这些规则。开发者或用户则非可知长、编辑或者移除可能引起无效数据还是孤立的多少

无异于数据完整性选项在NoSQL数据库被不可用;你可储存所有你想囤积的物。理想状态下,单一文档将化项目拥有信息的唯一来源。

SQL VS NoSQL事务

当SQLOracle数据库被,两单或多只创新得当与一个工作中推行——一个all-or-nothing的卷入保证成功还是黄。例如,假而我们的书店包含了order和stock表。当一本书被预订时,我们于order表添加同长条记下并压缩stock表中之库存数。如果我们分别地实行就半只创新,一个或成功另外一个晤砸——因此我们的数额会不同台。在一个事务中放置相同更新得保同时打响还是黄。

于NoSQL数据库被,单个文档的改是轻的。换句话说。如果你方文档中创新三单价值,要无三只价都是马到成功的,要无三个价都保持不更换。然而,却没有等的事务去创新不同之文档。有类似的取舍项,但是,在描绘这些的时,必须在您的代码中手动处理。

SQL VS NoSQL CRUD 语法

缔造、读取更新与去数据是达标所有数据库系统的基本功。本质上——

  •  SQL是一个轻量级的陈述性语言。这是不行强大的,并就化为一个国际化的正儿八经,虽然多数网贯彻略有不同的语法。
  •  NoSQL数据库使用与JSON类似
    JavaScripty-looking查询!基本操作很简短,但嵌套的JSON对于复杂的查询会变换得进一步的乱。

大概的较:
Oracle 4
Oracle 5
Oracle 6
Oracle 7

SQL VS NoSQL性能

顿时或是最有争议之比较,NoSQL经常为当比SQL更快。这并无奇怪;NoSQL更加简明的倒规范化存储允许你使用单个请求去当富有信息中查询一个特定的项目。不待动用相关的JSON或复杂的SQL查询。

也就是说,你的类设计与数量要求以起最深的熏陶。一个妙不可言设计之SQL数据库必然会比一个企划大不同之NoSQL表现自己,反之亦然。

SQL VS NoSQL缩放

乘你的数目的增强,你也许会见意识以多单服务器之前分配负载是死必要的。这对SQL为底蕴之网或许非常困难。如何分配相关的数也?聚类可能是绝简单易行的选项;多单服务器访问同之中央存储——但哪怕这样吗会见在挑战。

NoSQL的简练数据模型可以叫这个进程易多,许多一模一样上马便建立了缩放功能。这是一个概论性的,所以若遇到这种气象请去咨询专家看法。

SQL VS NoSQL实用性

末,我们来考虑安全和系统的问题。最红的NoSQL数据库才有了几乎年;他们于重新成熟的SQL产品重新易起问题。许多底问题一度为曝光,但多数还是归结为一个题目:知识。

开发人员和系统管理员对于新的数据库系统发出比较少之更,所以错误时来。选择NoSQL是因它们发会再也快,或为您想去避免架构设计而致以后的题材。

SQL VS NoSQL的总结

SQL和NoSQL数据库用不同的艺术召开一样的政工。从一个切换到任何一个凡是唯恐的,但是一些计划好省很多底时日跟金。

更适合SQL的项目:

  • 可预先确定的逻辑关系离散数据的要求
  • 数据完整性是必不可少的
  • 有良好开发经验和支持的标准基础技术

更适合NoSQL的项目:

  • 不相关的、不确定或不断变化的数据要求
  • ``更加简单宽松的项目对象,可以立即编码
  • ``速度和扩展性是必要的

以是书店例子的背景下,SQL数据库是不过实用的抉择项——特别是当我们推荐电商设施,需要强的事情支持。

鉴于我们云巴大凡开跨设备平台的音服务的,对数码存取的速与壮大要求很大,NoSQl对咱们的话是太适用的。

相关文章