向奶奶解释SQL和NoSQL
开发人员必须做出的最基本的选择之一是使用什么数据库技术。许多年来,选择仅限于支持结构化查询语言(SQL)的不同类型的关系数据库。这些数据库包括MS SQL Server、Oracle、MySQL、PostgreSQL和DB2,仅举几例。
在过去的15年里,许多新的数据库作为No-SQL运动的一部分出现在市场上。这些数据库包括键值存储,如Redis和Amazon DynamoDB;宽列存储,如Cassandra和HBase;文档存储,如MongoDB和Couchbase;以及图形数据库和搜索引擎,如Elasticsearch和Solr。
在这篇文章中,我们专注于获得对SQL和NoSQL的高层次理解,而不是剥开任何不同供应商产品的功能。
另外,我们实际上是要尝试在做这件事时获得乐趣。
向奶奶解释SQL
奶奶,想象一下,我不是你唯一的孙子。相反,妈妈和爸爸像兔子一样相爱,生了100个孩子,然后又收养了50个。另外,想象一下保护性儿童服务并不存在,这可能是个好主意。
现在,你爱我们所有人,永远不会忘记我们的名字、生日、最喜欢的冰淇淋口味、衣服尺寸、爱好、配偶的名字、后代的名字,以及其他超级重要的事实。然而,让我们面对它。你已经85岁了,好的老式记忆力是无法满足的。
幸运的是,我--作为你的孙子辈中最聪明的人--可以帮忙。所以我来到你的房子,拿出几张衬纸,要求你在我们开始之前烤一些饼干。
在一张纸上,我们做了一个名为孙子的列表。每个孙子都会被写下一些关于他们的基本信息,包括一个独特的号码,从现在开始就表示他们是哪个孙子。此外,为了有条不紊,我们在列表的顶部写出命名的属性,以便我们始终知道这个列表包含哪些信息。
孙子女列表
运行结果是
一段时间后,你掌握了其中的规律,几乎完成了这个列表!但是,你转过头来对我说:"我不知道该怎么办。然而,你转身对我说:"我们忘了为配偶、爱好、孙子女添加空间!" 但不,我们没有! 这就是下一步,需要一张新的衬纸。
因此,我又拿出一张纸,在这张纸上,我们把名单命名为 "配偶"。同样,我们把我们关心的属性添加到列表的顶部,然后开始添加行。
配偶列表
| id | grandchild_id | name | birthday |
|----------------|---------------|----------|------------|
| 1 | 2 | John | 06-01-1988 |
| 2 | 9 | Fernanda | 03-05-1985 |
| …more spouses! | | | |
运行结果是
在这一点上,我向奶奶解释,如果她想知道谁和谁结婚了,她只需要将孙子列表上的id和配偶列表上的孙子id相匹配。
在吃了一打以上的饼干后,我需要打个盹。"奶奶,你能从这里接手吗?" 我就去打了个盹。
几个小时后,我回到了地球。你杀了它,奶奶! 一切看起来都很好,除了兴趣爱好列表。有大约1000个爱好被列出。其中大部分是相同的;发生了什么?
对不起,我忘了告诉你了。使用一个列表,我们只需要跟踪嗜好。然后在另一个列表中,我们需要跟踪从事这些爱好的孙子们 我们将把这称为 "加入名单"。看到你明显感到沮丧,我感到很难过,于是又跳到了列表模式。
兴趣爱好列表
一旦我们有了我们的爱好列表,我们再做第二个列表,称之为孙子女的爱好。
孙子们的爱好列表
经过这些工作,奶奶现在有了一个大象级别的记忆系统,可以跟踪她那庞大的家庭。另外--为了让我坚持得更久--她问了一个神奇的问题:"你从哪里学会做这些的?"
关系型数据库
关系型数据库是一组正式描述的表(在我们的例子中是列表),从中可以访问或以许多不同的方式重新组合数据,而不必重新组织数据库表。有许多不同类型的关系型数据库--遗憾的是,衬纸并不是其中之一
最受欢迎的关系型数据库的一个标志特征是一种叫做SQL(结构化查询语言)的查询语言。意味着,如果奶奶将她的记忆系统升级为电脑,她就能迅速回答诸如 "谁在过去一年里没有来看过我,已经结婚,而且没有任何爱好?"
世界上最流行的SQL数据库管理系统的选择之一是MySQL,它是开源的。它主要是作为一个基于网络的软件应用的关系数据库管理系统(RDBMS)来实现的。
MySQL的一些主要特点包括。
它确实是众所周知的,常用的,并且经过了彻底的测试。
有很多合格的开发人员在SQL和关系数据库方面经验丰富。
数据被存储在不同的表格中,允许使用主键和外键(花言巧语的ID)轻松建立关系。
它易于使用且性能良好,使其成为大型和小型企业的理想选择。
源代码是在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!"
}
EN -> CN
{
"_id":"dkdigiye82gd87gd99dg87gd",
"姓名": "科迪"。
"birthday":"09-12-2006",
"last_visit":"09-02-2019",
"衣服_尺寸": "XL",
"favorite_ice_cream": "Fudge caramel",
"采用":false,
"爱好":[
"视频游戏",
"电脑",
"烹饪"
],
"配偶":null,
"孩子":[
],
"favorite_picture": "file://scrapbook-103/christmas-2010.jpg"。
"misc_notes": "生日时喜欢吃冰激凌蛋糕,而不是巧克力蛋糕!"
}
我:"看来我们到此为止了!"
祖母。"但是等等,其他的孙子孙女呢?"
我:"哦,对了,他们。只要把作文本的一页献给他们每个人就行了。"
祖母。"我需要像为你写的那样为每个人写下所有的信息吗?"
我:"不!只有在你愿意的情况下!来,我给你看看。来,让我给你看看。"
从奶奶手中夺过笔,你翻到新的一页,迅速为你最不喜欢的表妹写下记录。
{
"_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"
}
EN -> CN
{
"_id":"dh97dhs9b39397ss001",
"name": "Tanner",
"birthday":"09-12-2008",
"服装尺寸": "S",
"friend_count":0,
"favorite_picture":null,
"记住": "与科迪同一天出生,但没有那么重要"
}
这很容易! 每当奶奶需要记住某个孙子的情况时,她只需要翻到孙子笔记本中的他们那一页。所有关于他们的信息都将储存在他们的页面上,她可以快速更改和更新。
说完之后,她会问一个神奇的问题:"你从哪里学会做这个的?"
NoSQL数据库
存在许多NoSQL("不仅仅是 "SQL)数据库。在我们的例子中,我们例举了一个文档数据库。NoSQL数据库的数据建模方式不包括关系型数据库中提供的表格关系。这些数据库在21世纪初开始在那些由于巨大的扩展需求而需要基于云的数据库集群的公司中流行起来(例如Facebook)。在这样的应用中,数据的一致性远没有性能和可扩展性重要。
在早期,NoSQL数据库经常被用于超级集中的数据管理任务。主要是在网络和云应用程序中,NoSQL数据库已经被证明可以处理和分发大量的数据。使用NoSQL构建的工程师也喜欢灵活的数据模式(或完全没有),这样就可以快速改变经常更新的应用程序。
NoSQL的主要特点包括。
高度灵活的数据持久化方式
横向扩展到集群
持久性/传播的最终一致性
使用唯一键识别的文件
头对头的比较
MySQL需要一个定义好的、结构化的模式。
NoSQL允许持久化 "文档 "中的任何数据。
MySQL有一个巨大的社区支持它。
NoSQL有一个小而快速增长的社区。
NoSQL的特点是容易扩展。
MySQL需要更多的管理可扩展性。
MySQL利用SQL,它被用在众多的数据库类型中。
NoSQL是一种基于设计的数据库,有流行的实现方式。
MySQL采用了结构化查询语言(SQL)。
NoSQL不使用结构化的查询语言。
MySQL有许多奇妙的报告工具。
NoSQL的特点是报告工具很少,难以标准化。
MySQL可以为大数据提供性能问题。
NoSQL在大数据上提供出色的性能。
8base的想法
在我的公司,8base,我们为每个项目的工作空间提供了一个Aurora MySQL关系型数据库,它被托管在AWS上。当你的应用程序需要大数据级别的性能和可扩展性时,NoSQL是一个合理的选择,但我们认为,在构建SaaS应用程序(软件即服务)和其他商业软件时,RDBMS所执行的严格数据一致性是必要的。
对于构建商业应用的初创企业和开发者来说--那些需要报告、交易完整性和定义明确的数据模型的企业--将时间投入到关系型数据库的工作中,在我们看来,是正确的选择。
本文由mdnice多平台发布
网友评论