数据是数据科学所有子领域的基础。无论您要建造的产品用途如何,都需要获取和分析数据。通常,您需要的这些数据存储在DBMS(数据库管理系统)中。

本文来自《数据黑客》,登录官网可精彩资讯和文章。

要与DBMS进行交互和通信,您需要使用其语言或它可以理解的语言。与DBMS进行交互的语言是SQL(结构化查询语言)。

近年来,在数据库领域出现了另一个术语,即NoSQL数据库。如果您刚开始学习数据科学,则可能听说过SQL和NoSQL数据库。

但是,它们之间有什么区别以及何时使用它们?

让我们从最简单的知识开始,为什么我们有两种与数据库交互的方法?

简单来说,SQL和NoSQL与不同类型的数据库交互,SQL是用于与关系数据库进行交互的方法,而NoSQL用于与非关系型数据库进行交互。

关系数据库

数据存储在关系数据库的不同表中,每个表包含多个记录 (行),这些表使用一种或多种关系相互连接。

键定义表之间的关系。键是表字段(列),其中包含每个记录的唯一值。如果将字段定义为表的主键,则该字段可以包含在多个表中,并且可以用于同时访问不同的表。一旦使用了主键,并将其表连接到另一个表,在另一个表中将其称为外键。

例如,下图显示了航空公司数据库的一部分。我们有两个表,飞行员表和航班表。这两个表已连接,用作飞行员表“PilotId”中的主键。我可以使用飞行员的ID来访问飞行员表中有关飞行员的信息,以及该飞行员正在处理的航班。

因此,在飞行员表中,PoilotId是主键,而在Flights表中则是外键。 PilotId在这里用于形成两个表之间的关系。

非关系数据库

与关系数据库不同,非关系数据库(NoSQL数据库)不在表和记录中存储数据。

在非关系型数据库中,针对特定要求设计和优化了数据存储结构。

与关系型数据库使用SQL查询语言不同,NoSQL数据库使用对象关系映射(ORM)来促进与其数据的通信。

NoSQL数据库有四种流行类型:面向列,面向文档,键值对和图形数据库。这些类型可以单独使用或组合使用,选择将取决于您的应用程序和需要存储的数据类型。

1. 面向列(Column-oriented)的数据库

顾名思义,在面向列的数据库中,数据被存储并组织为列。如果您需要存储稀疏数据,则这种类型的数据库很有用。稀疏数据更趋向于面向列的数据组织方法。

2. 面向文档(Document-oriented)的数据库

在面向文档的数据库中,排序的数据的结构不需要严格。它实际上是文档结构中字段和数据值的集合。这些面向文档的数据库通常存储为JSON字符串,并且可以使用YAML,XML或纯文本进行编码以保护数据。

使用面向文档的数据库的好处是,您不必使所有文档都使用相同的结构。这使开发人员可以自由地对同一数据库中的不同数据类型进行排序。在Python中,MongoDB是面向文档的数据库的最佳示例。

3. 键值(key-value)数据库

如果您熟悉Python,则可以将键值数据库理解为Python字典。数据库中的每个数据对象都将存储为一对键和值。

4. 图形数据库

当数据高度互连时,您将需要使用一个数据库来有效地处理数据关系。图形数据库被认为是NoSQL数据库中最复杂的数据库。但是,它非常通用,适合许多应用场景。

如何在SQL和NoSQL之间选择?

那么,我们如何在SQL和NoSQL数据库之间进行选择?

为了回答这个问题,您需要考虑四个方面:灵活性,可伸缩性,一致性和可用技术。

  1. 灵活性: 当您的数据具有不同的结构和不同的类型时,NoSQL数据库为您提供了更多自由来设计架构并在同一数据库中存储不同类型的数据。另一方面,SQL数据库具有更严格的结构和架构。
  2. 可扩展性: 您见过日本的停车场电梯吗?它允许将车停在另一辆车的上方而不是旁边。现在,我想问你一个问题,建造更多电梯可以到达的楼层或者建造更多的电梯,哪个更有效?SQL数据库是垂直伸缩的,这意味着您可以向其添加级别以增加其负载。NoSQL数据库是水平伸缩,您可以通过将工作划分到多个服务器上来增加其负载。
  3. 一致性:SQL数据库具有高度一致的设计,NoSQL数据库可以一致也可以不一致。例如,MongoDB是一致的,而Cassandra之类的数据库则不是。
  4. 可用技术:您可能会考虑的一个方面是数据库技术的当前发展阶段。由于SQL数据库已经存在了很长时间,因此它比NoSQL数据库更加发达。因此,对于初学者来说,从SQL开始然后过渡到NoSQL可能是最佳选择。

根据经验,如果您要使用RDBMS(关系数据库管理系统),要分析数据的行为或要构建自定义的仪表盘,则SQL是更好的选择。而且,SQL通常允许更快的数据存储和恢复,并且可以处理更加复杂的查询。

如果您想扩展RDBMS的标准结构,或者需要创建一个灵活的架构,NoSQL将是更好的选择。当您存储的数据和日志记录来自分布式节点时,或者只需要临时缓存数据,NoSQL数据库会更好。

结论

我不能说SQL绝对比NoSQL更好,它们都有自己的优点和缺点,您应该根据要开发的产品和处理的数据结构,选择最适合的工具。

SQL数据库较旧,因此需要进行更多的研究和建立更稳健的模式设计;NoSQL数据库具有灵活的架构,它们易于扩展,灵活且相对易于使用。

那么,您的数据要求是什么?您的数据结构合理吗?您正在处理大量数据吗?始终聆听您的数据,您将做出正确的选择。

来源:Medium
作者:Sara A. Metwalli
翻译校对:数据黑客
原文标题:Databases 101: SQL vs. NoSQL: Which Fits Your Data Better?

数据黑客:专注金融大数据,聚合全网最好的资讯和教程,提供开源数据接口。

我们聚合全网最优秀的资讯和教程:

  1. 金融大数据
  2. 机器学习/深度学习
  3. 量化交易
  4. 数据工程
  5. 编程语言,Python,R,Julia,Scala,SQL

我们提供开源数据接口:

  1. 下载国内和国外海量金融数据
  2. API接口,将数据整合到您的平台

数据库入门:如何选择SQL和NoSQL数据库相关推荐

  1. 大数据入门学习:SQL与NOSQL数据库

    这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...

  2. EF Core:一统SQL和NoSQL数据库

    推出EF Core的初衷之一,就是开发出一种可在很少甚至不更改代码的情况下使用SQL和NoSQL数据库的模型.Microsoft正向此目标迈出第一步,发布了用于Azure Cosmos DB的实验性E ...

  3. SQL与NoSQL数据库入门基础知识详解

    这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...

  4. 深度解析SQL和NoSQL数据库,掌握主流数据库【两万字解析】

    大家好,我是辣条. 大家国庆玩的快乐否,玩开心的兄弟萌评论扣1,觉得不怎么样的兄弟萌扣2,我希望看到大家都是扣1呦,觉得这篇文章对你有帮助的话可以给辣条一个三连呦. 目录 数据库高级特性 一.存储引擎 ...

  5. 如何选择合适的NoSQL数据库

    与传统的表格(或SQL)数据库相比,NoSQL数据库为软件开发人员和其他用户提供了更高的运行速度和更高的灵活性. NoSQL数据库使用的数据结构 - 键值对,宽列,图形或文档 - 与关系数据库使用的数 ...

  6. 天翼云从业认证(1.3)了解数据库的概念、SQL、关系型数据库、大数据和 NoSQL 数据库

    数据库的概念 SQL 简单举例 create \ insert \ update \ delete\select WHERE\BETWEEN\IS NULL\LIKE avg\count\max gr ...

  7. 排名前十的sql和nosql数据库

    本排名根据DB Engines的排行榜得来,该排行榜从人气上分析了市场上200个不同的数据库,这里一览Top 10. 无可争议的Top 3 Oracle.MySQL及Microsoft SQL Ser ...

  8. python提取数据库nosql_用 Python 写一个 NoSQL 数据库

    本文译自 What is a NoSQL Database? Learn By Writing One In Python. 完整的示例代码已经放到了 GitHub 上, 请 点击这里, 这仅是一个极 ...

  9. mysql数据库入门教程(1):数据库的相关概念,存储特点,软件安装教程,数据库启动,服务端登录退出

    1为什么使用数据库 使用 内存(数组,集合)存储数据,一断电容易消失数据. 使用文件存储数据,断电不消失.但存储大量数据时难以查找. 数据库:能实现数据持久化,方便查询 2数据库相关概念 DB(dat ...

最新文章

  1. [VC6] 图像文件格式数据查看器
  2. 如何告别那些没卵用的线上告警!
  3. 软件工程第二次作业——模仿主流网站:搜狗输入法
  4. php语言培训费用,PHP语言编程的优势在哪里
  5. 关于Spring的IOC和DI
  6. SAP License:物料账差异
  7. Python Excel到JSON的转换
  8. JS基础_js编写位置
  9. python自动发邮件mysql_python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密
  10. go mysql driver事务,Go 数据库事务的源码分析
  11. 计算机原理教程 pdf,《计算机组成原理》教程 概述.pdf
  12. Numpy向量化运算
  13. 光流与Lucas-Kanade 光流法
  14. 微信小程序打卡签到页面(有效果图)
  15. 百度热搜词词云图-python
  16. IT信息考证人,证书记得要延续 ITSS CISAW CISP PMP CISSP 证书延续 有效期
  17. Vue粒子特效使用教程(vue-particles插件)
  18. 通过AVAudioRecorder获取麦克风接收分贝
  19. 【php-fpm】重启、启动、关闭
  20. 解决Deprecated: Methods with the same name as their class will not be constructors in报错方案

热门文章

  1. 如何将自己的网站主页,提交到百度,使其可以在百度搜索中
  2. POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
  3. 主要行业的业务逻辑漏洞
  4. 网络python培训班
  5. java周记_Java学习周记week01
  6. 中国古代历史的十大破坏专家
  7. 陷入回忆个性伤感签名_爱不说满到自己快湮灭
  8. Unity实现触摸屏手势控制镜头旋转与缩放
  9. 关于句子embedding的一些工作简介(四)---- Quick Thoughts
  10. 一边在大厂一线搬砖、一边操着CTO的心搞开源:一位普通中年程序员的开源十年路