logo
Database Design

database概述

Relational vs NoSQL 与选型要点

什么是 Database?

Database 是结构化信息(data)的有序集合,通常以电子方式存储在计算机系统中。Database 一般由 Database Management System (DBMS) 控制。Data + DBMS + 相关应用一起构成一个 database system,通常简称 database。

什么是 DBMS?

DBMS 是数据库的核心软件层,负责在 database 与用户/程序之间提供接口,让用户可以 query、update、以及管理数据的组织方式。DBMS 也负责管理与控制,比如 performance monitoring、tuning、backup 与 recovery。

常见组成

  • Schema:定义数据结构的“形状”,规定哪些 data 可以放在哪。Schema 可能是强制全局约束、局部约束,或完全不存在。
  • Table:类似 spreadsheet,由 columns 和 rows 组成。
  • Column:某一类数据的集合,每一行一个值,例如 text、numbers、enums、timestamps 等。
  • Row:一条记录。

Types of Databases

一般可分为 relationalnon-relational (NoSQL) 两大类。下面会从 system design 视角给到完整的类型、特性、trade-off 与选型建议。

Relational databases

Relational databases 会在存储前遵循固定 schema。数据通常组织成一组 relations(tables),每个 tuple(instance)有唯一 key。实例存在 rows,属性存在 columns。Table 之间通过 primary key 与 foreign key 连接。

SQL(Structured Query Language)用于 insertion、deletion、retrieval 等常见操作。

Relational databases 常见优势:simplicity、robustness、flexibility、performance、scalability,以及对通用业务数据的兼容性。

Relational databases 提供 ACID(Atomicity、Consistency、Isolation、Durability)保证,用更高层抽象来隐藏 dirty reads、write skew、phantom reads 等 anomaly。ACID 是强力的“通用锤子”,如果某些系统只需要少量一致性保证,就有机会用更轻量的 custom solution 换取更高 performance,但复杂度也会上升。

ACID 简述

  • Atomicity:transaction 要么全部成功,要么全部 rollback。
  • Consistency:transaction 前后数据库保持一致状态。
  • Isolation:并发 transaction 不互相影响,效果等价于顺序执行。
  • Durability:已完成的 transaction 在系统故障后依然持久存在。

常见 DBMS

  • MySQL
  • Oracle Database
  • Microsoft SQL Server
  • IBM DB2
  • Postgres
  • SQLite

Why relational databases?

Relational databases 是 structured data 的默认选项,原因包括:

Flexibility

SQL 中的 DDL (data definition language) 允许修改 database schema,比如 add/drop columns、rename tables 等,即便在 server 运行中也能完成。

Reduced redundancy

通过 normalization 降低 data redundancy,避免 inconsistent dependency。

Concurrency

高并发场景下,通过 transactional access 避免写冲突(例如酒店超卖)。失败即 rollback,成功即 commit。

Integration

多个应用共享数据库更容易做 data aggregation,concurrency control 负责多方访问协调。

Backup and disaster recovery

Relational databases 保持 consistent state,export/import 更容易做 backup/restore。很多 cloud RDBMS 还支持 continuous mirroring。

Drawback: Impedance mismatch

Relational model 是 table + tuple 的结构,而 in-memory 数据结构经常是嵌套对象、list、map 等。需要把复杂结构“翻译”为 relational algebra,这会带来 impedance mismatch 与额外的映射成本。

relational-view

A single aggregated value in the view is composed of several rows and tables in the relational database

Why non-relational (NoSQL) databases?

NoSQL databases 适合 semi-structured / unstructured datalow latencyflexible data model 的场景。核心特点:

  • Simple design:避免 relational 模型的 impedance mismatch,减少 join 与多表拆分。
  • Horizontal scaling:天然适合 scale out;数据可自动分布与 load balance。
  • Availability:常见支持 replication,node failure 时可快速替换。
  • Schema flexibility:document 可以有不同字段。
  • Cost:多为 open source 或 commodity hardware,成本更可控。

Types of NoSQL databases

nosql-types

The types of NoSQL databases

Key-value database

Key-value 用 hash-table 风格存储,key 是唯一标识,value 可以是 scalar 或复杂 object。易 partition、易水平扩展。

Use case:session-oriented 应用(例如 web session、recommendations、targeted promotions)。

key-value-example

Data stored in the form of key-value pair in DynamoDB, where the key is the combination of two attributes (Product ID and Type)

Document database

Document database 存 JSON/XML/BSON 等,结构是层级 tree(map/collection/scalar 组合)。不同 document 可以有不同 schema。常见:MongoDB、Firestore。

Use case:unstructured catalog data、content management(blogs、video platforms)。比如电商商品有上千属性,document 一次性存储更合适。

Graph database

Graph database 用 nodes 表示实体,edges 表示关系。适合关系密集的数据。常见:Neo4J、OrientDB。

Use case:social graph、recommendation、relationship analytics、fraud detection。

graph-example

A graph consists of nodes and links. This graph captures entities and their relationships with each other

Columnar database

Columnar database 按列存储数据,读特定字段时更高效,适合 analytics / OLAP。常见:Redshift、BigQuery。

Use case:aggregation、trend analysis、data warehousing。

Note: Columnar database 不等于 wide-column database。Wide-column(如 Cassandra、HBase)是 column families 组织 row,更适合 write-heavy 与 semi-structured data。

column-vs-row

Column-oriented and row-oriented database

Drawbacks of NoSQL databases

Lack of standardization

NoSQL 没有像 relational algebra 那样统一标准,跨产品迁移成本高。

Consistency trade-offs

很多 NoSQL 依赖 eventual consistency,在一致性与可用性之间做 trade-off。缺少强 referential integrity。

Choose the right database

选型时可以先用下面的对照表做 quick check:

Relational DatabaseNon-relational Database
数据结构明确、强 schema数据结构不固定或频繁变化
需要 ACID 事务能接受弱一致性或 eventual consistency
单机或较小规模需要大规模 horizontal scaling

选型不是“非此即彼”。现代系统里常见 polyglot persistence:同一系统使用多种 database。

Challenges

大规模运行 databases 常见挑战:

  • 应对数据量爆炸:来自 sensors、connected machines 等的海量数据。
  • 确保 data security:安全与可访问性需要平衡。
  • 跟上业务需求:需要 real-time 数据支持决策。
  • 管理与维护成本:规模越大,ops 成本越高。
  • 突破 scalability 限制:on-premises 场景更明显。
  • 满足 data residency / sovereignty / latency:合规与延迟要求可能影响架构选择。

相关练习题

database概述

暂无相关练习题