SQL ServerSQL vs NoSQL 没有硝烟的烟尘!

扬言:本文译自SQL vs NoSQL The
Differences
,如需转载请注解出处。

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

SQL VS NoSQL的总结

SQL和NoSQL数据库用不同的点子做同样的作业。从一个切换来另一个是唯恐的,可是一些计划可以节省很多的年华和金钱。

更适合SQL的项目:

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

更适合NoSQL的项目:

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

在这多少个书店例子的背景下,SQL数据库是最实用的选项——特别是当我们推荐电商设施,需要强大的业务协理。

由于我们云巴是做跨设备平台的消息服务的,对数码存取的快慢和扩大要求特别高,NoSQl对大家的话是最合适的。

SQL VS NoSQL缩放

乘势你的数量的增强,你恐怕会发现在六个服务器从前分配负载是很必要的。这对于SQL为底蕴的系统或者很艰辛。怎样分配相关的多少吧?聚类可能是最简单易行的抉择;五个服务器访问同一的主旨存储——但固然如此也会存在挑衅。

NoSQL的简练数据模型能够让那些过程容易很多,许多一发轫就创造了缩放效能。那是一个概论性的,所以假使境遇这种情况请去问话专家意见。

SQL VS NoSQL性能

这或许是最有争论的对比,NoSQL平日被认为比SQL更快。这并不奇怪;NoSQL更加简明的反规范化存储允许你接纳单个请求去在享有信息中查询一个特定的门类。不需要利用有关的JSON或复杂的SQL查询。

也就是说,你的序列规划和多少要求将时有暴发最大的熏陶。一个绝妙设计的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数据库允许你接纳外键约束去强制性数据完整性(除非您仍在行使旧的,在MySQL已不存在的MyISAM存储引擎)。我们的书店可以——

  •  确保所有的书都有一个有效的publisher_id编码,这些编码在
    publisher表中都有相当的条条框框
  •  假如一个或多少个书被分配给它们,则出版商不可能被删去。

情势强制数据库遵从这么些规则。开发者或用户则不可能扩充、编辑或者移除可能滋生无效数据或孤立的数量

平等数据完整性选项在NoSQL数据库中不可用;你可以储存所有你想囤积的事物。理想状态下,单一文档将变为项目具有音讯的唯一来源。

多数的事例都适用于当下风行的MySQL SQL和MongoDB
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是一个轻量级的陈述性语言。这是可怜有力的,并已经成为一个国际化的业内,即使多数系统贯彻略有不同的语法。
  •  NoSQL数据库使用与JSON类似
    JavaScripty-looking查询!基本操作很粗略,但嵌套的JSON对于复杂的查询会变得更为的眼花缭乱。

粗略的可比:
SQL Server 1
SQL Server 2
SQL Server 3
SQL Server 4

SQL规范化VS NoSQL反规范化

假如我们要向书店数据库中添加出版商音信。一个单纯的出版商可以提供三个标题,在一个SQL数据库里,咱们创设一个新的publisher表:
SQL Server 5
咱俩接下去能够扩展publisher_id到book表,这么些表是publisher.id引用。
SQL Server 6
这最大限度的缩短数量的冗余;我们不用再行每本书的出版商信息——仅仅只用索引。那种技术可以称作规范化,并有实在的便宜。我们只用更新单一的出版商而不用改变整个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数据库中,六个或五个立异可以在同一个事务中推行——一个all-or-nothing的包装保证成功或破产。例如,假使我们的书摊包含了order和stock表。当一本书被预订时,我们在order表添加一条记下并压缩stock表中的库存数。假如我们分别地执行这六个立异,一个恐怕成功另外一个会失败——因而我们的数码会不联合。在一个工作中放置相同更新可以确保同时打响或破产。

在NoSQL数据库中,单个文档的改动是细微的。换句话说。假使你正在文档中更新三个值,要不五个值都是水到渠成的,要不多个值都保持不变。然则,却尚无相等的工作去革新不同的文档。有类似的选项,不过,在写这个的时候,必须在您的代码中手动处理。

SQL(结构化查询语言)数据库作为一个首要的数量存储机制已经抢先40个新春了。随着web应用和像MySQL、PostgreSQL和SQLite这一个开源项的兴起,SQL使用量大大扩充。


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实用性

最后,我们来考虑安全和体系的题材。最资深的NoSQL数据库才存在了几年;他们比更成熟的SQL产品更易出现问题。许多的题材早已被曝光,但多数或者归纳为一个题目:知识。

开发人士和系统管理员对于新的数据库系统有较少的阅历,所以错误平日暴发。选拔NoSQL是因为它感到会更快,或因为你想去避免架构设计而招致随后的问题。

您会发现许多科目都会解释什么依据你的趣味选用去行使SQL依旧NoSQL,不过很少研商为何应该去接纳它。我盼望可以补充这一空手。在这篇著作中,大家将介绍中央的差距。在稍后的继承的篇章中,我们将翻开一些优秀的光景,并确定最佳的取舍。

SQL表VS NoSQL文档

SQL数据库提供有关数据表的仓储。例如,假诺您有一个网上书店,图书的音信将会被添加到一个book的表中:

SQL Server 7

每一行是一个不一的记录。设计是刚性的;你不能够拔取同一个表来存储不同的信息,或者在一个数字格式输入字符。

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更加的灵活和超生,但能够存储任何数据可能会造成一致性的问题。

相关文章