数据库基础(1) . 关系型数据库
1.数据库 database
1.1.数据持久化
数据持久化(Data Persistence)指的是将程序中的数据保存到某种持久化的存储介质(如硬盘、SSD、磁带等)上的过程,使得即使在程序终止后,数据依然可以被保留下来并在下次启动时重新加载。
数据持久化是现代软件开发中的一个重要概念,特别是在构建需要长期存储数据的应用程序时,如数据库管理系统、配置管理系统、日志记录系统等。
1.1.1.持久化的重要性
- 数据保存:确保数据在系统关闭或崩溃后仍然存在。
- 数据恢复:在系统重启后可以从持久化存储中恢复数据。
- 数据共享:使得不同进程或机器之间可以共享数据。
- 数据备份:提供数据备份和恢复机制,防止数据丢失。
1.1.2.持久化技术
数据持久化可以通过多种方式进行,以下是一些常见的技术手段:
-
文件系统:
- 文本文件:简单的数据存储方式,适合小规模的数据记录,如配置文件。
- 二进制文件:更紧凑的数据存储格式,适合大量数据的存储,但不如文本文件易读。
-
数据库:
- 关系型数据库(RDBMS):如MySQL、PostgreSQL,用于存储结构化数据。
- 非关系型数据库(NoSQL):如MongoDB、Cassandra,适合存储非结构化或半结构化数据。
-
对象关系映射(ORM):
- ORM框架(如Hibernate、Entity Framework)可以简化对象到关系数据库的映射,使得对象模型可以直接用于持久化操作。
-
内存数据库:
- 虽然主要存储在内存中,但通常会定期将数据刷盘(flush to disk),如Redis。
-
日志文件:
- 记录关键操作的日志,以便于审计和恢复。
-
配置管理系统:
- 如Git,不仅用于版本控制,也可以作为配置文件的持久化存储。
-
状态管理工具:
- 在客户端应用中,如Redux(JavaScript前端应用的状态管理)可以帮助管理应用的状态并持久化。
1.2.关系型数据库
Relational data model
曾经比较流行的数据模型有三种,即层次结构模型和网状结构模型, 以及按关系理论建立的关系结构模型。
关系模型是由Edgar F. Codd在20世纪70年代提出的,他因此获得了图灵奖。在关系模型中,数据被组织成一张或多张表格的形式,每张表格都有一个唯一的名称,称为关系。每张表由行(tuples)和列(attributes)组成,行代表一个特定的对象实例,而列定义了对象的属性或特征。
关键特性
-
表格化数据:数据以二维表格的形式存储,每一行代表一条记录,每一列代表一种属性。
-
数据独立性:逻辑结构与物理存储分离,应用程序不依赖于数据的物理存储位置。
-
数据完整性:提供了多种机制来保证数据的一致性和准确性,如主键约束、外键约束、唯一性约束等。
-
并发控制:允许多个用户或应用程序同时访问数据库而不发生冲突。
-
事务处理:支持ACID(原子性、一致性、隔离性、持久性)原则,确保数据的一致性和可靠性。
-
支持复杂的查询:SQL语言强大,支持复杂的查询操作。
1.3.数据库管理系统
(Database Management System) DBMS是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。
1.3.1.MySQL
MySQL 是一个开源的关系型数据库管理系统,由MySQL AB公司开发,后来被Sun Microsystems收购,现在属于Oracle公司。MySQL以其高效、稳定和灵活性著称,特别适用于Web应用程序。
- 特点:
- 开源:免费使用,社区版提供了丰富的功能。
- 高性能:支持多种存储引擎,如InnoDB、MyISAM等,提供了良好的性能。
- 跨平台:支持Windows、Linux、Unix等多种操作系统。
- 易用性:安装和配置相对简单,支持图形化管理工具如phpMyAdmin。
- 插件式架构:支持多种存储引擎和插件,可以根据需要选择不同的组件。
1.3.2.Oracle Database
Oracle Database 是由Oracle公司开发的企业级关系型数据库管理系统。它是全球最大的企业级数据库之一,以其高可用性、安全性和可扩展性而闻名。
- 特点:
- 企业级功能:支持高级特性如分区、并行查询等。
- 高可用性:提供多种高可用解决方案,如Real Application Clusters (RAC) 和Data Guard。
- 安全性:具备先进的安全措施,支持细粒度的访问控制。
- 集成性:与其他Oracle产品(如中间件、应用服务器)高度集成。
- 多模型支持:除了关系型数据,还支持JSON、XML等非关系型数据存储。
1.3.3.Microsoft SQL Server
Microsoft SQL Server 是微软推出的关系型数据库管理系统,主要用于Windows操作系统平台,也支持Linux。
- 特点:
- 集成开发环境:与Visual Studio和.NET Framework紧密集成。
- 分析能力:支持OLAP(在线分析处理)和数据仓库功能。
- 商务智能:提供报表服务、分析服务等功能,方便进行数据分析。
- 云支持:支持Azure SQL Database,可以部署在云端。
- 多平台支持:除了Windows,SQL Server 2017及以后版本也支持Linux和Docker容器。
1.3.4.IBM DB2
IBM DB2 是IBM推出的一种高性能的关系型数据库管理系统,广泛应用于大型企业和金融行业。
- 特点:
- 高性能:优化的查询处理引擎,适用于大规模数据处理。
- 自动管理:自动索引、自动调优等功能减少管理负担。
- 多平台支持:支持多种操作系统,包括Windows、Linux、Unix、z/OS等。
- 多模型支持:除了关系型数据库,DB2还支持NoSQL、JSON、XML等数据类型。
- 云兼容:支持IBM Cloud和其他公共云平台。
1.3.5.PostgreSQL
PostgreSQL 是一个强大的开源关系型数据库系统,以其稳定性、功能丰富和遵守SQL标准而受到开发者青睐。
- 特点:
- 标准支持:严格遵循SQL标准,支持SQL:2008标准。
- 扩展性强:支持多种存储引擎,可以通过插件扩展功能。
- 多模型支持:除了关系型数据,还支持JSON、XML等非关系型数据存储。
- 事务处理:支持ACID特性,确保数据一致性。
- 跨平台:支持多种操作系统,包括Windows、Linux、Unix等。
1.4.非关系型数据库 NoSQL
NoSQL(Not Only SQL)数据库是一种不同于传统关系型数据库的设计理念和技术体系。
NoSQL数据库主要针对大规模数据分布式存储的需求而设计,尤其适合处理大规模的数据集,并且在分布式环境中提供高性能和高可扩展性。
1.4.1.NoSQL 的特点
- 非关系型:与关系型数据库相比,NoSQL数据库通常不强制使用固定的表格模式。
- 分布式架构:支持横向扩展,可以在多个服务器上分布存储数据。
- 高可用性:通过复制和分区来提高数据的可用性和可靠性。
- 灵活性:数据模型可以是文档、键值对、列族或图等。
- 高性能:针对特定类型的数据操作进行了优化,通常在读写性能方面优于关系型数据库。
1.4.2.NoSQL 数据库的分类
NoSQL数据库根据其存储数据的方式可以大致分为以下几种类型:
-
键值存储(Key-Value Stores)
- 特点:数据以键值对的形式存储,每个键对应一个值。
- 用途:适合会话管理、购物车存储等场景。
- 示例:Redis、Voldemort。
-
文档数据库(Document-Oriented Databases)
- 特点:数据以文档形式存储,常用格式为JSON或BSON。
- 用途:适合存储和查询复杂结构的数据,如博客文章、用户档案等。
- 示例:MongoDB、CouchDB。
-
列族存储(Column-Family Stores)
- 特点:数据按列族存储,适合分析型应用。
- 用途:适合数据挖掘、实时分析等场景。
- 示例:Apache Cassandra、HBase。
-
图数据库(Graph Databases)
- 特点:数据以图的形式存储,节点和边表示实体及其关系。
- 用途:适合社交网络分析、推荐系统等。
- 示例:Neo4j、JanusGraph。
-
内存数据库(In-Memory Databases)
- 特点:数据主要存储在内存中,提供极高的读写性能。
- 用途:适合需要极高读写速度的应用场景。
- 示例:Redis(尽管Redis通常是键值存储,但它也有内存数据库的特点)。
1.4.3.常见NoSQL
高并发读写 (key-value) Redis,Tokyo Cabinet,Flare
海量数据的高效存储和访问(面向文档)MongeDB,CouchDB
高可扩展性和高可用性 Cassandra , Voldemort