目录
1. 数据库基础
1.1 数据库的定义
1.2 数据库的关键概念
数据模型
数据库架构
数据库操作语言(DML 和 DDL)
总结
2. 关系型数据库
2.1 MySQL
MySQL 的历史和特点
MySQL 的安装和配置
MySQL 的基本操作
2.2 PostgreSQL
PostgreSQL 的特点和优势
PostgreSQL 的高级功能
PostgreSQL 为什么使用它
2.3 Oracle
Oracle 数据库的商业特性
Oracle 的体系结构
Oracle 的管理工具
3. 非关系型数据库
3.1 MongoDB
MongoDB 的文档存储模型
MongoDB 的基本操作
3.2 Cassandra
Cassandra 的分布式架构
Cassandra 的数据模型
Cassandra 的数据复制和分区
3.3 Redis
Redis 的内存数据存储特性
Redis 的数据结构
Redis 的持久化和复制机制
1. 数据库基础
在数字化时代,数据无处不在,而数据库则是组织和管理这些数据的系统。数据库不仅为企业提供了数据存储的解决方案,还使得数据的检索、分析和处理变得更加高效和系统化。
1.1 数据库的定义
数据库是一个有组织的数据集合,它允许用户存储、检索和操作数据。数据库通常用于各种应用程序,从简单的个人地址簿到复杂的企业系统,如客户关系管理(CRM)、库存管理和电子商务平台。
功能:
- 存储: 长期存储大量数据。
- 检索: 快速查找和访问所需数据。
- 处理: 对数据进行计算和分析。
- 管理: 确保数据的安全性、完整性和一致性。
类型:
- 关系型数据库: 使用表格模型存储数据,表之间通过关系(如外键)连接。
- 非关系型数据库: 不依赖表格模型,而是使用其他数据模型,如键值对、文档或图形数据库。
1.2 数据库的关键概念
数据模型
数据模型是数据库中数据的逻辑表示。它定义了数据的结构、数据之间的关系以及数据的约束条件。常见的数据模型包括:
- 关系模型: 使用表格、行和列来表示数据。
- 文档模型: 存储类似于JSON或XML的文档。
- 键值模型: 通过键来存储和检索值。
- 图形模型: 存储实体之间的关系,用于复杂的网络结构。
数据库架构
数据库架构是指数据库的组织结构,包括数据是如何存储和访问的。它通常包括:
- 物理架构: 数据库在磁盘上的存储方式。
- 逻辑架构: 数据库的逻辑设计,如表结构和索引。
- 视图: 用户看到的数据库结构,可能与实际存储结构不同。
数据库操作语言(DML 和 DDL)
DML(数据操纵语言) 用于与数据库中的数据交互,包括:
- SELECT: 查询数据。
- INSERT: 插入新数据。
- UPDATE: 更新现有数据。
- DELETE: 删除数据。
DDL(数据定义语言) 用于定义数据库的结构,包括:
- CREATE: 创建新的数据库对象,如表、索引。
- ALTER: 修改现有数据库对象的结构。
- DROP: 删除数据库对象。
总结
数据库基础是理解数据如何被存储、访问和操作的前提。了解数据库的定义、功能、类型、数据模型、架构和操作语言对于任何需要与数据打交道的开发者或数据分析师来说都是至关重要的。随着技术的发展,数据库的类型和操作方式也在不断演变,但这些核心概念仍然是构建高效、可靠数据库系统的基石。
SQL(Structured Query Language)是一种标准化的语言,用于在关系型数据库管理系统(RDBMS)中进行数据管理和操作。以下是一些常见的SQL语句示例:
选择数据
SELECT column1, column2 FROM table_name;
选择特定条件的数据
SELECT * FROM table_name WHERE condition;
插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
更新数据
UPDATE table_name SET column1 = value1 WHERE condition;
删除数据
DELETE FROM table_name WHERE condition;
创建数据库
CREATE DATABASE database_name;
创建表
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... );
修改表结构
ALTER TABLE table_name ADD column_name datatype;
重命名表
RENAME TABLE old_table_name TO new_table_name;
删除表
DROP TABLE table_name;
创建索引以提高查询效率
CREATE INDEX index_name ON table_name (column);
分组数据
SELECT column, COUNT(*) FROM table_name GROUP BY column;
使用聚合函数
SELECT AVG(column), SUM(column), MAX(column), MIN(column) FROM table_name;
连接表
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
子查询
SELECT * FROM table_name WHERE column IN (SELECT column FROM other_table WHERE condition);
排序结果
SELECT * FROM table_name ORDER BY column ASC, another_column DESC;
限制结果数量
SELECT * FROM table_name LIMIT number;
事务处理
BEGIN; UPDATE table_name SET column = value WHERE condition; COMMIT;
备份数据库
-- 这通常不是纯SQL命令,而是由数据库管理系统提供的工具或命令行选项
恢复数据库
-- 同上,通常不是SQL命令
请注意,这些SQL语句只是示例,具体的语法可能会根据不同的数据库系统(如MySQL、PostgreSQL、SQL Server等)略有不同。
2. 关系型数据库
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
关系型数据库(RDBMS)是数据存储和检索的主流方式,它们基于关系模型,使用表格、行和列来组织数据。SQL(Structured Query Language)作为标准语言,用于在关系型数据库中进行数据操作。
2.1 MySQL
MySQL 的历史和特点
MySQL是一个广泛使用的开源关系型数据库管理系统,最初由MySQL AB开发,现在属于Oracle公司。它以高性能、可靠性和易用性而闻名。
Mysql官网:https://www.mysql.com/
特点:
- 开源免费。
- 支持多种操作系统。
- 高度可定制的存储引擎。
- 大量社区支持和文档。
MySQL 的安装和配置
MySQL可以在多种平台上安装,包括Linux、Windows和macOS。安装过程通常涉及下载安装包、运行安装程序和配置基本设置。
MySQL 的基本操作
- 创建数据库:
CREATE DATABASE mydatabase;
- 创建表:
CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT );
- 插入数据:
INSERT INTO mytable (name, age) VALUES ('John Doe', 30);
- 查询数据:
SELECT * FROM mytable WHERE age > 25;
- 更新数据:
UPDATE mytable SET age = 31 WHERE id = 1;
- 删除数据:
DELETE FROM mytable WHERE id = 1;
2.2 PostgreSQL
PostgreSQL 的特点和优势
PostgreSQL,通常简称为Postgres,是一个高度可扩展的开源对象关系数据库系统。它以其强大的功能和对SQL标准的遵守而受到赞誉。
PostgreSQL官网:https://www.postgresql.org/about/
PostgreSQL 是一个功能强大的开源对象关系数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。 PostgreSQL 的起源可以追溯到 1986 年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上拥有超过 35 年的积极开发经验。
PostgreSQL 因其经过验证的架构、可靠性、数据完整性、强大的功能集、可扩展性以及软件背后的开源社区始终如一地提供高性能和创新解决方案的奉献精神而赢得了良好的声誉。 PostgreSQL 可在所有主要操作系统上运行,自 2001 年以来一直符合ACID,并且具有强大的附加组件,例如流行的PostGIS地理空间数据库扩展器。毫不奇怪,PostgreSQL 已成为许多人和组织选择的开源关系数据库。
开始使用 PostgreSQL 从未如此简单 - 选择您想要构建的项目,然后让 PostgreSQL 安全可靠地存储您的数据。PostgreSQL可以通过源代码或预编译的二进制文件在多种操作系统上安装。安装后,可以使用psql命令行工具或图形界面工具来管理数据库。
优势:
- 符合标准的SQL支持。
- 事务、并发控制和数据完整性。
- 支持复杂的查询和数据类型。
PostgreSQL 的高级功能
- 事务: 确保数据的一致性和可靠性。
- 并发控制: 通过多版本并发控制(MVCC)来实现。
- 数据完整性: 通过外键、检查约束等机制来维护。
PostgreSQL 为什么使用它
PostgreSQL 附带了许多功能,旨在帮助开发人员构建应用程序、管理员保护数据完整性和构建容错环境,并帮助您管理数据,无论数据集有多大或多小。除了免费和开源之外,PostgreSQL 还具有高度可扩展性。例如,您可以定义自己的数据类型、构建自定义函数,甚至可以用不同的编程语言编写代码,而无需重新编译数据库!
PostgreSQL 尝试遵守SQL 标准,这种一致性不会与传统功能相矛盾,也不会导致糟糕的架构决策。支持 SQL 标准所需的许多功能,尽管有时语法或功能略有不同。随着时间的推移,预计将进一步实现一致性。截至 2023 年 9 月发布的第 16 版,PostgreSQL 至少符合 SQL:2023 Core 一致性的 179 项强制功能中的 170 项。截至撰写本文时,还没有关系数据库完全符合该标准。
以下是 PostgreSQL 中各种功能的完整列表,每个主要版本中都会添加更多功能:
- 数据类型
- 基元:整数、数字、字符串、布尔值
- 结构化:日期/时间、数组、范围/多范围、UUID
- 文档:JSON/JSONB、XML、键值(Hstore)
- 几何:点、线、圆、多边形
- 定制:复合、定制类型
- 数据的完整性
- 唯一,不为空
- 主键
- 外键
- 排除约束
- 显式锁、咨询锁
- 并发、性能
- 索引:B 树、多列、表达式、部分
- 高级索引:GiST、SP-Gist、KNN Gist、GIN、BRIN、覆盖索引、布隆过滤器
- 复杂的查询规划器/优化器、仅索引扫描、多列统计
- 事务、嵌套事务(通过保存点)
- 多版本并发控制(MVCC)
- 读取查询的并行化和构建 B 树索引
- 表分区
- SQL 标准中定义的所有事务隔离级别,包括 Serialized
- 表达式的即时 (JIT) 编译
- 可靠性、灾难恢复
- 预写日志记录 (WAL)
- 复制:异步、同步、逻辑
- 时间点恢复 (PITR)、活动备用
- 表空间
- 安全
- 身份验证:GSSAPI、SSPI、LDAP、SCRAM-SHA-256、证书等
- 强大的访问控制系统
- 列级和行级安全性
- 使用证书和附加方法进行多重身份验证
- 可扩展性
- 存储函数和过程
- 过程语言:PL/pgSQL、Perl、Python 和 Tcl。通过扩展还可以使用其他语言,例如 Java、JavaScript (V8)、R、Lua 和 Rust
- SQL/JSON 构造函数和路径表达式
- 外部数据包装器:使用标准 SQL 接口连接到其他数据库或流
- 可定制的表存储接口
- 许多提供附加功能的扩展,包括 PostGIS
- 国际化、文本搜索
- 支持国际字符集,例如通过 ICU 校对
- 不区分大小写和不区分重音的排序规则
- 全文检索
2.3 Oracle
Oracle 数据库的商业特性
Oracle数据库是一个领先的商业RDBMS,以其高性能、可靠性和高级功能而闻名。Oracle数据库由Oracle公司开发和支持。
商业特性:
- 高级安全性。
- 强大的分析和数据处理能力。
- 广泛的工具和应用程序集成。
Oracle 的体系结构
- 实例: 包括内存结构(SGA)和数据库进程。
- 数据库: 物理文件的集合,包括数据文件、控制文件和重做日志文件。
- 模式: 数据库中的逻辑结构,如表、视图、索引和存储过程。
Oracle 的管理工具
- SQL*Plus: 一个命令行工具,用于执行SQL语句和PL/SQL块。
- Oracle Enterprise Manager: 一个图形界面工具,用于数据库的监控和管理。
通过这些工具和特性,Oracle数据库为企业提供了强大的数据管理解决方案。虽然它是商业软件,但许多企业仍然选择Oracle数据库,因为它提供了广泛的功能和企业级的支持。
3. 非关系型数据库
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
非关系型数据库,通常称为NoSQL数据库,是为了满足大规模数据集合的存储和检索需求而设计的,它们不依赖传统的关系模型。NoSQL数据库提供了多样化的数据模型和高可扩展性,适用于大数据和高并发的应用场景。
3.1 MongoDB
MongoDB 的文档存储模型
MongoDB是一种基于文档的数据库,它存储BSON(二进制JSON)文档。每个文档可以包含多种数据类型,如字符串、数字、数组、对象等。
MongoDB官网:https://www.mongodb.com/
特点:
- 高性能:由于其数据结构的灵活性,MongoDB在处理复杂查询时表现出高性能。
- 高可用性:通过副本集(Replica Sets)实现,副本集是一组维护相同数据集的MongoDB服务器。
- 易扩展性:通过分片(Sharding)实现水平扩展,分布数据跨多个服务器。
MongoDB 的基本操作
- 创建文档(CRUD中的Create):
db.collection.insertOne({ name: "John Doe", age: 30, address: { street: "123 Main St", city: "Anytown" } });
- 读取文档(Read):
db.collection.find({ name: "John Doe" });
- 更新文档(Update):
db.collection.updateOne({ name: "John Doe" }, { $set: { age: 31 } });
- 删除文档(Delete):
db.collection.deleteOne({ name: "John Doe" });
- 索引:
db.collection.createIndex({ name: 1 });
- 聚合:
db.collection.aggregate([ { $match: { age: { $gte: 18 } } }, { $group: { _id: "$age", count: { $sum: 1 } } } ]);
3.2 Cassandra
Cassandra 的分布式架构
Cassandra是一个分布式NoSQL数据库,设计用于处理大量数据跨多个服务器。
Cassandra 的数据模型
- 列族:类似于关系型数据库中的表。
- 列:列族中的字段。
- 超列:列的集合(可选)。
Cassandra 的数据复制和分区
- 数据复制:通过副本因子来控制,确保数据的高可用性。
- 数据分区:使用一致性哈希将数据分布到不同的节点。
3.3 Redis
Redis 的内存数据存储特性
Redis是一个基于内存的数据库,提供极快的读写速度。它通常用作数据缓存或消息队列系统。
Redis官网:https://redis.io/
Redis 的数据结构
- 字符串(Strings)
- 哈希(Hashes)
- 列表(Lists)
- 集合(Sets)
- 有序集合(Sorted Sets)
Redis 的持久化和复制机制
- 持久化:Redis可以将内存中的数据保存到磁盘,防止数据丢失。
- 复制:支持主从复制,提高数据的可用性和可扩展性。
通过这些NoSQL数据库,开发者可以根据应用的具体需求选择最合适的数据存储解决方案。每种NoSQL数据库都有其独特的特性和适用场景,理解这些特性有助于在大数据时代做出更合理的技术选择。