大数据的存储与处理
English version: Storage and Treatment of Big Data
本讲涵盖大数据系统的两大支柱:数据如何存储(关系型与非关系型数据库)以及计算资源如何交付(云部署与服务模式)。
讲次概览
本讲在原始大数据技术与实际落地之间建立桥梁,重点讨论:
- 数据库范式 — 关系型(SQL)与非关系型(NoSQL)的区别及适用场景。
- 云计算 — 部署模式(公有云、私有云、混合云)与服务模式(SaaS、PaaS、IaaS)。
关系型数据库(SQL)
关系型数据库将数据组织为表(行与列),并通过外键定义表之间的关系。它使用 SQL(结构化查询语言)进行查询与操作。
核心特征
- 结构化模式:数据必须符合预定义的表结构与类型。
- ACID 保证:确保原子性、一致性、隔离性和持久性。
- 强关联性:表之间通过主键/外键建立关系。
常见系统
| 系统 | 典型应用场景 |
|---|---|
| MySQL | Web 应用、LAMP 技术栈 |
| PostgreSQL | 复杂查询、地理空间数据 |
| Microsoft SQL Server | 企业级 Windows 环境 |
| Oracle | 大规模企业系统 |
| Microsoft Access | 小型桌面应用 |
何时使用
- 数据完整性和复杂事务至关重要时。
- 实体之间的关系明确且稳定时。
- 需要强大的查询能力(JOIN、聚合、窗口函数)时。
Warning
当数据量或写入吞吐量超出单台服务器承载能力时,RDBMS 的水平扩展会变得困难。这正是 NoSQL 的用武之地。
非关系型数据库(NoSQL)
NoSQL 数据库旨在解决传统 RDBMS 在处理非结构化或半结构化大数据时的可扩展性与性能瓶颈。它们以牺牲部分 ACID 保证为代价,换取水平扩展能力和模式灵活性。
四大类型
| 类型 | 数据模型 | 最适用场景 | 典型产品 |
|---|---|---|---|
| 键值存储 | 键-值对字典 | 缓存、会话管理、简单查询 | Redis、DynamoDB、Riak、Memcached |
| 列式存储 | 按列而非按行存储数据 | 分析查询、OLAP、批量快速读取 | HBase、Cassandra、Bigtable |
| 文档存储 | 灵活的文档(JSON、XML、BSON) | 内容管理、用户画像、产品目录 | MongoDB、CouchDB、DocumentDB |
| 图数据库 | 节点、边、属性 | 社交网络、推荐引擎、欺诈检测 | Neo4j、InfiniteGraph、OrientDB |
键值存储(Key-Value Store)
最简单的 NoSQL 模型。每个数据项以属性名(键)和对应值的形式存储。
# 概念示例
user_session = {
"session_001": {"user_id": 42, "login_time": "2025-04-20T09:00:00Z"},
"session_002": {"user_id": 7, "login_time": "2025-04-20T09:15:00Z"}
}Info
Amazon DynamoDB 是 AWS 推出的托管键值与文档数据库。Redis 则被广泛用于内存缓存场景。
列式存储(Column-Store)
与面向行的数据库(OLTP)不同,列式存储将数据保存在列的集合中(OLAP)。这显著提升了分析查询性能,因为系统只需读取与查询相关的列。
示例:一个包含 1 亿行、100 列的数据库(共 100 GB)。
- 查询:男性的平均年龄是多少?
- 行式数据库需读取:100 GB
- 列式数据库仅需读取
age和gender两列:2 GB
| 对比维度 | 行式存储(OLTP) | 列式存储(OLAP) |
|---|---|---|
| 存储方式 | 整行数据存放在同一个磁盘块 | 每列数据分别存放在不同块 |
| 最适用 | 事务处理、频繁更新 | 分析统计、批量聚合 |
| 典型读取模式 | 查询少量行、多列 | 查询大量行、少量列 |
| 代表产品 | MySQL、PostgreSQL、Oracle | HBase、Cassandra、ClickHouse |
文档数据库(Document Database)
以灵活的文档(通常为 JSON)代替固定的行来存储数据。一组文档构成一个集合。
{
"_id": "user_001",
"name": "Tom",
"age": 28,
"skills": ["Python", "SQL", "Cloud"],
"address": {"city": "Suzhou", "zip": "215123"}
}Info
MongoDB 使用 BSON(Binary JSON)存储文档,相比纯 JSON 支持更丰富的数据类型。
图数据库(Graph Database)
用节点(实体)、边(关系)和属性(特征)来表示数据,特别适合深度关系遍历。
- 节点:对象或实例(相当于关系型数据库中的一行)。
- 边:具有方向和类型的关系。
- 属性:附加在节点或边之上的信息。
应用场景:在社交网络中,通过遍历边来查找”朋友的朋友”,避免昂贵的 JOIN 操作。
云计算
云计算通过将计算资源靠近数据、采用弹性资源供给(根据需求自动扩缩容),彻底改变了企业存储、访问和处理数据的方式。
部署模式
| 模式 | 所有权 | 访问方式 | 最适用场景 |
|---|---|---|---|
| 公有云 | 第三方厂商(AWS、Azure、GCP) | 互联网,按量付费 | 初创企业、负载波动大、成本敏感 |
| 私有云 | 单一组织(自建或托管) | 内部网络 | 强监管行业、需要完全数据控制权 |
| 混合云 | 公有云 + 私有云组合 | 混合访问 | 突发流量、敏感数据留本地、通用负载上云 |
服务模式
云服务通常被可视化为三层栈:越往上,厂商托管的内容越多。
| 模式 | 用户管理 | 厂商管理 | 典型示例 |
|---|---|---|---|
| SaaS | 无需管理(直接使用应用) | 全部:应用、数据、运行时、中间件、操作系统、网络、存储 | Gmail、Dropbox、Salesforce、Google Workspace |
| PaaS | 应用、数据 | 运行时、中间件、操作系统、网络、存储 | Heroku、Google App Engine、AWS Elastic Beanstalk |
| IaaS | 操作系统、中间件、运行时、应用、数据 | 网络、存储、虚拟化、服务器 | AWS EC2、Azure VMs、DigitalOcean、Linode |
SaaS — 软件即服务
通过互联网交付完整应用,通常以订阅或按量付费形式提供。
- 优势:零安装、集中更新、任何设备可访问。
- 局限:厂商锁定、定制化受限、数据存放在第三方服务器。
PaaS — 平台即服务
提供托管开发平台,使团队无需维护底层基础设施即可构建和部署应用。
- 优势:缩短上市时间、自动扩缩容、降低运维负担。
- 局限:运行时约束、数据安全顾虑、可能受限于厂商专有 API。
IaaS — 基础设施即服务
按需交付原始计算资源。最灵活,但也需要最多管理。
- 优势:对全栈的完全控制、高度可扩展、用多少付多少。
- 局限:需要内部 DevOps 能力、多租户安全风险、用户需自行维护操作系统补丁。
如何选择?
需要开箱即用的应用? → SaaS
需要部署代码但不想管操作系统? → PaaS
需要对服务器和操作系统完全控制? → IaaS
要点总结
| 主题 | 核心要点 |
|---|---|
| 关系型数据库 | 结构化、ACID、SQL、擅长事务处理 |
| NoSQL | 可扩展、模式灵活、针对特定数据模型优化(键值、列式、文档、图) |
| 云部署模式 | 公有云(成本)、私有云(控制)、混合云(兼顾) |
| 云服务模式 | SaaS(用)、PaaS(建)、IaaS(控) |
相关概念
- 关系型数据库 — SQL 与 ACID 深入解析
- 非关系型数据库 — 设计模式与一致性模型
- OLTP 与 OLAP — 事务型与分析型负载对比
- 云服务模式 — SaaS、PaaS、IaaS 详细对比