一、知识点
1. NoSQL数据库概述
NoSQL(Not Only SQL)是指非关系型的数据库,用于解决传统关系数据库在大数据、高并发、灵活数据模型等场景下的局限性。
NoSQL的四大分类:
类型 | 特点 | 典型产品 | 适用场景 |
键值存储 | 基于哈希表,key唯一,value无结构 | Redis, Memcached, DynamoDB | 缓存、会话管理、配置存储 |
列族存储 | 按列族存储,适合稀疏表,支持动态列 | HBase, Cassandra | 大数据分析、日志存储、时序数据 |
文档存储 | 存储JSON/BSON文档,支持嵌套结构 | MongoDB, CouchDB | Web应用、内容管理、用户资料 |
图数据库 | 以节点、边、属性表示数据,高效处理关系 | Neo4j, JanusGraph | 社交网络、推荐系统、知识图谱 |
NoSQL的特点(对比关系数据库):
灵活的数据模型:无需预定义 schema,可动态添加字段。
水平扩展:通过分片(sharding)可轻松扩展到成百上千台节点。
高并发读写:牺牲强一致性(通常提供最终一致性),换取高吞吐量。
无复杂关联:通常不支持多表连接,更适合单表查询。
BASE 理论:基本可用(Basically Available)、软状态(Soft state)、最终一致性(Eventually consistent),替代 ACID。
2. 数据仓库概述
数据仓库(Data Warehouse,DW)是面向主题、集成、非易失、时变的数据集合,用于支持管理决策。
核心特征:
面向主题:围绕业务主题(如销售、客户)组织数据,而非应用。
集成:从多个异构数据源(关系数据库、日志文件等)抽取、清洗、转换后加载。
非易失:数据一旦写入,通常不修改,只追加和查询。
时变:保存历史数据,可追溯时间变化。
数据仓库架构:
ETL(抽取、转换、加载) 进行清洗、转换,加载到数据仓库。
数据存储:通常采用维度建模(星型模型、雪花模型)。
元数据管理:记录数据来源、转换规则等。
前端展示:报表、OLAP分析、数据挖掘。
OLAP(联机分析处理):
支持多维分析操作:上卷(roll-up)、下钻(drill-down)、切片(slice)、切块(dice)、旋转(pivot)。
数据存储方式:MOLAP(多维数组)、ROLAP(关系表)、HOLAP(混合)。
事实表与维度表:
事实表:存储可度量的数值(如销售额、数量),包含指向维度表的外键。
维度表:存储描述性属性(如时间、产品、客户),用于分组、筛选。
3. NoSQL 与数据仓库的关系
不同目的:NoSQL 主要应对 OLTP 的高并发、灵活数据模型;数据仓库主要服务于 OLAP 分析决策。
可结合使用:将 NoSQL 中的数据通过 ETL 导入数据仓库进行分析;或使用数据仓库作为 NoSQL 的历史数据归档。
二、具体事例
事例1:NoSQL 选型(社交网络)
某社交平台需要存储用户关系(谁关注谁)、用户动态(时间线)、点赞记录。
用户关系:适合用图数据库(Neo4j),便于查询“朋友的朋友”等复杂关系。
用户动态:适合用文档数据库(MongoDB),每条动态可包含文本、图片、位置等嵌套结构。
点赞计数:适合用键值存储(Redis),实时读写高频。
事例2:数据仓库维度建模(电商销售)
事实表:销售事实(销售ID,日期维度ID,产品维度ID,客户维度ID,销售额,数量)
维度表:
日期维度(日期ID,年,季度,月,日)
产品维度(产品ID,产品名称,类别,价格)
客户维度(客户ID,姓名,城市,等级)
典型查询:统计 2024 年第一季度每个产品类别的总销售额。
sql
SELECT p.类别, SUM(f.销售额)FROM 销售事实 fJOIN 日期维度 d ON f.日期维度ID = d.日期IDJOIN 产品维度 p ON f.产品维度ID = p.产品IDWHERE d.年 = 2024 AND d.季度 = 1GROUP BY p.类别;
事例3:ETL 过程
从业务数据库(MySQL)抽取订单数据 → 清洗(去除无效订单,统一日期格式) → 转换(计算总价,映射维度ID) → 加载到数据仓库的事实表。