@程序员,如果你的奶奶问你什么是 SQL 和 NoSQL,你会如何浅显易懂地向她解释清楚呢?

作者 | SebastianScholl

译者 | 刘静,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

开发人员必须做出的最重要的选择之一是使用什么数据库技术。多年来,这些选项仅限于支持结构化查询语言(SQL)的不同风格的关系数据库,包括MS SQL Server、Oracle、MySQL、PostgreSQL和DB2等。

在过去的15年中,许多新数据库作为NoSQL的一部分进入市场,包括键值存储(如Redis和Amazon DynamoDB)、宽列存储(如Cassandra和HBase)、文档存储(如MongoDB和Couchbase)、图形数据库和搜索引擎(如Elasticsearch和Solr)。

在本文中,我们将趣味性地专注于对SQL和NoSQL的深入解读。

向奶奶解释SQL

奶奶,想象我不是你唯一的孙子。相反,妈妈和爸爸像兔子一样彼此相爱,有100个孩子,然后又收养了50个孩子。现在,你爱我们所有人,永远不会忘记我们的任何名字、生日、最喜欢的冰淇淋口味、服装尺寸、爱好、配偶的名字、后代的名字以及其他超级重要的事。

但是,让我们面对现实吧!你已经85岁了,对旧时尚的美好记忆是不够的。

幸运的是,我——你孙子中最聪明的人——可以提供帮助。所以我来到你的房子,拿出几张纸,并要求你在我们开始前烤一些饼干。

在一张纸上,我们列出了一个名为Grandchildren的列表。每个孙辈都会被记录下来一些关于他们的基本信息,包括一个唯一的号码。从现在开始,这个数字将表示他们是哪个孙辈。此外,为了有条理,我们在列表顶部写出命名属性,以便我们始终知道此列表包含的信息。

孙子名单

过了一段时间,你就熟悉了它,并且几乎完成了列表!但是,你转向我并说:“我们忘了为配偶、爱好、孙子们等信息预留空间!”所以接下来需要一张全新的纸。

所以我拿出另一张纸,在这一张纸上,我们列出了配偶名单。同样,我们在列表顶部添加我们关注的属性并开始添加行。

配偶名单

在这一点上,我对奶奶解释说,如果她想知道谁娶了谁,她只需要将孙辈列表中的id与配偶列表中的孙辈id匹配即可。

但是,在我打了个小盹回来后却发现,这张纸上只剩下了爱好列表,其他都被“杀”掉了!

爱好列表

对不起,我忘了告诉你......使用一个列表,我们只需跟踪爱好,然后在另一个清单上,我们需要追踪那些有这些爱好的孙辈!我们将其称为“加入列表”。看到你明显感到沮丧,我感觉很糟糕并且跳回列表模式。

一旦得到了我们的爱好列表,我们就会制作第二个列表并称之为孙辈的爱好。

孙辈的爱好名单

在完成所有这些工作之后,奶奶现在就拥有了一个大象级的记忆系统,用于跟踪她那个荒谬的大家庭。然后,她问了一个神奇的问题:“你从哪里学会做这一切的?”

关系数据库

关系数据库是一组正式描述的表(在我们的示例中是列表),从这些表中可以以许多不同的方式访问或重新组装数据,而无需重新组织数据库表。有许多不同类型的关系数据库——可惜我们上面所列的纸,并不是其中之一!

最流行的关系数据库的是称为SQL(标准查询语言)的查询语言。这意味着,如果奶奶将她的记忆系统升级到计算机,她就能快速回答诸如“谁去年没有拜访过我?结婚了吗?有什么爱好?”之类的问题。

世界上最流行的SQL数据库管理系统选择是MySQL,它是开源的,实现为基于Web的软件应用程序的关系数据库管理系统(RDBMS)。

MySQL的一些关键功能包括:

  • 它是众所周知的、常用的、并经过全面测试。

  • 有很多合格的开发人员在SQL和关系数据库方面经验丰富。

  • 数据存储在各种表中,允许使用主键和外键轻松关联。

  • 它易于使用和高性能,是大型和小型企业的理想选择。

  • 源代码符合GNU通用公共许可协议。

现在,忘记一切。

向奶奶解释NoSQL

奶奶,我们的家庭是巨大的——有150个孙子孙女!其中许多人已婚,有自己的孩子,喜欢各种不同的爱好和其他东西。在你这个年纪,几乎不可能记住我们所有人的一切,所以你需要一个记忆系统!

幸运的是,我可以提供帮助——不希望你忘记我的生日,最喜欢的冰淇淋口味这些。所以我跑到拐角的商店,拿起一本作文笔记本,然后回到你家。

我做的第一步是在笔记本前面用粗体字母写“孙子”。接下来,我翻到第一页,开始写下你应该记住的关于我的一切。几分钟后,页面看起来像这样。

{  "_id":"dkdigiye82gd87gd99dg87gd","name":"Cody","birthday":"09-12-2006","last_visit":"09-02-2019","clothing_size":"XL","favorite_ice_cream":"Fudge caramel","adopted":false,"hobbies":[  "video games","computers","cooking"],"spouse":null,"kids":[  ],"favorite_picture":"file://scrapbook-103/christmas-2010.jpg","misc_notes":"Prefers ice-cream cake on birthday instead of chocolate cake!"
}

我:“看起来我们在这里完成了!”

奶奶:“等等,其他所有的孙子们呢?”

我:“哦,对,他们。只需将合成书的单页专门用于每一页。“

奶奶:“我是否需要为每个人写下所有相同的信息,就像我为你做的那样?”

我:“不需要!在这里,让我告诉你怎么做。”

我将笔从奶奶手中拿出来,你翻到一个新的页面,然后快速写下你最不喜欢的堂兄的记录。

{  "_id":"dh97dhs9b39397ss001","name":"Tanner","birthday":"09-12-2008","clothing_size":"S","friend_count":0,"favorite_picture":null,"remember":"Born on same day as Cody but not as important"
}

很简单吧!每当奶奶需要记住关于其中一个孙辈的事情时,她只需要在孙辈笔记本中翻到他们的页面。所有关于它们的信息都将存储在他们的页面上,她可以快速更改和更新。

然后,她又问了一个神奇的问题,“你在哪里学的这个?”

NoSQL数据库

存在许多NoSQL (“不仅仅是”SQL)数据库。在我们的示例中,我们举例说明了文档数据库NoSQL数据库以排除关系数据库中提供的表格关系的方式建模数据。这些数据库在21世纪初由于其庞大的扩展要求(即Facebook)而需要基于云的数据库集群的公司中变得流行。在这些应用程序中,拥有数据一致性远不如性能和可伸缩性重要。

在早期,NoSQL数据库经常被用于超级集中的数据管理任务。主要是在Web和云应用程序方面,NoSQL DB已被证明可以处理和分发大量数据。使用NoSQL构建的工程师也喜欢灵活的数据模式(或完全缺乏),因此可以快速更改正在更新的应用程序。

NoSQL的主要功能包括:

  • 一种高度灵活的持久化数据方式;

  • 水平扩展到群集;

  • 持久性/传播的最终一致性;

  • 使用唯一键标识的文档。

面对面比较

MySQL需要定义的结构化架构。

NoSQL允许“ 文档” 中任何数据的持久性。

MySQL有一个庞大的社区支持它。

NoSQL有一个小而快速增长的社区。

NoSQL具有易于扩展的特点。

MySQL需要更多托管可伸缩性。

MySQL利用SQL,它被用于多种数据库类型。

NoSQL是一个基于设计的数据库,具有流行的实现。

MySQL使用标准查询语言(SQL)。

NoSQL不使用标准查询语言。

MySQL有许多出色的报告工具。

NoSQL很少提供难以标准化的报告工具。

MySQL可以为大数据提供性能问题。

NoSQL在大数据方面表现出色。

在我的公司内,我们为每个项目的工作区配置了一个在AWS上托管的Aurora MySQL关系数据库。虽然当应用程序需求需要大数据级性能和可伸缩性时,NoSQL是一个合理的选择,但我们认为,在构建SaaS应用程序(软件即服务)和其他商业软件时,RDBMS强制执行的严格数据一致性是必要的。

在我们看来,对于构建业务应用程序的初创企业和开发人员(需要报告、事务完整性和定义良好的数据模型)来说,将时间投入到关系数据库是正确的选择。

原文:https://medium.com/swlh/explaining-sql-and-nosql-to-grandma-9d7a69378be8

本文为 CSDN 翻译,转载请注明来源出处。

【END】

Python为何能被这么多人追捧?

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

 热 文 推 荐 

☞2019 互联网月饼大赏!阿里开动物园,腾讯秀表情包,网易游戏最会玩!

☞顶配 12699 元、没有 5G,“浴霸三摄”的 iPhone 到底长什么样?

告别写笔记,AI 实时转写黑科技来了!

☞2亿日活,日均千万级视频上传,快手推荐系统如何应对技术挑战?

☞Docker容器化部署Python应用

☞给面试官讲明白:一致性Hash的原理和实践

☞预警,CSW的50万枚尘封BTC即将重返市场?

☞她说:行!没事别嫁程序员!

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

程序员该如何向奶奶解释 SQL 和 NoSQL?相关推荐

  1. 如何向奶奶解释SQL与NoSQL的区别

    本文介绍SQL和关系代数的起源,没有干货,请谨慎阅读. 如何向你奶奶解释SQL和NoSQL 最近Medium上出现了一个面试题:如何向你奶奶解释SQL和NoSQL的区别.我看作者是用自己的结构化的家族 ...

  2. 解释SQL和NoSQL

    如何向你奶奶解释SQL和NoSQL 最近Medium上出现了一个面试题:如何向你奶奶解释SQL和NoSQL的区别.我看作者是用自己的结构化的家族谱来比喻sql和nosql的区别的,写的挺好就是有点啰嗦 ...

  3. 震惊!阿里的程序员竟被一个简单的 SQL 查询难住了!

    作者 | 唐磊 责编 | Carol 来源 | 程序猿石头 封图 | CSDN 付费下载于视觉中国 最近工作上遇到一个"神奇"的问题,或许对大家有帮助,因此形成本文. 问题大概是, ...

  4. [转]后端程序员必备:书写高质量SQL的30条建议

    以下文章来源于捡田螺的小男孩 ,作者捡田螺的小男孩 转载:<后端程序员必备:书写高质量SQL的30条建议> 前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中 ...

  5. sql 只取一条记录_后端程序员必备:书写高质量SQL的30条建议

    前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助. 1.查询SQL尽量不要使用select *,而是select具体字段. 反例子: sel ...

  6. 解放程序员双手!GPT-3自动生成SQL语句 | 代码开源

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI "无所不能"的GPT-3,现在又来解放程序员们的双手了. 像这样,只需用简单的英文问下GPT-3"上个月注册了 ...

  7. 后端技术:Java 程序员常犯的 10 个 SQL 错误!

    Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用"模式-模式" ...

  8. 程序员需要了解的十个高级SQL概念

    1.常见表表达式(CTEs) 如果您想要查询子查询,那就是CTEs施展身手的时候 - CTEs基本上创建了一个临时表. 使用常用表表达式(CTEs)是模块化和分解代码的好方法,与您将文章分解为几个段落 ...

  9. 为程序员写的Reed-Solomon码解释

    英文原文:Reed–Solomon codes for coders 翻译参照: Felix021 参考:AN2407.pdf WIKI:里德-所罗门码 实现:Pypi ReedSolo 译注:最近看 ...

最新文章

  1. 基于Matlab的声波信号处理,基于声卡和Matlab平台的语音信号增强处理系统
  2. design principle:java 回调与委派/委托机制
  3. 裂墙推荐!IntelliJ IDEA 常用插件一览,让效率成为习惯
  4. 知道的C君带你学语言的作业答案,知到《C君带你玩编程》2020章节测试(含答案)...
  5. [UIKit学习]03.关于UILable
  6. Ruby Tip:定义索引操作符
  7. uni-app 项目创建 (简单+明确!!!)
  8. 苹果手机显示有4g上不了网络连接服务器,苹果移动数据为什么叫蜂窝网络_蜂窝移动数据和4g有什么区别...
  9. libxml2.7.8 c++ 解析xml文件 中文转换
  10. Win7 系统还原被管理员禁用
  11. 【时间序列】Holt-Winters 指数平滑方法及其 Python 实践
  12. Some weights of the model checkpoint at bert_pretrain were not used when initializing BertModel
  13. MyBatis学习总结(三)
  14. 前端技术的趋势和最新的发展
  15. GPS定位系统普遍存在的问题
  16. 搭建kafka集群并使用springboot 整合
  17. 《朱赟的技术管理课》核心笔记
  18. adb 删除文件时提示Read-only file system问题【not in /proc/mounts】
  19. 王垠:我和权威的故事
  20. 外网映射工具(操作很简单)

热门文章

  1. jQuery函数$(window).load事件
  2. 获取Windows mobile 开始菜单里最近打开的程序(Recent Programs)
  3. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·001【数据库基本概念、MySQL安装与介绍】
  4. [PyTorch] 损失函数
  5. linux 查看端口战役,漫画 :Apache Nginx80 端口争夺战
  6. 下载m3u8加密视频的一些经验和小细节
  7. c语言手机教程,【图片】【教程】手机c语言入门与手机c编程【mrp吧】_百度贴吧...
  8. 网站地图生成器_10个相见恨晚的PPT网站 让你看一眼就心动
  9. 数据结构与算法——广度搜索BFS
  10. sqlserver2000内存突破4g_友商都上16G,华为手机为何一直用8G内存?网友:效仿iOS...