SQL与NoSQL数据库的区别介绍

SQL与NoSQL数据库,分别指关系数据库和非关系数据库。之间的区别指的是数据库的构建方式、存储的数据格式及数据存储方式的不同。实际上SQL数据库指的是仅能使用结构化查询语言(SQL)进行读写的,而NoSQL数据库是不使用SQL作为查询语言,也有的地方将NoSQL表达为(Not only sql).

以一条博文为例,下图就说明了SQL与NoSQL的区别:

微信截图_20180308195319.png

  • SQL数据库: 博文、标签和评论都是分表存储的,每一条的博文的标签机评论是根据博文的ID进行关联,因此这些表的设计都是很严格的,插入里面的数据必须符合条件才行;
  • NoSQL数据库:一篇博文对应的标签及评论不是以表结构进行存储,代之的可能是以文件方式进行存储,这样一个文件就包含了该篇博文所有的标签、评论及其他可能扩展的属性信息;

SQL:关系型数据库

关系型数据库的是由SQL(Structed Query Language)结构化查询语言编写而定义的数据库,表与字段之间是有联系的,这种关系我们称之为模式。在关系数据库中,这种模式必须在插入记录前被明确的定义。

SQL是一种被关系数据库广泛使用的编程语言,被用来执行数据的增删改查操作,现今流行的关系数据库有MySQL、Sybase、Oracle、IBM DB2、MS SQLServer和PostgreSQL等。

NoSQL:非关系型数据

当你需要存取的数据结构不是很清晰且可能要处理大量的非结构化数据时,如果使用关系型数据库会带来很多不必要的模式定义工作,且因此带来的数据一致性约束会严重影响你的处理速度。这时,非关系型数据库就派上用场了。NoSql数据库相比SQL数据库提供了很灵活的扩展方式,把NoSql数据库想象成一个文件夹,可以在里面添加文本、图片等各种类型的文件。如对于一个使用NoSQL数据库的博客系统而言,每一篇博文被单据存储成一个单一文件,里面包含着博文的内容、标签、评论和应用等所有有关信息。

NoSql数据库的类型

微信截图_20180308195354.png

  • Key-value model:使用关联数组(map或dictionary)存储,如Aerospike, Redis, Riak,ZooKeeper等;
  • Column store: 将按行存储的数据表进行反向就形成了一个按列存储的数据库,从而得到出色的可扩展性和高性能,如HBase、BigTable、HyperTable等;
  • Document database:使用Key-value概念并将其扩展,每一个文档内存储着所有与其相关的内容和一个用于检索的唯一Key值,是一种管理基于文件且具有几分结构数据的方式,如MongoDB,CouchDB等;
  • Graph database:对于复杂的图像文件数据,这类型的数据库是首选,如Polyglot、Neo4J。

下面介绍几种流行的NoSQL数据库:

  • MongoDB:当前最流行的NoSQL数据库,加之其开源、免费因此成为众多创业公司的首选。MongoDB是面向文档的、采用类JSON格式的动态模式来取代关系表的数据库,尤其适合构建网站后台使用,如Craigslist、eBay和Foursquare均采用此;
  • Apache's CouchDB:为Web而生,使用JSON数据交换格式来存储文档,使用JavaScript来索引、结合和转换文档,且提供HTTP API集合,使用友好;
  • HBase:Apache的另外一个开源项目,是Hadoop的一部分,Java编写,提供BigTable的功能;
  • Oracle NoSQL: Oracle开发的NoSQL类型数据库;
  • Apache's Cassandra DB:诞生于Facebook,一个擅长处理大规模的结构化数据的分布式数据库。在规模扩展方面有着优异表现,被Instagram、Apple、Comcast和Spotify等众多大型互联网公司采用;
  • Riak:使用Erlang编写的基于Key-value的开源数据库,在容错处理和数据自动分发方面具有很高的性能优势。

SQL/NoSQL该如何选择?

在数据库领域,从来没有一种适合所有场景的解决方案,这也解释为什么很多商业领域同时使用关系型和非关系型数据库分别用来处理不同任务。尽管NoSQL数据在速度和可扩展性方面具有很大优势,但其实在很多场景下高度结构化的SQL数据会更适合。

那么当你需要建立一个数据库时,对于SQL和NoSQL应该怎样选择?

选择SQL数据库的理由

  • 在需要ACID的场合,即原子性(Atomicity),一致性(Consistency),隔离(Isolation),耐久性(Durabilitity):依从ACID原则能够减少数据异常和保证在事务与数据库交互时数据的完整可靠。通常,NoSQL数据库以牺牲ACID原则的代价换来更好的处理速度和灵活性,但是对于很多电子商务和财务系统来说,一个依从ACID原则的关系型数据库仍然是更优解;
  • 需要处理的数据是结构化和不变的:如果你的业务规模不会出现需要更多的服务器来应对爆发式的增长,或者你的数据始终是不变的,那么就没有理由将它设计成可容纳多种不同类型的数据结构和海量数据的NoSQL数据库。

选择NoSQL数据库的理由

当你所有服务器端的程序都是为了更好的性能和更好的灵活性为目标时,选择NoSQL数据库可以避免让数据成为瓶颈。大数据实际上是NoSQL数据库的推送力,因传统数据库无法满足大数据的发展需要,因此NoSQL数据库变得流行起来了,如MongoDB、CouchDB、Cassandra和HBase正是如此。

  • 存储大量的数据而其中少部分却无固定结构:NoSQL数据库可以将不同类型的数据一起存放,同时还可新增类型。对于基于文档结构的数据库来说,一个文件中可以存储任意类型的数据而无需定义这些数据结构指的是什么;
  • 在云存储和云计算领域:将数据放在云端是一个出色的省钱办法,但是要求数据能轻易的分散到多台服务器中以应对数据库的成规模增长。将产品放在云端可以节省很多额外的软硬件带来的开销,同时像Cassandra的NoSQL数据库被设计为跨多个数据库中心的分布式数据库,而减少中心节点的瓶颈问题;
  • 瀑布开发:想象一下如果你的项目只有两个星期,而其实对于数据库的要求只是简单的存取,那么设计关系型数据库的表结构将会花去宝贵的时间,而NoSQL不会存在这个问题,它可以做到不用提前设计,拿来即用。

总结

至此,在这里简单的介绍了SQL和NoSQL数据库的区别,而实际上两者的比较还可以深入到更复杂的层面,比如NoSQL就不支持存储过程和触发器,还有在分布式事务方面的区别等。简单地说,NoSQL数据库的诞生是在大数据、分布式的发展下推进的。当我们需要在两者之间做出抉择时,重要的是需要结合业务的实际情况来取舍。

参考

SQL vs. NoSQL Databases: What’s the Difference?

SQL vs NoSQL: The Differences

NoSQL Wiki

标签: SQL, NoSQL, 关系型数据库, 非关系型数据库

添加新评论