SQL和NoSQL,我到底该学哪个?
原创:MarTechApe
数据库的重要性不言而喻,可以说是整个软件或平台应用的根基。它能够大大提高人们搜索查找的效率。因此,对于学习数据分析的朋友来说,非常有必要从根本目的上了解清楚不同数据库结构的作用以及不同的数据库系统。
在选择数据库时,最重要的决定之一就是选择一个关系型数据结构(SQL),还是非关系型数据结构(NoSQL)。尽管两者都是可行的选择,但用户在作出决定时必须牢记两者之间的关键区别。
今天这篇文章将为大家详解SQL与NoSQL数据库系统最重要的区别,并介绍几个比较好的SQL与NoSQL数据库系统。
SQL与NoSQL的主要差异点
语言
我们先从生活中的一个例子讲起。假设有一个城镇A,那里的每个人都说着相同的语言。所有的商业往来都是围绕它构建的,每种通信形式都是使用这个语言。简而言之,这种语言是居民了解并与周围世界互动的唯一方式。在一个地方更改语言会对每个人造成困扰及混乱。
现在,有另一个城镇B,每户人家都说不同的语言。每个人与世界互动的方式都不一样,也没有通用的理解方式或固定体制。如果一户人家与众不同,那么它也根本不会影响任何人。
这有助于说明SQL(关联式)与NoSQL(非关联式)数据库之间的根本区别之一。这种区别非常重要,让我们解释一下:
SQL数据库:SQL数据库使用结构化查询语言来定义和处理数据。一方面,它的功能非常强大——SQL是功能最广且使用范围最多的数据库语言之一,尤其针对复杂的查询而言。但另一方面,它也是有限制的。SQL要求你在使用前,需要用预先定义的模式来确定数据的结构。此外,所有的数据都必须遵循相同的结构。这可能需要前期大量的准备,正如城镇A一样,这意味着结构上的改变对于整个系统而言,是困难且具有颠覆性的。
NoSQL数据库:与之相对应的,NoSQL数据库具有针对非结构化数据的动态模式,并且数据可以多种方式储存:它们可以是以列的形式、文件的形式、图片形式或者以KeyValue(键-值存储)的方式储存。就像刚才例子中的城镇B。这种灵活性意味着:
你可以创建文档而不必先定义其结构
每个文档可以有自己独特的结构
语法因数据库而异
可随意添加字段
可扩展性
在大多数情况下,SQL数据库是垂直扩张的,这意味着你可以通过添加像CPU,RAM或SSD来增加单个服务器上的空间和容量。NoSQl数据库则是水平扩张的。这意味着在你的NoSQL数据库里,你可以通过分区或增加更多服务器来处理更大的数据量。这就像是在同一栋楼里增加更多的楼层 vs 在街区增加更多的建筑物。后者最终会变得更强大,这使得NoSQL数据库成为了存储大型或不断变化的数据的首选。
结构
SQL是基于表格的数据库,而NoSQL则是基于文件、键值对、图表数据或者宽列储存的数据库。对于需要多行处理的系统,如核算系统、或建立于关系结构基础上的旧系统时,SQL关系数据库是一个更好的选择。
SQL数据库包括MySQL、Oracle、PostgreSQL和Microsoft SQL Server。
NoSQL数据库包括MongoDB,BigTable,Redis,RavenDB,Cassandra,HBase,Neo4j和CouchDB。
最好的SQL数据库系统
现在我们已经确定了SQL与NoSQL数据库之间的主要结构差异,下一步让我们通过回顾当前市面上可用的最佳SQL和NoSQL数据库,来更深入地了解SQL和NoSQL。
MySQL
以下是MySQL的优点及强项:
归Oracle所有:尽管MySQL是免费且开源的,但这个数据库系统是由Oracle拥有并管理。
成熟度:MySQL是一个非常成熟的数据库,这意味着它有庞大的社群、大量的测试以及强大的稳定性。
兼容性:MySQL可用于所有主要的平台,包括Linux,Windows,Mac,BSD和Solaris。它还拥有与Node.js, Ruby, C#, C++, Java, Perl, Python和PHP等语言的连接器。这代表它不仅仅只限于SQL查询语言。
性价比高:该数据库开放源代码并且免费。
可复制性:MySQL数据库可跨过多个节点复制,这意味着可减少工作量,并能提高该应用的扩展性及可用性。
分区性:虽然不能在大多数SQL数据库上完成分区,但可在MySQL服务器上完成。这不仅性价比高,还对业务有利。
谁应该使用它?如果你是使用预定义结构或者设计框架的企业,MySQL对你来说是一个很强大的选项。例如,当应用需要运行多行交易(例如核算系统或监控存货的系统)或在旧系统上运行时,MySQL结构都可助其一臂之力。
Oracle数据库
另一个特别是在企业级组织中备受欢迎的SQL数据库系统,就是Oracle数据库。Oracle数据库具有以下特点:
专业的开发和管理:甲骨文公司开发并管理其Oracle数据库系统。作为一种商业选择,这个关系数据库管理系统得益于频繁的更新以及出色的客户支持。
独特的SQL“方言”:Oracle数据库使用自己的SQL“方言”,称其为PL/SQL (过程语言/SQL)。这个语言与传统的SQL区别很小,主要在于它处理储存程序的方式、内置函数以及变量。
昂贵:作为专业开发和管理的数据库数据,Oracle是可用的最昂贵的选项之一。
兼容性:Oracle数据库可用于任何操作系统。
数据库管理系统组织(DBMS):Oracle通过数据库目标子集的模式,对其处理目标进行分组。
大型数据库规模:Oracle可以处理超大的数据库,因此对于拥有大量数据需求的企业而言,它是绝佳的选择。
易于升级:使用Oracle数据库,无需彻底检查系统,便能完成升级。
数据库事务控制:对于Oracle数据库而言,新的数据库连接被看作是新的数据库事务。你可以进行回滚或更改,因为数值在提交前并不会改变。
其他优点:Oracle提供位图索引、分区、基于函数的索引、反向键索以及星型查询优化。
谁应该使用它?Oracle数据库是一个很好的数据库选择,但它高昂的成本阻碍中小型企业对其进行使用。但对于具有大量数据需求并有大量预算的大企业,这是一个不错的选择。
Microsoft SQL Server
Microsoft SQL Server在中小型公司中非常流行,它的特点如下:
专业开发和管理:Microsoft SQL Server数据库系统由Microsoft开发和管理。作为商业性数据库管理系统,Microsoft频繁的更新和强大的用户支持提供了可靠的后盾。
独特的SQL“方言”:SQL Server使用自己的SQL方言,称为T-SQL(Transact SQL)。与Oracle一样,它在处理内置函数,存储过程和变量方面与传统SQL有所不同。
兼容性:SQL Server仅适用于基于Windows和Linux的系统。
数据库事务控制:由于SQL Server对每个命令都有单独的执行,因此在发现错误时很难在过程中进行调整。
DBMS组织:SQL Server根据数据库名称组织表,程序(Procedure)和视图(Views)。
易于使用:SQL Server以易于使用而闻名。
出色的支持:作为Microsoft产品,SQL Server包括实时产品支持和出色的文档记录。
其他功能:SQL Server有一些独特的工具和功能,例如BI工具,Database Tuning Advisor,SQL Server Management Studio和SQL Server Profiler。
谁应该使用它?对于不需要像Oracle这样的企业级解决方案,但需要高质量,专业管理的数据库系统以及产品支持的中小型组织,Microsoft SQL Server是极佳的选择。
PostgreSQL
我们在SQL DBMS中将PostgreSQL列为最后一个,因为它是一种混合SQL和NoSQL数据库系统,可以在这两种数据库系统之间找到平衡点。PostgreSQL具有以下特点:
成本效益:PostgreSQL是一个免费的开源数据库系统。PostgreSQL全球开发小组负责开发和管理系统。
兼容性:PostgreSQL可用于多种操作系统,包括HP-UX,FreeBSD,Linux,OpenBSD,NetBSD,OS X,Unix,Solaris和Windows。它还提供对.Net,C ++,C,Java,Delphi,Perl,PHP,JavaScript(Node.js),Python和Tsl语言的支持。
ORDBMS:PostgreSQL是一个“面向对象的数据库管理系统”(ORDBMS),而不仅仅是一个“关系数据库管理系统”(RDBMS)。这意味着它是严格关系模型(SQL)和严格面向对象模型之间的混合体(NoSQL)。
用户支持:PostgreSQL本身不提供客户支持,但是有一个活跃的社区可以随时提供免费支持。此外,有第三方服务提供商提供付费支持选项。
高ACID合规性:PostgreSQL以提供最高级别的不可分割性(也称原子性)、一致性、独立性(也称隔离性)和持久性而闻名。这是专家用来判断数据库设计质量的四个标准。
纯SQL:PostgreSQL的另一个优点是它使用了最纯净的SQL形式之一,而不是通常具有独特差异的其他数据库系统。
谁应该使用它?作为关系数据库和面向对象数据库的混合体,如果你的数据不能与完美的关系模型很好地结合时,PostgreSQL是极好的选择。它非常适合超大型数据库的处理和执行复杂的查询。
NoSQL非关系型数据库系统
接下来我们将介绍各种NoSQL非关系数据库系统。理解这些系统需要更多的技术知识。我们将从MongoDB开始。
MongoDB
以下是MongoDB的一些特点:
免费使用:自2018年10月以来,MongoDB的更新已根据服务器端公共许可证(SSPL)v1发布,并且该数据库可免费使用。
动态模式:如前所述,你可以灵活地更改数据模式而无需修改任何现有数据。
可扩展性:MongoDB具有水平可扩展性,有助于减少工作量并轻松扩展你的业务。
可管理性:数据库不需要数据库管理员。因为MongoDB相当用户友好,所以开发人员和管理员都可以使用它。
速度:简单查询的高性能。
灵活性:用户可以在MongoDB上添加新的列或字段,而不会影响现有的行或应用程序的性能。
不符合ACID:作为NoSQL数据库,MongoDB不符合ACID。
MongoDB Atlas(新功能):MongoDB最近将MongoDB Atlas全球云数据库技术添加到其产品中。此功能使用户可以通过AWS,Azure或GCP部署完全托管的MongoDB。MongoDB Atlas使用户可以使用驱动程序,集成和工具来减少管理数据库所需的时间。
谁应该使用它?对于具有快速增长的业务或没有清晰的架构定义的数据库(即大量非结构化数据)的企业,MongoDB是一个不错的选择。如果你无法为数据库定义模式,或者发现自己对数据模式进行了非规范化,或者数据需求和模式不断发展(例如移动应用,实时分析,内容管理系统等), MongoDB对你而言可能是一个不错的选择。
Apache Cassandra
Apache Cassandra(或Cassandra DB)最初是Facebook的产品,但在2008年,Facebook将其作为免费的开源NoSQL数据库系统向全球发布。以下是Cassandra的一些特点:
免费和开源:Facebook将Cassandra开源后,Apache于2010年接管了该项目。
高度可扩展:Cassandra受益于“无大师设计”。这意味着其所有节点都是相同的,从而简化了操作,因此易于扩展到更大的数据库体系结构。
在任何地方都有效:用户可以从所有Cassandra节点进行读写。
快速的读写:Cassandra的设计通过其分布式的,高度可用的组织极大地提高了读写命令的速度,即使在大型项目中也可以保持极高的读写速度。
不符合ACID:作为NoSQL数据库,Cassandra不符合ACID,而是由Cassandra提供原子化、独立和长期的事务,来保持一致性。
对SQL的支持:尽管不兼容ACID,但Cassandra确实通过类似于SQL的DDL,DML和SELECT语句为SQL提供了一些支持。
更新和删除数据不佳:Cassandra并未针对更新和删除数据进行优化。
提供出色的数据保护:Cassandra具有提交日志设计,可确保数据不会丢失。它还具有备份/还原功能,从而增加了额外的数据保护。
数据和节点功能的冗余:Cassandra提供恒定的正常运行时间,并消除了单点故障。
谁应该使用它?Cassandra常常与IoT(物联网)技术一起使用,因为它提供了快速、实时的洞察。它擅长编写基于时间的日志活动,错误日志记录和传感器数据。如果您需要快速的读写处理,Cassandra可能是较好的选择。对于那些希望在NoSQL数据库上使用类似SQL的数据类型的人来说,Cassandra也非常有用。
Google Cloud BigTable
作为Google产品,Google Cloud BigTable不是免费的,但是它具有明显的优势,同样值得一试。
低延迟:据Google称,BigTable提供了一致的10毫秒以下延迟。
复制:通过复制,当发生区域故障时,BigTable可提供更高的可用性,持久性和弹性。
机器学习:BigTable为机器学习提供了存储引擎。
易于集成:与开源数据分析工具很好地集成。
高度可扩展:Google BigTable可以处理数百PB规模的海量数据源。
通过集成进行全面管理:与MongoDB Atlas一样,BigTable进行了全面管理,从而减少了工作量要求。它还与许多平台即时集成,从而简化了加载数据所需的ETL流程。
与Google服务高度兼容:作为Google产品,BigTable与Google旗下的其他服务很好地集成在一起。
什么时候应该使用?Google称,BigQuery非常适合金融科技、物联网和广告技术等。对于金融科技,你可以创建欺诈模式检查并查看实时交易信息。你还可以保存和合并金融市场数据,交易活动等。对于物联网,你可以抓取和了解从传感器记录的大量实时时间序列数据,以创建dashboard和有价值的分析。对于广告,你可以收集大量的客户行为数据,以找到可用于营销活动的模式。
Apache HBase
作为根据Google BigQuery建模的数据库,Apache Hbase开发的出发点就是处理大型数据集。以下是HBase的一些特点:
开源和免费:Apache HBase是由Apache管理的开源、免费的NoSQL数据库系统。它以Google Cloud BigTable为模型,在Hadoop分布式文件系统(HDFS)之上提供类似于BigTable的功能。
处理大型数据:HBase是专门为管理大型数据集而创建的。
跨集群扩展:Hbase在跨集群扩展方面非常出色。聚类与聚类算法有关,聚类算法常被用于机器学习,从大量数据中得出结论。
数据管理:HBase将行组织为“区域”。区域确定如何将表划分成一个群集的多个节点。如果其中一个区域太大,则HBase会自动将其分解,以将负载平均分配到多台服务器上。
适用于非结构化和半结构化数据:作为NoSQL数据库,HBase是存储半结构化和结构化信息的理想选择。
一致性:HBase提供了快速,一致的读写命令处理。执行写操作后,对数据的所有读请求将产生相同的响应。
故障转移:HBase使用复制来提供故障转移,从而减少或消除了系统故障对用户的负面影响。
分片:HBase为表提供自动和可配置的分片。
什么时候应该使用?Apache HBase网站建议“在需要对大数据进行随机,实时读写访问时”使用HBase。该数据库旨在承载海量信息表,其中包括数十亿行和数百万列。
介绍完了这些数据库系统,如果你想要找到一份数据领域相关的工作,那么首先一定要学习好SQL。其使用范围之广、需求量之高、以及难以替代性都说明了SQL是数据领域里最为通用的语言。
而如果你想跳出“自学的魔咒”,短时间内快速掌握SQL、应对面试,让专业的SQL面试官来指导你,就来报名MarTechApe推出的《SQL面试冲刺课》吧!
MarTechApe联合亚马逊商务智能工程师(Amazon Business Intelligence Engineer)—— Cindy老师,开设了SQL特训课,将行业内所需SQL技能和面试考点浓缩成6个小时的课程内容,让你短时间就能实现SQL能力质的飞跃!
前3小时全方面提升你的SQL能力,用SQL完成一系列的数据分析操练,真正学会SQL编程语言,而不是“只知道个大概”。
后3小时深入辅导Google、Facebook、Amazon、Apple、Uber、Airbnb等知名公司的SQL面试真题,总结不同公司的SQL出题风格。让你从此不再胆怯SQL面试题!
课程大纲
Introduction to SQL | SQL基本概念
SQL introduction, basic concept of relational database
SQL usage in work, transactional database, analysis database
SQL generations:
Oracle
SQL Server
MySQL
Postgres
Redshift
Basic SQL | 1小时SQL基本语句与功能应用
Basic SQL -1:
SELECT
LIMIT
WHERE
Basic SQL -2: Comparison
LIKE
IN
BETWEEN
IS NULL
Basic SQL -3:
Boolean ( AND, OR, NOT)
ORDER BY
Basic SQL -4:
Aggregation ( COUNT, SUM, MIN, MAX, AVG),
GROUP BY
Basic SQL -5:
HAVING
DISTINCT
Basic SQL -6: Case
Intermediate SQL | 2小时SQL进阶语句与功能应用
Intermediate SQL -1: Joins
NNER
OUTER
LEFT
RIGHT
JOIN USING WHERE or ON
Intermediate SQL -2:
UNION
JOIN with comparison
JOIN on multi-key, self join
Intermediate SQL -3:
Data types
Data format
String function
Window function
Intermediate SQL -4:
Primary key
Index
Sort key
Distribution key
SQL Interview Questions | 3小时SQL面试真题详解
Deep dive into SQL interview questions from major Tech companies including but not limited to:
Google
Amazon
Apple
Facebook
Cracking the SQL Interviews | 2小时SQL模拟面试、答疑、面试经验分享
Live Q&A
Interview tips on SQL online Test (e.g., Live interview, CoderPad)
SQL challenges in the real business world
授课老师
Cindy老师
Amazon亚马逊美国担任商务智能工程师(Business Intelligence Engineer)
亚马逊SQL面试官
课程形式
3小时SQL系统性知识培训 + 3小时SQL真题详解
录播课程+群内答疑,一经购买,可永久回看。
专属课程学习小组,持续SQL真题讨论、学习经验分享。
课程价格
只购买3小时SQL系统性知识培训:原价149美元/人
只购买3小时SQL真题特训:原价149美元/人
购买6小时全套课程:原价249美元/人
官网美元购买通道:
*我们提供标准Invoice,可用于企业报销
如果需要人民币支付,请扫描下方二维码,联系小助手进行购课。
购买后,请联系小助手,加入SQL特训班专属课程群:
想要快速提高你的SQL能力,就快来报名吧!
坚持学习,保持职场竞争力,选择MarTechApe!