SQL vs 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数据库中,八个或七个立异可以在同一个作业中实施——一个all-or-nothing的卷入有限支撑成功或败北。例如,假如大家的书摊包罗了order和stock表。当一本书被预约时,大家在order表添加一条记下并压缩stock表中的库存数。借使大家分别地举办那三个更新,一个可能得逞其它一个会破产——由此大家的多寡会不一起。在一个事务中放置相同更新可以确保同时打响或失利。

在NoSQL数据库中,单个文档的改动是细微的。换句话说。如若你正在文档中立异多个值,要不多个值都是成功的,要不三个值都保持不变。不过,却尚无相等的事情去创新不相同的文档。有类似的选项,可是,在写这个的时候,必须在你的代码中手动处理。

NoSQL数据库在20世纪60年份就早已面世了,但近年来因为MongoDB、CouchDB,Redis和Apache
卡桑德拉等才惨遭大面积的关注。

SQL(结构化查询语言)数据库作为一个至关主要的多寡存储机制已经超先生过40个年头了。随着web应用和像MySQL、PostgreSQL和SQLite这个开源项的兴起,SQL使用量大大增加。

SQL VS NoSQL性能

那可能是最有争执的可比,NoSQL日常被认为比SQL更快。那并不意外;NoSQL尤其简便易行的反规范化存储允许你使用单个请求去在拥有新闻中询问一个一定的系列。不须要接纳相关的JSON或复杂的SQL查询。

也就是说,你的花色统筹和数目须要将发出最大的震慑。一个美好设计的SQL数据库必然会比一个设计很差的NoSQL表现和谐,反之亦然。

SQL表VS NoSQL文档

SQL数据库提供相关数据表的囤积。例如,如若您有一个网上书店,图书的音讯将会被添加到一个book的表中:

MySQL 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和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依然NoSQL,然则很少研讨为啥应该去挑选它。我希望可以补充这一空白。在那篇文章中,大家将介绍中央的歧异。在稍后的持续的小说中,大家将翻开一些一级的场馆,并规定最佳的选项。


SQL VS NoSQL数据完整性

大部SQL数据库允许你利用外键约束去强制性数据完整性(除非您仍在拔取旧的,在MySQL已不存在的MyISAM存储引擎)。大家的书摊可以——

  •  确保所有的书都有一个使得的publisher_id编码,这几个编码在
    publisher表中都有同盟的条规
  •  若是一个或五个书被分配给它们,则出版商不可以被剔除。

情势强制数据库坚守那个规则。开发者或用户则无法充实、编辑或者移除可能滋生无效数据或孤立的数码

一致数据完整性选项在NoSQL数据库中不可用;你可以储存所有你想囤积的东西。理想状态下,单一文档将变成门类拥有消息的绝无仅有来源。

SQL VS NoSQL的总结

SQL和NoSQL数据库用分化的办法做一样的工作。从一个切换来另一个是唯恐的,可是某些布置可以节约很多的时光和钱财。

更适合SQL的项目:

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

更适合NoSQL的项目:

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

在那个书店例子的背景下,SQL数据库是最实用的选项——越发是当大家推荐电商设施,必要强大的业务扶助。

鉴于大家云巴是做跨设备平台的音信服务的,对数码存取的进程和扩大必要尤其高,NoSQl对我们的话是最合适的。

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

SQL VS NoSQL缩放

乘机你的数额的增高,你恐怕会发觉在三个服务器此前分配负载是很必要的。那对于SQL为底蕴的连串可能很吃力。怎么样分配相关的数量吧?聚类可能是最简单易行的选项;多少个服务器访问同一的中心存储——但即使这样也会存在挑衅。

NoSQL的概括数据模型可以让那么些进程简单很多,许多一上马就确立了缩放功用。那是一个概论性的,所以只要赶上那种情形请去问问专家看法。

SQL VS NoSQL实用性

末尾,大家来考虑安全和系列的题材。最有名的NoSQL数据库才存在了几年;他们比更成熟的SQL产品更易出现问题。许多的题材已经被曝光,但多数或者归纳为一个题目:知识。

开发人士和系统管理员对于新的数据库系统有较少的阅历,所以错误平常爆发。接纳NoSQL是因为它感到会更快,或因为您想去防止架构设计而导致将来的问题。

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 CRUD 语法

开创、读取更新和删除数据是上有着数据库系统的根底。本质上——

  •  SQL是一个轻量级的陈述性语言。那是充裕强劲的,并曾经变为一个国际化的业内,纵然多数系统贯彻略有分化的语法。
  • MySQL, NoSQL数据库使用与JSON类似
    JavaScripty-looking查询!基本操作很简短,但嵌套的JSON对于复杂的询问会变得越来越的混杂。

概括的相比:
MySQL 2
MySQL 3
MySQL 4
MySQL 5

SQL规范化VS NoSQL反规范化

只要我们要向书店数据库中添加出版商音信。一个十足的出版商可以提供八个标题,在一个SQL数据库里,大家创制一个新的publisher表:
MySQL 6
咱俩接下去可以追加publisher_id到book表,这些表是publisher.id引用。
MySQL 7
那最大限度的缩减数额的冗余;大家不要再行每本书的出版商音讯——仅仅只用索引。那种技术可以称为规范化,并有实际的便宜。大家只用更新单一的出版商而不用改变总体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"
}
}

 

那足以加快查询的快慢,但在多少个记录中更新出版商音信将会明确变慢。

一大半的事例都适用于近期风行的MySQL SQL和MongoDB
NoSQL数据库系统。其余SQL/NOSQL数据库都是看似的,但会有轻微的差距和语法特征。

网站地图xml地图