如何向祖母解释SQL和NoSQL之间的区别

图片

开发人员做出的最重要决定之一就是要使用哪个数据库。 多年来,选项一直限于支持结构化查询语言(SQL)的各种关系数据库选项。 其中包括MS SQL Server,Oracle,MySQL,PostgreSQL,DB2等。

在过去的15年中,作为No-SQL方法的一部分,市场上出现了许多新数据库。 这些包括键值存储(例如Redis和Amazon DynamoDB),宽列数据库(例如Cassandra和HBase),文档存储(例如MongoDB和Couchbase)以及图形数据库和搜索引擎(例如Elasticsearch和Solr)。

在本文中,我们将尝试了解SQL和NoSQL,而无需深入了解它们的功能。
此外,我们将在此过程中带来一些乐趣。

解释Granny SQL


奶奶,想象我不是你唯一的孙子。 相反,爸爸妈妈像兔子一样彼此相爱,他们有100个孩子,然后又收养了50个孩子。

因此,您爱我们所有人,并且不想忘记我们的任何名字,生日,最喜欢的冰淇淋的口味,衣服的尺寸,爱好,配偶的名字,后代的名字以及其他非常重要的事实。 但是,让我们面对现实吧。 您今年85岁,美好的回忆简直无法应付。

幸运的是,我是您孙辈中最聪明的,可以为您提供帮助。 所以我来到你家,取出几张纸,并要求您先烘烤饼干。

在一张纸上,我们列出了一个名为“ 孙子 ”的列表。 每个孙子都记录有一些关于他的基本信息,包括一个唯一的编号,该数字现在将指示他是哪种孙子 。 另外,为了便于组织,我们在列表顶部写出命名属性,以便我们始终知道此列表包含哪些信息。
编号生日最后一次访问服装尺寸最喜欢的冰淇淋被采纳
1个吉米1992年9月22日2019/01/01大号薄荷巧克力错误的
2杰西卡(Jessica)1992年7月21日2018/02/22中号坎road的路是真的
...继续列出!
孙子名单

一段时间后,您了解了所有内容,列表几乎完成了! 但是,您转向我说:“我们忘了为配偶,爱好和孙子们增加一个地方!” 但是,不,我们没有忘记! 这进一步,需要一张新纸。

所以我拿出另一张纸,在上面我们称为“ 配偶名单”。 我们再次在列表顶部添加对我们重要的属性,然后开始添加各行。
编号grandchild_id生日
1个2约翰1988年1月1日
29费尔南达1985年5月5日
...更多配偶!
配偶名单

在此阶段,我向祖母解释说,如果她想知道谁与谁结婚,则只需将孙子列表中的id与配偶列表中的grandchild_id进行匹配。

几打饼干后,我需要小睡一下。 “你可以继续吗,奶奶?” 我要去睡个午觉。

我几个小时后回来。 你真酷,奶奶! 除了爱好列表,其他所有内容看起来都很不错。 名单上大约有1000个爱好。 其中大多数是重复的。 发生了什么事
grandchild_id嗜好
1个骑自行车
4骑自行车
3骑自行车
7跑步
11骑自行车
...继续!

对不起,我完全忘了说! 使用单个列表,您只能跟踪兴趣爱好 。 然后,在另一个列表中,我们需要跟踪从事此兴趣爱好孙辈 。 我们将其称为“一般列表” 。 看到您不喜欢它,我开始担心并返回列表模式。
编号嗜好
1个骑自行车
2跑步
3游泳
...更多的爱好!
爱好清单

有了兴趣爱好列表后,我们将创建第二个列表,并将其称为“ 孙子兴趣爱好 ”。
grandchild_idhobby_id
41个
31个
72
...更多!
孙子兴趣爱好总表

完成所有这些工作后,祖母现在有了一个很酷的记忆系统,可以追踪她整个大家庭。 然后为了延长拘留时间,她问了一个神奇的问题:“你从哪里学到的?”

关系数据库


关系数据库是一组形式化描述的表(在我们的示例中为表格),您可以从表中访问数据或以各种方式收集数据 ,而不必重新组织数据库表。 关系数据库有许多不同的类型,但是不幸的是,纸上的清单不是其中之一。

最流行的关系数据库的一个显着特征是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数据库以排除关系数据库中使用的表格关系的方式对数据进行建模。 这些数据库由于其明确的可扩展性要求(例如Facebook),在需要基于云的数据库集群的公司中于2000年代初开始流行。 在此类应用程序中,数据一致性远不如性能和可伸缩性重要。

最初,NoSQL数据库通常用于利基数据管理任务。 基本上,当涉及到Web和云应用程序时,NoSQL数据库处理并分发了大量数据。 使用NoSQL的工程师还喜欢灵活的数据方案(或完全不使用),因此可以在更新的应用程序中进行快速更改。

NoSQL的主要功能:

  • 存储数据的方式非常灵活。
  • 扩展到集群
  • 可能的一致性/分配顺序
  • 使用唯一键识别的文档

详细比较


MySQL需要一个特定的结构化框架。
NoSQL允许您将任何数据保存在“文档”中。

MySQL支持一个庞大的社区。
NoSQL的社区很小且发展迅速。

NoSQL易于扩展。
MySQL需要更高的可管理性。

MySQL使用SQL,这在许多类型的数据库中都使用。
NoSQL是具有流行实现的基于设计的数据库。

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

MySQL有许多出色的报告工具。
NoSQL有一些难以标准化的报告工具。

MySQL可能会发布大数据的性能问题。
NoSQL在大数据上提供了出色的性能。

想法8base


在我工作的8base处,我们为每个项目的工作区提供了AWS上托管的Aurora MySQL关系数据库。 尽管当您的应用程序需求需要高性能和可伸缩性时,NoSQL是合乎逻辑的选择,但是我们相信,在创建SaaS应用程序和其他业务软件时,必须由DBMS提供严格的数据一致性。

我们认为,对于创建需要报表,交易完整性和定义明确的数据模型的业务应用程序的初创企业和开发人员而言,在关系数据库上进行投资是正确的选择。

在此处了解有关使用Aurora,Serverless和GraphQL和8base.com进行开发的更多信息。

Source: https://habr.com/ru/post/zh-CN467283/


All Articles