IT入门知识第四部分《数据库》(4/10)(一):https://developer.aliyun.com/article/1562518
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数据库都有其独特的特性和适用场景,理解这些特性有助于在大数据时代做出更合理的技术选择。