1、数据库
-
数据库作用:持久化(persistence),把数据保存到可掉电式存储设备中以供之后使用。可以通过数据库将内存中的数据保存到硬盘上加以”固化”。
-
DB:数据库(Database)即存储数据的“仓库”,其本质是一个文件系统。按一定组织结构保存数据。
-
DBMS:数据库管理系统(Database Management System)是操纵和管理数据库的软件。用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中的数据。
-
SQL:结构化查询语言(Structured Query Language)专门用来与数据库通信的语言。
-
ODBC:开放数据库互连(Open Database Connectivity)C语言开发,提供了一种标准的API来访问数据库管理系统。用户可以直接将SQL语句送给ODBC。API利用SQL来完成其大部分任务。与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。
-
JDBC:Java与数据库的接口规范 (Java DataBase Connectivity) 用Java实现了驱动程序,具有跨平台特性。
-
数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库,在数据库创建多个表,以保存程序中实体用户的数据。
2、关系型数据库(RDBMS)
- 关系型数据库模型(Relational Database Management System,RDBMS)把复杂的数据结构归结为简单的二元关系,即二维表格形式。
- 关系型数据库以行(row) 和列(column) 的形式存储数据。一系列的行和列被称为表(table) ,一组表组成了一个库(database)。
- 场景:主要用于执行规模小而读写频繁,或者大批量读极少写访问的事务。
- 包括:MySQL、Oracle、SQL Server、PostgreSQL、Microsoft Access。几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。
- RDBMS优势:
复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
事务支持:使得对于安全性能很高的数据访问要求得以实现。
2.1 相关概念
- 行(row) 是一组相关的数据。记录一条数据数据表就增加一行。
- 列(column)由字段名和字段数据集合组成,一列包含了相同的数据。每一列有多个属性:为空、默认值、长度、类型等。
- 数据表:是数据的矩阵,用来存储、操作数据的逻辑结构。每张表由行和列组成。一个数据库中可以有多个数据表,表名具有唯一性。
- 表与表之间的数据记录有四种关系模型:一对一关联、一对多关联、多对多关联、自我引用。
- 索引:是对数据库表中一列或多列的值进行排序的一种结构。可快速访问数据库表中的特定信息。
- 事务(transaction):是用户定义的一个数据库操作序列,具有原子性。
- 冗余:存储两倍数据,冗余可以使系统速度更快。
- 数据类型:决定了数据的存储格式:数值、日期/时间、字符串(字符/二进制)类型。
- 主键(primary key):一个数据表中只能包含一个主键。可以查询数据。取值不能为空值(Null)。表中的满足条件的列可以作为主键。
- 外键(foreign key):用于关联两个表。父数据表(Parent Entity)的主键放在另一个数据表做属性以创建彼此的关系。
- 两种建表原则:
1.外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一。
2.外键是主键:主表的主键和从表的主键,形成主外键关系。
- 复合键:将多个列作为一个索引键,一般用于复合索引。
- 关系键:是一个表中的一个或几个属性,用来标识该表与另一个表产生联系。
- 超键(superkey):能够唯一标识多元组(即“行”)的属性集。包含所有属性的集叫做明显(平凡)超键。
- 候选键(candidate key):是某个关系变量的一组属性所组成的集合,是不含有多余属性的超键:最小超键。
- 代理键:数据表中的候选键都不适合当主键时,选择一个无意义但唯一的字段来代作主键。是数据库生成的,通常是个自动递增的数字。
- 自然键:与代理键相反,唯一确定一个事物的标识:身份证号。
3、MySQL
- MySQL是一个开放源代码的关系型数据库管理系统。
- 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性,可以运行于多种系统。
- 支持多种语言,为多种编程语言提供了API。
- 使用标准的SQL数据语言。
- 支持多线程,充分利用CPU资源,支持多用户。
- 支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB ,64位系统支持最大的表文件为8TB 。
- 提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
- 提供用于管理、检查、优化数据库操作的管理工具。
- 既能够作为一个单独的应用程序在客户端服务器网络环境中运行,也能够作为一个程序库而嵌入到其他的软件中。
- MySQL 由于其体积小、速度快、总体拥有成本低,可处理上千万条记录的大型数据库,尤其是开放源码这一特点,使得很多互联网公司、中小型网站选择了MySQL作为网站数据库(Facebook,Twitter,YouTube,阿里巴巴/蚂蚁金服,去哪儿,美团外卖,腾讯)。
4、 非关系型数据库(NOSQL)
- 非关系型数据库(Not Only SQL,NOSQL)指数据以对象形式存储的非结构化的数据库。包括键值型数据库、文档型数据库、搜索引擎和列存储、图形数据库等。
- 可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,不需要经过SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能。
- 优势:性能更高、成本更低。
4.1 类型
1、键值型数据库
- 键值型数据库通过 Key-Value 键值的方式来存储数据。
- Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE)
- 键值型数据库典型的使用场景是作为内存缓存。
- Redis 是最流行的键值型数据库。
2 、文档型数据库
- 文档型数据库可存放并获取文档,可以是XML、JSON等格式。
- 在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。
- MongoDB是最流行的文档型数据库。
3、 搜索引擎数据库
- 虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。
- 搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。
- 核心原理是“倒排索引”。典型产品:Solr、Elasticsearch、Splunk 等。
4、 列式数据库
- 列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限
- 典型产品:HBase等。
5、 图形数据库
- 图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系。图形数据库最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。