栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

〖Python 数据库开发实战 - MySQL篇②〗- 一文通解关系型数据库与非关系型数据库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

〖Python 数据库开发实战 - MySQL篇②〗- 一文通解关系型数据库与非关系型数据库

万叶集
 隐约雷鸣,阴霾天空。 
 但盼风雨来,能留你在此。 


前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS - 全栈 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 
 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
 如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


专栏系列(点击解锁)学习路线指引知识定位
Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。
爬虫入门与实战 更新中
数据分析篇 更新中
前端入门+flask 全栈篇 更新中
django+vue全栈篇 更新中
拓展-人工智能入门 更新中
网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录
    •  关系型数据库
      •  关系型数据库的历史
      •  关系型数据库的应用
      •  主流的关系型数据库
    •  非关系型数据库
      •  什么是非关系型数据库
      •  主流的 NoSQL 数据库
      •  NoSQL 数据库的应用场景

 关系型数据库

关系型数据库的定义:关系型数据库是数据库的一种类型,英文全称为 Relational database ,简称 “RDBMS” ,是指的使用了关系模型的数据库系统。

如果是百度查看具体的词条的话,得到解释会非常的抽象,搞得大家云里雾里最终也没明白什么是关系型数据库。

其实很简单,数据库是用来存放数据的,这一点大家都知道。如果将数据都写到一个数据文件里,比如说既有人员信息,又有交易记录等等,这样的数据文件就不是那么的好管理。数据乱七八糟的,数据库要经常去判断数据的归属类型,这样一来的话数据的读取速度就会变慢。

于是就有人想了一个办法:将数据分门别类的保存到不同的文件里面,这样就更好的管理数据了。如下:

  • 人员基本信息保存到名为 user_info 的文件里
  • 交易消费信息保存到 transaction 的文件里
  • 亲属关系信息保存到 mail_list 的文件里

以上数据分开单独存放,但是数据之间还是会有关联关系的。比如说 “人员信息” 与 “亲属关系” 就是有关联关系的,需要的时候可以从数据库多个数据文件里联合提取出数据,并不是数据拆分完之后就无法联合提取信息了。

所以 "关系型数据" 总结成一句话:数据分类存放在不同的文件里,数据之间是可以有关联关系的。 这么说,大家是否是不是就好理解关系型的数据库了呢?知识就是这样,一层窗户纸捅破了,也就都明白了。

写博客也是如此,没有必要去故弄玄虚。如果能把复杂的知识几句话讲明白,直指要害,这才是高超的水平。 也希望大家能够通过这一段关于数据库的学习,对数据库的理解会更加的深刻。

 关系型数据库的历史

这里其实有一个冷知识,那就是第一款关系型数据库到底是 IBM 的 DB2 还是 甲骨文 的 Oracle 。

其实准确的来说,关系型数据的理论 是 IBM 公司的 "System R" 团队提出来的 ,但是第一个 关系型数据库成品 却是 Oracle 公司做出来的;所以说世界上第一个关系型数据库是 甲骨文 的 Oracle 而不是 IBM 的 DB2 。

 关系型数据库的应用

刚刚我们提到过,关系型数据库是将数据分门别类的存储到不同的数据文件里面,这样就会省却数据库需要不停的判断数据归属类型的问题,所以由此数据的读取速度也就提升了。

速度提升之后,就可以往数据库里保存大量的数据,就算是成千上万的数据,数据库也可以轻松的去读写。(保存上亿的数据也是不在话下)所以说数据库文件的关系模型还是有好处的吧。

既然数据库能够保存大量的数据有能高速的去读写,那就没有理由不背大规模的使用,所以说呢关系型数据库才是最重要的数据库产品,在教育、商业、医疗、电信、金融领域都有大规模的使用。

比如网上购物会使用 “淘宝”、"京东"等线上购物平台,去医院看病会刷医保卡等等。这写业务的背后都有数据的身影,所以只有先掌握了数据库,才能开发出各种各样的系统。

讲到这里,大家也应该明白数据库系统的重要性了;我们现阶段将要学习的是单机的数据库,如果在大型网站上使用单机数据库在海量的并发请求下是支撑不起来的。就好比电商平台每年的 618 和 双11 的秒杀活动,所以可以将数据库联合起来做成集群,数据库节点变多了,那么就能应对大量的并发访问了。淘宝网的背后是三千多个数据库节点组成的集群来应对正常的电商业务,遇上 双十一 还要增加更多的数据库节点才能应对。

说这么多也是为了大家能够开拓技术视野,想大型系统是如何使用数据库的。大家都希望能够进入到 BAT 去工作,那就必须技术达到一定相应的水平才可以。(偷偷告诉你们,BAT 的工程师们每天操作的都是数据库集群)所以说啊,有一个开阔的技术视野和一个明确的目标对学技术的人来说是非常重要的。

OK,话题收回来。学习是分层次的,现阶段的首要任务就是学好 单机数据库 ,下一阶段再去深入的学习数据库的集群技术。饭要一口一口的吃,学习呢也要一步一步的来,既然明确了学习的路径,就应该从第一阶段踏踏实实的开始。

 主流的关系型数据库
  • DB2:商业版数据库,一般都是随着硬件服务器赠送给用户的。别看是赠送的,硬件服务器的价格那可是相当的贵啊。虽然 DB2 的性能非常的好,无奈时采购的成本实在是太高了。所以 DB2 只会在超大型的项目中才会见到,比如说电信以及金融领域。

  • Oracle:甲骨文的 “Oracle” 也是一款商业的数据库,采购成本没有 DB2 那么恐怖。它是按照 CPU 的数量、内核以及主频的高低来收费,还分为 1年、2年 … 的授权来区分,是按照这些因素来制定收费标准的。(1个CPU 永久的授权费是 17W人民币左右,对于中小心企业来说,价格还能接受,但是对于 BAT 这样的大型互联网公司的动不动就是几千台服务器集群来说,Oracle 的授权之处还是稍微有些肉疼的。)还有一个重要的点是, Oracle 是商业产品,不开放源代码。有的时候根据业务去定制模块是不行的,因此在一些大型企业的眼里 Oracle 反而不如一些开源免费的数据库好用。

  • MySQl:这个数据库是我们接下来要学习的内容之一;它是一款开源免费的产品,性能上比不上 “Oracle 与 DB2” ,但是贵在灵活。我们可以很方便的对 “MySQL” 进行二次开发。像 Facebook、Google、腾讯、百度这些企业都在大规模的使用 “MySQL” ,所以学习好 “MySQL” 前景还是非常好的。

  • SQL server :这款数据库是 微软出品,图形界面做的挺不错,而且在教育领域是让大家免费使用的。(很多大学在将数据库课程的时候用的就是这款数据库)上面三种数据库都是跨平台的,在各个操作系统上都能安装,唯独 SQL server 很特殊。早期微软出品的数据库只能安装在 Windows 系统,不支持 Linux 。所以也就造成了在生产领域没人会去使用,我是不建议使用。虽然说最近的 SQL server 也支持了 Linux 系统,但是长期没有人使用,当你遇到问题的时候在查找资料时也会遇到很多的困难,所以…还是算了吧。
 非关系型数据库

这个阶段除了关系型数据库之外,也要学习非关系型数据库。因为 SQL语句是来操作关系型数据库的,所以大家常常将非关系型数据库也叫做 NoSQL数据库。

 什么是非关系型数据库

什么是非关系型数据库呢?也不用去查百度,查了也看不懂。所以还是得一针见血直插要害的讲明白 NoSQL 数据库的概念。

NoSQL 数据库也是把数据分类存储到不同的数据文件里面, 但是数据之间是没有关联关系的,这是因为 NoSQL 数据库根本就没有提供 SQL语言 从多个数据库问价提取关键数据。

既然如此,那为什么还要使用 NoSQL 数据库呢?其实 NoSQL 数据库是关系型数据库的一种补充,与关系型数据库之间不是竞争的关系,而是互补的关系。

比如说 “秒杀” 这个场景,价值200元的东西,秒杀只需要10元,但是库存只有100件。于是大家就疯狂的抢购,秒杀有个严重的问题就是超卖。造成超卖的问题的原因是,数据库是多线程的消费者你买我也买的请求在数据库就变成了多个线程争抢读取库存、修改库存。所以多线程的条件下就容易出现超卖,所以秒杀这个业务对于关系型数据库就很难处理。

这个时候就可以引入 NoSQL 数据库,有一种 NoSQL 数据库 叫做 Redis ,这是一款单线程的非关系型数据库,所以使用 Redis 就不会出现 超卖的情况。这是不是就是对关系型数据库的一种补充呢?

还有一个问题就是,关系型数据库在存储数据之前需要先建表,定义字段的类型、约束的条件,哪些字段不能为空值,哪些字段不能有重复的值等等。所以在告诉写入的时候,这样的校验就会让速度明显的降低。如果保存的是海量的低价值的数据,这就是对数据库的极大浪费(比如说朋友圈的信息相较于银行转账记录的信息就是低价值的数据),低价值的数据没有必要保存到 MysQL 这样的关系型数据库里面,保存在 NoSQL 数据库里面就是最适合的了。

因此 NoSQL 数据库没有严格的表结构,数据的读写也没有那么多的校验,读写速度也远远超过了关系型数据库。像是用户登录的信息啊、网站的通知消息等等,保存到 NoSQL 数据库里是最适合的了。

 主流的 NoSQL 数据库

以下介绍的 NoSQL 数据库都是开源免费的产品:

  • Redis:一种用内存来保存数据的 NoSQL 数据库,新浪微博用它来保存很多大V用户的热点信息,内存的速度是远远超过硬盘的,所以 Redis 的读写速度要比硬盘快很多。还有就是电商系统首页里的一些商品的信息都可以保存在 Redis 里面,这样我们打开一个电商网站加载的速度就会非常的快。

  • MemCache:也是一种使用内存来保存数据的 NoSQL 数据库。相比较而言,Redis 的市场份额与使用范围更广泛一些。

  • MongoDB: 是一种使用硬盘保存数据的 NoSQL 数据库,保存海量低价值的数据是非常适合的;比如说新闻、留言、回帖等等。

  • Neo4J:也是一种使用硬盘保存数据的 NoSQL 数据库,适合用来保存复杂的组织关系和人际关系
 NoSQL 数据库的应用场景

上面我们提到过 NoSQL 数据库是关系型数据的一种补充,只在特定的业务场景去使用。

比如说新闻的篇幅都很长,MySQL 的字符串类型不适合保存如此之长的字符内容,所以新闻的内容就应该保存到 MongoDB 的数据库里面。

再有就是电商抢购促销的时候,特别是 电商节 大家疯狂抢购。商品信息从数据库、从硬盘的加载速度比较慢,因此为了让消费者有良好的的购物体验,可以将抢购商品的信息保存到 Redis 里面内存的速度要比硬盘快多了。

再之后就是微博的热点信息了,也是需要缓存到内存里面的这个时候 Redis 就派上用场了…

以上就是一些常见的 NoSQL 数据库的应用场景。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012816.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号