热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DBA是怎样练成的?

点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识一定要知道Mysql,Mongo是什么,怎么安装,怎么使用

点击上方关注 “终端研发部

设为“星标”,和你一起掌握更多数据库知识

一定要知道Mysql,Mongo是什么,怎么安装,怎么使用,应用场景和实现原理,这里整理了一篇学习路线提,助力大家能够对mysql有一个清晰地认识。

MySQL与MongoDB都是开源的常用数据库,

但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。

它们各有各的优点,关键是看用在什么地方。

所以我们所熟知的那些SQL语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。

一、关系型数据库-MySQL

SQL关系型数据库采用了关系模式来组织数据,即关系模式为二维表格模型。

主要的数据库:SQL Server,Oracle,Mysql,PostgreSQL。

优点:容易理解,使用方便,易于维护

缺陷:对于高并发量的读写效率,高扩展性和可用性(难以横向扩展),为了维护一致性牺牲了读写性能

区别

1、在不同的引擎上有不同的存储方式。

2、查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。

3、开源数据库的份额在不断增加,mysql的份额页在持续增长。

4、缺点就是在海量数据处理的时候效率会显著变慢。

二、非关系型数据库-MongoDB

NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可。

非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性,呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

主要的数据库:MongoDB,Redis,CouchDB

分类:

1.面向高性能并发读写的key-value数据库

2.面向海量数据访问的面向文档数据库

3.面向可拓展的分布式数据库

缺陷:由于Nosql约束少,所以也不能够像sql那样提供where字段属性的查询。因此适合存储较为简单的数据。一些不能够持久化数据,需要和关系型数据库结合。

1、存储方式:虚拟内存+持久化。

2、查询语句:是独特的MongoDB的查询方式。

3、适合场景:事件的记录,内容管理或者博客平台等等。

4、架构特点:可以通过副本集,以及分片来实现高可用。

5、数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

6、成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

三、MongoDB优势与劣势

优势:

1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。

2、MongoDB的高可用和集群架构拥有十分高的扩展性。

3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。

4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。

劣势:

1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。

2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。

3、MongoDB占用空间过大。

四、对比

5226e4fafff277ec96b9035092ec361f.png

如何学习和怎么去学习?


■ 了解MySQL的版本意义
■ 学习MySQL的安装方式
■ 学习SQL语言,把高中数学中集合知识好好在学习一下,再来看SQL语言
■ 学习SQL在MySQL使用中的一些规范(这些最好找有经验的请教一下,或是看看大会中别人分享的学习思考)
■ 学习MySQL的高级特性:触发器,事件,存储过程编程,分区等
■ 学习MySQL的复制,了解复制原理及实现及相关高可用配合中有什么不足
■ 学习PXC结构的实现,了解运维中的坑
■ 系统的学习一下MySQL的体系结构,思想如何做MySQL优化,总结配置优化
■ 学习MySQL的备份恢复,这块可能需要多一些时间好好的系统的学习一下
■ 掌握几种压力测试的方法,方便优化后能做一个验证
■ 深入理解Innodb的体系结构,全面理解一下事务及锁的实现
■ ss

如何学习Mysql

一、前

MySQL经常和“数据库”连在一起读,这很容易对新手造成误解,认为MySQL就是一个数据库,其实不是这样,MySQL是数据库的集合,MySQL里面有很多数据库,那么数据是直接存在数据库里的吗?并不,数据库底下还有一个叫做数据表的存储单元,数据表里面才存储数据。打个比方,好比一座大图书馆,就是MySQL,图书馆里面分南库,北库,这就是数据库,每个库里面的书都是放在书架上的,书架就是数据表,而放在书架上的很多本书,就是数据。这么说,读者应该理解了吧,所以按大小顺序排个序就应该是,MySQL>数据库>数据表>数据,所以我们接下来的内容也是按照这个顺序来展开

同过网上资料的一些了解(百度百科等),针对于我学习mysql制定了下面的学习路线:
ee538ce6733befec32eb6db4470b6c7b.png

三、进入MySQL

工欲善其事必先利其器,如果连MySQL如何打开都不知道,那如何进行操作学习呢,所以接下来讲解的就是,如何在DOS环境下进入MySQL

b655c0c084d1d55ba06f9f8f89d2d815.png

在这里,我们首先找到MySQL的安装路径,找到”bin”文件夹下的”mysql.exe”,记住这个路径,然后在DOS环境下输入你的路径D:\BtSoft\WebSoft\mysql\MySQL5.7\bin\mysql -uroot -p,这里解释一下后面加上-uroot -p的作用,因为进入MySQL是需要账号密码进行登陆的,账号密码默认都是root,所以当你输完路径之后,摁下回车,就会要求你输入密码

80c1b4fd7f7218ebd97f4a2775451f7c.png

既然讲到了账号密码,这里就给大家补充一点,如何免密码登陆

3cadefd89148353f48a76bf130ef4481.png

打开MySQL安装的文件夹,在里面找到一个名为my.ini的配置文件,通过记事本或者其他文本编辑的方式打开,在[mysqld]的下面加上一句话skip-grant-tables然后重启MySQL服务即可

701790bc603b66237d195a08d171317f.png

再次进入MySQL的时候,出现Enter password要你输入密码,直接摁回车即可。然后会列出一系列MySQL的版本信息,不用管他,现在可以看到,底下出现了一个mysql>,接下来就可以对MySQL数据库进行操作了

70b6ac055a361a885361be0e3f785dc2.png

四、数据库的基本操作

1. 查询数据库

show databases;

下面图片展示的就是你当前有哪些数据库,这里因为作者之前创建过一些数据库,所以读者如果是第一次查询,可能我图片上的某些数据库你没有,这没有关系。这里要注意,因为数据库不止一个,即便是刚安装好的MySQL,里面默认存在的数据库也不止一个,所以是databases,千万别漏了s

1e2b92d6bb223d48e1ea949adae08987.png

2. 创建数据库

create database XX(数据库名);

这里我创建了一个名为“hello”的数据库,显示”OK”,表示成功

d1728e4a324ace412014d20644e49014.png

在这里给大家补充一点,创建数据库的时候,默认的字符是”latin”,也就是拉丁文,现在读者可能体会不到有什么区别,等到数据表的操作的时候再讲。不过这里还是告诉大家,如何创建数据库的时候,如何设置字符格式

create database XX(数据库名) charset = (字符编码,例如utf8);

我们平时学的中文的字符编码是”utf-8”,但是在MySQL里面,中文字符编码是utf8,这点希望读者注意。创建数据库还有一些细节性的操作,这里简单提一下。如果我们创建已存在的数据库,会发生什么事呢?下面我就创建一个已经存在的”test”数据库

10e4c9a2e19251a1fa43b3e3b226658f.png

果然,报错了,它告诉我,不能创建数据库”test”,因为这个数据库已经存在了,所以我们创建数据库的时候判断一下,如果不存在就创建

create database if not exists XX(数据库名);

这段代码的好处是显而易见的,在我们这里可能体现不出来,但如果是做项目的时候或者在企业中,数据库非常非常多,你用肉眼看都要看花了,到底哪些数据库已经存在了,名字被用过了?所以就可以用上面这句代码,下面我们用这段代码创建一下”test”数据库,看会发生什么事情

bb36438e8dddf3ad878ff6fb5ceef100.png

看到没,显示”OK”,没有报错了,但是有一个警告,这个警告就是告诉用户,”test”这个数据库存在

还有个问题,有的人创建数据库起的名字和关键字相同,会发生什么呢?(关键字就是MySQL中有特定作用的词,比如说”show”、“create”)

9fcbabe2127e4380b316c73763427f6f.png

这里英文太长了,有兴趣的读者可以自己去翻译一下,但是这里我们可以确实看到的是,名为”create”的这个数据库没有创建成功,报错了,那如果有的人说我就想创建一个名为”create”的数据库,怎么办呢?下面给出解决办法

create database `XX`(数据库名);(注意,这里``是反引号,在键盘tab上面)

509d7f5e2faed228c2d67017747a7a9b.png

3. 显示数据库信息

show create database XX(数据库名);

bded163034469419d5743bfc9a276ac2.png

这里可以看到,我刚才创建的”test”数据库,默认的字符是拉丁的,我之前创建的数据库,我设定了它的字符是中文,所以显示是”utf8”

4. 更改数据库的字符编码

alter database XX(数据库名) character set utf8;

5. 删除数据库

drop database XX(数据库名);

下面我删除刚创建的”hello”数据库

554c9aa9e42a3d7ed0d8a09012f3f503.png

还是老问题,如果这个数据库不存在,我删除它,会发生什么呢?

826ff7ae27542889260af4124d626f33.png

很明显,报错了,因为不存在”a”这个数据库,我们可以判断一下,这个数据库存在才删除,下面给出代码。这里就不演示了,跟创建一样的

drop database if exists XX (数据库名字);

6. 选择数据库

这是数据库的最后一个基本操作,我们如果想要创建数据,必须要创建一个数据库,然后在数据库当中创建数据表,在数据表中进行操作,但是这么多数据库,计算机怎么知道我们选择的是哪个数据库呢?下面给出代码

use XX(数据库名);

6efc9f6b33bb161f0e89050ac07d5771.png

选择数据库在我看来更像是“进入数据库”,因为好比图书馆,我得进入一个某一个库,才能进行书架和图书的操作

五、数据表的基本操作

数据表的基本操作全都是在选择了数据库的前提下,请读者注意,下面的所有例子,都是在”test”的数据库内的操作

1. 创建表

create table XX(表名)(
字段1名 数据类型,
字段2名 数据类型,
.......
字段n名 数据类型
);

在讲解代码之前,请读者先想想,如果要你用Excel做一份班级成绩表,你会怎么做?肯定先有个标题吧,比方说“16级软件一班期末成绩表”,这里的标题就相当于我们的表名。标题有了,我们得在第一行写上“学号”、“姓名”、“总成绩”吧,来告诉看这个表的人,每一列代表的什么东西,这里的“学号”、“姓名”、“总成绩”就相当于我们的字段名。到这里,都这应该对这段代码有所了解了,下面我们创建一个数据表

4f164473780528e3c359d12b49b0230a.png

这里需要给大家补充一点MySQL数据类型的知识

数据类型: int 整型tinyint 整型(0-256) decimal 浮点型(总位数,小数位数) 例如 decimal(3,1)char(X) 定长字符型 例如 char(10)varchar(X) 可变长度字符型 例如varchar(10)text 大段文本binary 二进制(存储照片等)

具体的没必要多说,只要了解常用的数据类型即可。现在我可以讲讲”Latin”和”utf8”的区别了。如果是在”Latin”字符下创建的数据表,那么一个中文等于两个字符,也就相当于,如果名字是四个字,就要char(8)。但如果是在”utf8”字符下创建的数据表,一个中文等于一个字符,如果名字是四个字,只需要char(4)就够了。

提醒读者一句,如果用关键字做字段名或者表名,要用反引号(`)

创建数据表还有一些字段属性的设置,例如

null:空
not null:不为空
default 'XXXX':默认值
auto_increment:自动增长
primary key:主键(主键的特点,不为空,不重复,一个表只能有一个主键,但是一个主键可以由多个列组成)

这些初学者用不到,讲起来很复杂,所以这里就不讲了,有兴趣的读者可以去百度自行了解

2. 查看所有表

show tables;

我在前面就提过,一个MySQL里面有多个数据库,所以,一个数据库里面也可以有多个表,当然,一个表里面也可以有多个数据

c607380cec07cfc7266c5d4e7062430a.png

这里因为我只在”test”数据库里创建了一个数据表”stu”,所以显示了一个

3. 显示创建表

show create table XX(表名);
show create table XX(表名) \G;

上面两段代码都是显示创建表,只不过显示的样式不同,读者随意选择一种即可

d02e87ce0fded42c8feaa788c7835a24.png

554c5ee8e9b1fa849c12883f2655bacd.png

4. 显示表结构

describe(或desc) XX(表名);

显示表结构就会展示表中有哪些字段,分别是什么类型,有没有默认值,为不为空,哪个是主键

eb01c99b60aa906c9175009a3f4cb495.png

5. 删除表(删除多个表)

drop table XX(表名);
drop table XX,XX,XX......;

上面的一句代码是删除一个表,下面的代码是一次性删除多个表

六、数据的基本操作

数据的操作算是整个MySQL中最复杂的部分,虽然概括起来无非就是“增删查改”,但每一项底下包含的内容非常之多,作者在这里只能尽量为大家解释比较重要的操作

1. 插入数据(增)

insert into XX(表名) (字段1,字段2,字段3......) values (值1,值2,值3.......);

0ae02caa23b2b6c382de4272f1d4c341.png

这里,我插入两组数据,分别是学号2016101,姓名李白,成绩83;学号为2016102,姓名为杜甫,成绩91的两位同学的信息

这里还需要给大家做一点补充,如果大家还记得之前我们创建数据表的时候,”id”和”name”都是varchar型,也就是字符串型,字符串型的数据,插入的时候就要加上""

  1. 字段可以和数据库中的字段顺序不一致,但是值和插入字段的顺序必须一致

  2. 插入字段是可以省略的,这时插入的值和数据表的字段顺序和个数必须一致

2. 查询数据(查)

这里本来应该按照顺序给大家讲删除数据的,但是因为想给的大家看一下插入数据之后,表内变成什么样了,让大家加深印象,所以这里讲查询数据,首先给大家介绍一个知识点——运算符

  1. 比较运算符 >、>&#61;、<、<&#61;、&#61;&#xff08;比较和赋值都是”&#61;”&#xff09;、<>&#xff08;不等于&#xff09;

  2. 逻辑运算符 and&#xff08;与&#xff09;、or&#xff08;或&#xff09;、非&#xff08;not&#xff09;

  • 查询该表内的所有数据

select * from XX&#xff08;表名&#xff09;;

举个例子&#xff0c;我们查询stu表下的所有数据&#xff0c;因为我等会讲的例子涉及到“性别”&#xff0c;所以我提前新增了一个字段名叫”sex”

49d307b1b6fa410b2e83f11cee9a7cc4.png

  • 查询该表内某字段的所有数据

select 字段1,字段2,字段3......&#xff08;或用*代替所有字段&#xff09; from XX&#xff08;表名&#xff09;;

举个例子&#xff0c;我们查询”id”字段底下所有的数据&#xff0c;那么”id”下有哪些数据&#xff0c;就会展现出来

86d22c1b0ea5656bc0bd7137229b96b2.png

  • 查询某条件的所有数据

select * from XX&#xff08;表名&#xff09;where 字段1 &#61; 值1 and 字段2 &#61; 值2 and ......;

这段代码的意思是&#xff0c;从某个表中找出满足条件一且满足条件二的数据&#xff0c;例如&#xff0c;我们想要寻找成绩等于91分&#xff0c;且性别为女的学生信息

28b026fa199167f2f8b2c7f2eeb6b4f5.png

这里也可以改成&#xff0c;我们想寻找成绩大于90分或者成绩小于60分的学生信息

select * from stu where score > 90 or score <60;

  • 由低到高排序

select * from XX&#xff08;表名&#xff09; order by 字段x asc;&#xff08;默认就是升序&#xff09;

  • 由高到低排序

select * from XX&#xff08;表名&#xff09; order by 字段x desc;

  • 按某条件排序

select * from XX&#xff08;表名&#xff09; where 字段x &#61; 值x oreder by 字段x asc(desc);

  • 取前n条数据

select * from XX&#xff08;表名&#xff09; limit n;

  • 从第n条开始&#xff08;起始位置是0&#xff09;取m条

select * from XX&#xff08;表名&#xff09; limit n,m;

  • 查询某排序下的前n条数据

select * from XX&#xff08;表名&#xff09; order by 字段x asc(desc) limit n;

这几条语句之所以不附上例子&#xff0c;是因为考虑到读者如果有耐心看到了这里&#xff0c;那么你应该基本掌握了MySQL的语法&#xff0c;不再需要例子去模仿&#xff0c;只需要告诉你使用什么语句&#xff0c;所以下面的代码也是一样&#xff0c;不再附上例子

3. 删除数据&#xff08;删&#xff09;

delete from XX&#xff08;表名&#xff09; where 字段x &#61; 值x;

4. 修改数据&#xff08;改&#xff09;

update XX&#xff08;表名&#xff09; set 字段1 &#61; 值1,字段2 &#61; 值2 where 条件;
update XX&#xff08;表名&#xff09; set 字段1 &#61; 值1;

下面一条的作用是修改某一字段的所有值&#xff0c;所以不需要加条件

5.聚合函数

  • sum(); 求和 select sum(字段x) from XX&#xff08;表名&#xff09;;

  • avg(); 求平均值 select avg(字段x) from XX&#xff08;表名&#xff09;;

  • max(); 求最大值 select max(字段x) from XX&#xff08;表名&#xff09;;

  • min(); 求最小值 select min(字段x) from XX&#xff08;表名&#xff09;;

  • count(); 记录数 select count(字段x) from XX&#xff08;表名&#xff09;;/select max(*) from XX&#xff08;表名&#xff09;;

  • 在某字段条件下使用函数 select 函数名() from XX&#xff08;表名&#xff09; where 字段x &#61; 值x;

如何学习Mongo

作为一名研发&#xff0c;数据库是或多或少都会接触到的技术。MongoDB 是当前火热的 NoSQL 之一&#xff0c;我们怎样才能学好 MongoDB 呢&#xff1f;本篇文章&#xff0c;我们将从以下几方面讨论这个话题&#xff1a;

  • MongoDB 是什么

  • 我如何确定我需要学习 MongoDB

  • 开发者应该掌握 MongoDB 的哪些知识

  • 学习的选择和困境

我们先来了解一下&#xff0c;MongoDB 为何物。

NoSQL 泛指非关系型数据库&#xff0c;该词是关系型数据库&#xff08;即 SQL&#xff09;的相对称呼。MongoDB 是非关系型数据库&#xff08;NoSQL&#xff09;中较为人熟知的一种。

它拥有很多优秀特性&#xff0c;例如高性能、高可用、支持丰富的查询语句、无需预定义数据模型和水平可伸缩等&#xff0c;适合存储结构化、半结构化的文档和特定格式的文档&#xff0c;这些特性使它受到众多开发者的青睐。

17bb0c30781a867d051bae8c0707fc45.png

我们通过几个例子来看看 MySQL 与 MongoDB 的差异。

与 MySQL 数据库不同的是&#xff0c;MongoDB 不需要预先定义表和字段&#xff0c;这正是它灵活性的体现。MongoDB 可以拥有多个数据库&#xff0c;每个数据库可以拥有多个集合&#xff0c;每个集合可以存储多份文档&#xff0c;这种关系与 SQL 数据库中的“数据库、表、数据”相当。下图描述了 MongoDB 中数据库、集合和文档的关系&#xff1a;

c5674bad64aec92f346cf298dfeaac25.png

数据库 fotoo 中有两个集合&#xff0c;它们分别是 player 和 books。每个集合中都包含了许多文档&#xff0c;例如集合 books 中关于书籍《红楼梦》的文档&#xff0c;集合 player 中关于球员 James 的文档。

在查询方面&#xff0c;一个简单的 MySQL 查询语句为 SELECT * FROM tablename&#xff0c;对应的 MongoDB 查询语句为 db.tablename.find()。在面对多步骤的查询条件时&#xff0c;MongoDB 更游刃有余。例如&#xff1a;

“统计数据库 artic 中 score 大于 70 且小于 90 的文档数量”

这样的需求&#xff0c;用 MongoDB 的聚合操作就可以轻松完成&#xff0c;对应示例如下&#xff1a;

> db.artic.aggregate([
... {$match: {score: {$gt: 70, $lt: 90}}},
... {$group: {_id: null, number: {$sum: 1}}}
... ])

这个例子或许简单了些&#xff0c;在 MySQL 中我们可以用 count 和 where 完成&#xff0c;但如果复杂度再提高四五个等级呢&#xff1f;例如在此基础上增加对某个字段的运算、替换、排序、分组计数、增删字段&#xff0c;用 MySQL 来实现就会很头疼&#xff0c;而 MongoDB 的聚合可以让我们轻松地完成这类复杂需求。

我如何确定我需要学习 MongoDB

MongoDB 是近些年涌现的几十种 NoSQL 中第一梯队的成员&#xff0c;另外一个为人熟知的是 Redis。

你可能会有”我如何确定我需要学习 MongoDB 呢&#xff1f;“ 这样的疑问&#xff0c;面对这个问题&#xff0c;我们可以通过 MongoDB 的特点和应用场景着手:

  • MongoDB 适合存储结构确定或不确定的文档。例如爬虫爬取的信息常缺失字段的情况或字段参差不齐的情况&#xff1b;

  • 对数据库可用性要求较高的情况。MySQL 这类数据库要做到负载均衡、自动容灾和数据同步需要借助外部工具&#xff0c;而 MongoDB 的复制集可以让我们轻松完成这一系列的工作。相对接借助第三方工具来说&#xff0c;复制集的稳定性更高。

  • 分库分表是 WEB 开发中常用到的数据库优化手段&#xff0c;MySQL 的分库分表要考虑的问题非常多&#xff0c;例如字段冗余、数据组装跨节点分页、排序和数据迁移等&#xff0c;而 MongoDB 的分片可以让我们轻松完成“分库分表”的工作。MongoDB 的分片机制使我们不必将心思放在由“分库分表”带来的问题&#xff0c;而是专注于具体需求。

  • 同样的&#xff0c;MySQL 的权限控制、定义数据模型、数据库备份和恢复等功能在 MongoDB 上也有。

  • MongoDB 中支持地理位置的存储和查询&#xff0c;这意味着 MongoDB 可以用于共享单车、共享雨伞、汽车定位等业务中。

我们常用的关系型数据库无法满足 WEB2.0 时代的需求&#xff0c;在实际应用中暴露了很多难以克服的问题。NoSQL 的产生就是为了解决例如海量数据的存储、弹性可伸缩和灵活性等方面的挑战&#xff0c;所以作为一名合格的开发者&#xff0c;应该抽空学习 SQL 以外的数据库知识。

开发者应该掌握 MongoDB 的哪些知识

学习前&#xff0c;我们需要明白自身定位&#xff1a;专业 DBA 或者日常开发使用。

MongoDB 有完善的体系和对应的认证考试&#xff0c;对于希望成为专业 DBA 的朋友我建议到 MongoDB 官方网站了解。

而对于仅需要满足日常开发需求的朋友&#xff0c;我建议学习的内容如下&#xff1a;

  • MongoDB 在各个平台的安装方法

  • MongoDB 数据库和集合的基本操作

  • MongoDB 文档 CRUD 操作&#xff0c;包括能够丰富 CRUD 的投影和修饰符等

  • MongoDB 流式聚合操作&#xff0c;这能够在数据库层面轻松完成复杂数据的处理&#xff0c;而不是用编程语言来处理

  • MongoDB 的数据模型&#xff0c;虽然 MongoDB 可以存储不规则的文档&#xff0c;但有些情况下定义数据模型可以提高查询效率

下图描述了一种聚合操作的完整过程&#xff1a;

c2556a60074f16a9982bf3bafa0aaa98.png

当然&#xff0c;除了这些基本操作之外我们还可以学习更多的知识提高个人竞争力&#xff0c;这些知识是&#xff1a;

  • MongoDB 执行计划和索引&#xff0c;执行计划可以让我们清楚的了解到查询语句的效率&#xff0c;而索引则是优化查询效率的常用手段

  • MongoDB 的复制集&#xff0c;这是提高 MongoDB 可用性&#xff0c;保证数据服务不停机的最佳手段

  • MongoDB 的分片&#xff0c;分片能够在数据量变得庞大之后保证效率

  • MongoDB 的事物&#xff0c;如果你将 MongoDB 用于 WEB 网站&#xff0c;那么事物是你必须学习的知识

  • MongoDB 数据库备份和还原&#xff0c;有了复制集后&#xff0c;备份就显得不是那么重要了&#xff0c;但并不是没有这个需求。而且 MongoDB 的备份可以精细到文档&#xff0c;这就非常有意义了。

学习的选择和困境

有一定工作经验的开发者&#xff0c;大多数情况下都会选择自学。有些在网上搜索对应的文章&#xff0c;有些则直接翻阅官方文档。

4de2863dbb1e852196e051f15b127c06.png

我推荐的方式是翻阅官方文档&#xff0c;在遇到难以理解的观点时通过搜索引擎查找网友分享的文章。

自学的优点很多&#xff0c;缺点也很明显。例如&#xff1a;

  • 断断续续的学习&#xff0c;难以保持专注导致知识吸收不好

  • 耗费时间很长&#xff0c;虽然知道应该学习哪些方面的知识&#xff0c;但文档并不是按你所想而规划的&#xff0c;所以翻阅文档要费很多功夫

  • 知识不成体系&#xff0c;东看看西看看&#xff0c;没有归纳容易忘记

  • 学习就需要记笔记&#xff0c;这又是一件很费时间的事情

  • 官方文档有些观点难以理解&#xff0c;卡在半路很难受

  • 零星学了一两个月&#xff0c;也不确定学会了没有&#xff0c;内心毫无把握

如果不自学&#xff0c;就得找一些成体系的教程来帮助自己快速进步&#xff0c;少走弯路。知识付费时代&#xff0c;在条件允许的情况下适当地投入也是很好的选择。

但面对动辄几百的费用&#xff0c;不少开发者还是感觉略有压力&#xff0c;毕竟我们搬砖的经济压力也非常大。考虑到这些问题&#xff0c;这里推荐韦世东的文章 《超高性价比的 MongoDB 零基础快速入门实战教程》&#xff0c;它售价不到 10 块钱。

文章作者韦世东是&#xff1a;图灵签约作者、电子工业出版社签约作者&#xff0c;华为云认证云享专家、掘金社区优秀作者、开源项目 aiowebsocket 作者。所以在文章质量上&#xff0c;大家可以放心。

这篇文章的内容几乎囊括了上面我们提到的所有知识点&#xff0c;看完这篇仅 5 万词的文章&#xff0c;你将收获&#xff1a;

  • 文档的 CRUD 操作和 Cursor 对象

  • 掌握流式聚合操作&#xff0c;轻松面对任何数据处理需求

  • 了解 MongoDB 的查询效率和优化

  • 如何提高 MongoDB 的可用性

  • 如何应对数据服务故障

  • 理解 MongoDB 的访问控制

  • 学会用数据模型降低数据冗余&#xff0c;提高效率

  • 掌握 mongodump 数据备份与还原方法

这样就可以胜任日常开发中对数据库操作能力的要求了。这篇文章适合对 MongoDB 感兴趣的零基础开发者或者有一定基础&#xff0c;想要继续巩固和加深学习的开发者。

文章篇幅很长&#xff0c;内容详尽&#xff0c;不乏优质配图&#xff0c;例如描述复制集节点关系的图&#xff1a;

2d9a2b141c9ace181ba6ab3f40434f29.png

描述节主点掉线&#xff0c;重新选举主节点的图

e2441d5f245607abdc6e7665e1515440.png

书籍MySQL书籍

1&#xff0c; Effective MySQL系列

《Effective MySQL系列》是指:

  • Effective MySQL Replication Techniques in Depth

  • Effective MySQL之SQL语句最优化

  • Effective MySQL之备份与恢复

这一系列并不如前面推荐的好&#xff0c;其中&#xff0c;我只看了前两本&#xff0c;这几本书只能算是小册子&#xff0c;如果有时间可以看看&#xff0c;对某一个”模块”进入深入了解。

2.MySQL的源码

关于MySQL源码的书非常少&#xff0c;还好现在市面上有两本不错的书&#xff0c;而且刚好一本讲server层&#xff0c;一本讲innodb存储引擎层&#xff0c;对于学习MySQL源码会很有帮助&#xff0c;至少能够更加快速地了解MySQL的原理和宏观结构&#xff0c;然后再深入细节。此外&#xff0c;还有一些博客或PPT将得也很不错&#xff0c;这里推荐最好的几份材料。

3 InnoDB - A journey to the core

《InnoDB - A journey to the core》 是MySQL大牛Jeremy Cole写的PPT&#xff0c;介绍InnoDB的存储模块&#xff0c;即表空间、区、段、页的格式、记录的格式、槽等等。是学习Innodb存储的最好的材料。感谢Jeremy Cole!

4 深入MySQL源码

登博的分享《深入MySQL源码》&#xff0c;相信很多想了解MySQL源码的朋友已经知道这份PPT&#xff0c;就不过多介绍&#xff0c;不过&#xff0c;要多说一句&#xff0c;登博的参考资料里列出的几个博客&#xff0c;都要关注一下&#xff0c;干货满满&#xff0c;是学习MySQL必须关注的博客。

5 深入理解MySQL核心技术

《深入理解MySQL核心技术》是第一本关于MySQL源码的书&#xff0c;着重介绍了MySQL的Server层&#xff0c;重点介绍了宏观架构&#xff0c;对于刚开始学习MySQL源码的人&#xff0c;相信会有很大的帮助&#xff0c;我在学习MySQL源码的过程中&#xff0c;反复的翻阅了几遍&#xff0c;这本书刚开始看的时候会很痛苦&#xff0c;但是&#xff0c;对于研究MySQL源码&#xff0c;非常有帮助&#xff0c;就看你是否需要&#xff0c;如果没有研究MySQL源码的决心&#xff0c;这本书应该会被唾弃。

深入理解MySQL核心技术

6 MySQL内核&#xff1a;InnoDB存储引擎

我们组的同事写的《MySQL内核&#xff1a;InnoDB存储引擎》&#xff0c;可能宇宙范围内这本书就数我学得最认真了&#xff0c;虽然书中有很多编辑错误&#xff0c;但是&#xff0c;平心而论&#xff0c;还是写得非常好的&#xff0c;相对于《深入理解MySQL核心技术》&#xff0c;可读性更强一些&#xff0c;建议研究Innodb存储引擎的朋友&#xff0c;可以了解一下&#xff0c;先对Innodb有一个宏观的概念&#xff0c;对大致原理有一个整体的了解&#xff0c;然后再深入细节&#xff0c;肯定会比自己从头开始研究会快很多&#xff0c;这本书可以帮助你事半功倍。

MySQL内核

7 MySQL Internals Manual

《MySQL Internals Manual》相对于MySQL Manual来说&#xff0c;写的太粗糙&#xff0c;谁让人家是官方文档呢&#xff0c;研究MySQL源码的时候可以简单地参考一下&#xff0c;但是&#xff0c;还是不要指望文档能够回答你的问题&#xff0c;还需要看代码才行。

8 MariaDB原理与实现

评论里提到的《MariaDB原理与实现》我也买了一本&#xff0c;还不错&#xff0c;MariaDB讲的并不多&#xff0c;重点讲了Group Commit、线程池和复制的实现&#xff0c;都是MySQL Server层的知识&#xff0c;对MySQL Server层感兴趣的可以参考一下。

6.结语

现在在DOS环境下使用如此繁多的代码操作MySQL数据库已经不多见了&#xff0c;包括我们老师每次都跟我说让我使用图形化工具去操作MySQL&#xff0c;但是作为新手来说&#xff0c;一开始先掌握好这些基础的&#xff0c;再去使用图形化工具&#xff0c;能够很好的理解每一步操作&#xff0c;所以这也是一个打基础的过程。当然&#xff0c;作者水平有限&#xff0c;可能还有很多操作我没有讲到&#xff0c;这些都要靠读者自己去学习&#xff0c;作者只是为初学者领路&#xff0c;入门MySQL。

参考&#xff1a;
https://www.py.cn/db/mongodb/15407.html
https://blog.csdn.net/qq_37236745/article/details/78694768
https://juejin.im/post/5d53967af265da03d0639837
https://juejin.im/post/5ccd605851882540e53fdb27

3e29891bd0b78abb169a44d3cb41ba8e.gif

BAT等大厂Java面试经验总结

eb45c62183813c4d7ce0b10e6f6f2889.png

想获取 Java大厂面试题学习资料

扫下方二维码回复「BAT」就好了

回复 【加群】获取github掘金交流群
回复 【电子书】获取2020电子书教程
回复 【C】获取全套C语言学习知识手册
回复 【Java】获取java相关的视频教程和资料
回复 【爬虫】获取SpringCloud相关多的学习资料
回复 【Python】即可获得Python基础到进阶的学习教程
回复 【idea破解】即可获得intellij idea相关的破解教程
关注我gitHub掘金&#xff0c;每天发掘一篇好项目&#xff0c;学习技术不迷路&#xff01;

如果喜欢就给个“在看”


推荐阅读
  • 【转】腾讯分析系统架构解析
    TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 旁路|发生_Day749.旁路缓存:Redis是如何工作的Redis 核心技术与实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Day749.旁路缓存:Redis是如何工作的-Redis核心技术与实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Redis通用指令及数据库操作详解
    本文详细介绍了Redis中的通用指令,包括key的基本操作、扩展操作和查询模式,以及数据库的基本操作和相关操作。同时还解决了key重复问题,并提供了解决方案。文章内容参考了黑马Redis教程。 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 《Python3 网络爬虫开发实战》:高效实用的 MongoDB 文档存储
    NoSQL,全称NotOnlySQL,意为不仅仅是SQL,泛指非关系型数据库。NoSQL是基于键值对的,而且不需要经过SQL ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有