Databases
使用 PostgreSQL 掌握数据库
核心概念
为什么选择数据库?
从本质上讲,数据库是一个旨在跨不同会话保留信息的系统。持久性确保数据即使在创建数据的程序或进程终止后也能继续存在。
存储层次结构:RAM 与磁盘
现代后端系统通过利用不同的存储介质来平衡速度和成本:
| 特色 | 内存中 (RAM) | 磁盘(SSD/HDD) |
|---|---|---|
| 速度 | 极快 | 比 RAM 慢 |
| 成本 | 贵 | 相对便宜 |
| 坚持 | 易失性(断电后丢失) | 非易失性(持久) |
| 示例 | Redis、Memcached | PostgreSQL、MongoDB、MySQL |
数据库管理系统 (DBMS)
DBMS 是一个软件层,其唯一职责是高效地向客户端提供 CRUD 操作:
- Create:插入新数据。
- Read:查询现有数据。
- Update:修改当前记录。
- Delete:删除数据。
DBMS 的职责:
1)数据的组织——
DBMS 定义了数据的结构方式(通常为表、行和列),以确保数据以逻辑方式存储并可以有效地检索。它管理磁盘上的物理存储,因此开发人员不必担心原始文件管理。
2)访问——CRUD操作
该系统提供标准化接口(如 SQL)来创建、读取、更新和删除数据。这允许多个用户或应用程序同时与同一数据集交互,而不会导致数据冲突。
诚信-
DBMS 强制执行“业务规则”或约束,例如确保主键是唯一的或“价格”列不包含文本。这保证了数据在整个生命周期中保持准确、一致和可靠。安全-
系统通过身份验证和基于角色的权限来控制谁可以查看或更改特定数据。它还提供日志记录和加密功能,以保护敏感信息免遭未经授权的访问或意外丢失。
为什么不使用文本文件而不是 DBMS :
1)解析:
解析文本文件需要将数据加载到内存中并手动拆分字符串,这对于大型数据集来说非常慢且占用资源。相比之下,DBMS 使用高度优化的二进制格式和索引来在几毫秒内检索特定数据,而无需读取整个文件。
2)结构:
文本文件是“非结构化”或“松散结构”,因此很难强制执行不同信息集之间的数据类型或关系。 DBMS 使用严格的模式来确保每条数据都遵循预定义的格式,从而防止保存“损坏”的数据(例如出现在电话号码字段中的姓名)。
3)并发:
如果两个用户尝试在同一时刻写入同一个文本文件,则该文件可能会损坏,或者一个用户的更改将被覆盖。 DBMS 通过使用锁定机制和事务来处理并发控制,允许数千个用户同时读写而不会丢失数据。
关系型数据库和非关系型数据库的区别:
| 特色 | 关系型 (SQL) | 非关系型 (NoSQL) |
|---|---|---|
| 数据模型 | 表格(行和列) | 文档、键值、图表或宽列 |
| 架构 | 修正: 在添加数据之前必须定义架构。 | 动态: 架构可以动态更改(无架构)。 |
| 关系 | 使用外键和联接来链接表。 | 数据通常嵌套或非规范化在一条记录中。 |
| 缩放 | 垂直: 增加单个服务器上的 CPU/RAM。 | 水平: 将更多服务器添加到分布式集群。 |
| 交易 | 遵循ACID(原子性、一致性、隔离性、持久性)。 | 遵循BASE(基本可用、软状态、最终一致性)。 |
| 最适合 | 复杂的查询、财务系统和结构化数据。 | 海量数据、实时分析、快速开发。 |
| 示例 | PostgreSQL、MySQL、Oracle、SQL Server | MongoDB、Redis、Cassandra、DynamoDB |
为什么选择 PostgreSQL?
Postgres 通常是稳健 SAS 应用程序的行业标准,因为:
- 广泛的文档: 超过 1,400 页,涵盖几乎所有边缘情况。
- 可靠性和可扩展性: 在高流量环境中拥有经过验证的记录。
- JSON 支持: 对
JSON字段的出色支持,允许开发人员处理动态、无模式数据,而无需像 MongoDB 这样的单独 NoSQL 数据库。 - 可扩展性: 强大的扩展系统,允许自定义数据类型和函数。