🐶一、数据库基础
1.1 为什么要使用数据库
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。
持久化的主要作用是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件、XML数据文件中。
方便管理数据(例如:快速的检索等)
内存:断电后不可存储
1.2 什么是数据库
描述 | |
DB:数据库(Database) | 即存储数据的”仓库“,其本质是一个文件系统。它保存了一系列有组织的数据 |
DBMS:数据库管理系统 (Database Management System) | 是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。 |
SQL:结构化查询语言 (Structured Query Language) | 专门用来与数据库通信的语言。 |
1.3 数据库与数据库管理系统的关系
数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。
1.4 常见的数据库管理系统排名(DBMS)
目前互联网上常见的数据库管理软件有Sybase、DB2、Oracle、MySQL、Access、Visual Foxpro(面向对象型)、MS SQLServer、Informix、PostgreSQL(最符合SQL标准,但是性能差)这几种。以下是2017年StackOverflow 对各数据库受欢迎程度进行调查后的统计结果:
1.5 MySQL介绍
MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多互联网公司选择了MySQL作为网站数据库(Facebook, Twitter, YouTube,阿里的蚂蚁金服,去哪儿,魅族,百度外卖,腾讯)。
阿里巴巴/蚂蚁金服主要使用两种关系数据库:OceanBase和MySQL。数据规模:MySQL单台机器TB级,OceanBase单个集群从几个TB到几百个TB皆有。
去哪儿:MySQL,Redis,HBase
腾讯社交网络主要使用深度定制MySQL数据库+自研NoSQL,规模万台以上服务器,千万级qps。
百度外卖目前线上主要使用Mysql、redis等数据库。MySQL 数据数百TB级,redis 数据几TB级。
目前魅族场景主要使用的是MySQL,缓存服务使用的是Redis。数据库实例近1000,数据大小100T+, redis实例1000+
MySQL的优点:
-
MySQL 是开源的,目前隶属于 Oracle 旗下产品。
-
MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
-
MySQL 使用标准的 SQL 数据语言形式。
-
MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
-
MySQL 对java有很好的支持,java是目前最流行的 Web 开发语言。
-
MySQL 支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持 4GB,64位系统支持最大的表文件为8TB
1.6 RDBMS 与 非RDBMS
从排名中我们能看出来,关系型数据库绝对是 DBMS 的主流,其中使用最多的 DBMS 分别是 Oracle、
MySQL 和 SQL Server。这些都是关系型数据库(RDBMS)。
-
关系型数据库(RDBMS)
这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格模式)
关系型数据库以 行(row) 和 列(column) 的形式存储数据,以便于用户理解。这一系列的行和列被称为表格(table),一堆表组成一个数据库(database)(DB)
表与表之间的数据记录有关系(relationship),现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库就是建立在关系模型基础上的数据库
优势:
-
复杂查询:可以用SQL语句方便地在一个表以及多个表之间做非常复杂的数据查询
-
事务支持:使得对于安全性能很高的数据访问要求得以实现。
-
非关系型数据库(非RDBMS)
非关系型数据库,可看成传统关系型数据库的功能阉割版本,基于键值对存储护具,不需要经过SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能。
目前基本上大部分主流的非关系型数据库都是免费的。
-
键值数据库 Redis
-
文档数据库 MongoDB
-
列式数据库:Hbase(后续会学到)
1.7 关系型数据库设计规则
-
关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的(Structured)
-
将数据放到表中,表在放到库中。
-
一个数据库可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性
-
表具有一些特性,这些特性定义了数据在表中如何存储,类似Java和Python中”类"的设计。
-
表、记录、字段
E-R(entity-relationship,实体-联系)模型中有三个主要概念是: 实体集 、 属性 、 联系集 。
一个实体集(class)对应于数据库中的一个表(table)
一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)
一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。
ORM思想(Object Relational Mapping)体现:
数据库中的一个表<---->Java中的一个类
表中的一条数据 <---->类中的一个对象
表中的一个列 <---->类中的一个字段、属性(Field)
-
表的关联关系
表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用
关系模型来表示。
四种:一对一关联、一对多关联、多对多关联、自我引用
数据库术语
-
数据库: 数据库是一些关联表的集合。
-
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
-
列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
-
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
-
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
-
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
-
外键:外键用于关联两个表。
-
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
-
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
-
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。