本文开始之前,提出几个问题:① NoSQL 是什么,能解决什么问题;② NoSQL 与 SQL 的区别;③ 目前有哪些常见的 NoSQL;④ NoSQL、SQL、OLAP 和 OLTP 之间的关系。
1 NoSQL 是什么
1.1 NoSQL 的概念
NoSQL(not only sql,不仅仅是SQL)。口号是“select fun, profit from real_world where relational=false”,即非关联型的、强调 key-value 存储和文档数据库的优点。
文档数据库:各个文档的“数据模式”是不同的,但是它们能放在同一“集合”中,而不是像关系型数据库那样,表格中每行数据的模式都要相同。
1.2 NoSQL 的应用场景
(1)Key-Value 键值数据库
常见数据库:Redis、Memcached
适合场景:一般与 id 关联的数据,例如会话、配置文件、参数等。
不适合场景:① 数据之间关联;② 支持事务。
(2)Document-Oriented 面向文档数据库
常见数据库:MongoDB
适合场景:类似 Key-Value,但相同的 Key 下可以保持 多种数据结构的 Value,例如日志、分析等。
不适合场景:① 数据之间关联;② 支持事务。
(3)Column-Family 列存储数据库
常见数据库:HBase
适合场景:数据储存在列族,该列族常用于查询。例如日志、博客(标签查询)等。
不适合场景:① 支持事务。
例子:Person 类需要一起查询姓名和年龄而不是薪资,即姓名和年龄存放在同一个列族,而薪资存放在另一个列族。
2 NoSQL 与 SQL 的区别
问题:什么是结构化、非结构化数据和半结构化?
解答:① 结构化数据是指关系模型数据,即以关系数据库形式管理的数据;②
非结构化数据是指没有固定模式的数据,如WORD、PDF、PPT、EXL,各种格式的图片、视频等;③ 半结构化数据是上述两者的混合,既有关系数据,也有非固定数据。
(1)数据类型
SQL 合适处理结构化数据。
NoSQL 合适处理非结构化数据。
(2)事务性和可靠性
SQL 具有原子性、一致性、隔离、耐久性等特点,减少数据异常和保证在事务与数据库交互时数据的完整可靠。
NoSQL 没有事务,每一个数据集的操作都是原子级。
(3)查询性能
NoSQL 的查询性能优化 SQL
3 目前常见的 NoSQL
3.1 Redis
特点:运行异常快,支持list、set、hash,支持事务
应用场景:适合数据变化快且数据量不大的场景,例如,股票价格、实时数据搜集、实时通讯等。
3.2 RocksDB
特点:适用于多cpu存储高效、架构弹性
应用场景:适合低延时访问场景,例如实时scan数据集的图搜索query、实时请求Hadoop的应用等
3.3 HBase
特点:采用分布式架构 Map/reduce、大数据建模、优化实时查询
应用场景:适合随机访问的大数据场景
3.4 Hive
特点:提供了类SQL查询语言HQL、提供统一的元数据管理、可扩展
应用场景:数据仓库,例如数据抽取、数据加载、数据转换;数据汇总,例如每天/每周用户点击数、流量统计;非实时分析,例如日志分析、文本分析;
4 NoSQL、SQL、OLAP 和 OLTP 之间的关系
OLAP 的概念:联机事务处理(Online Transaction Processing),表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主。
OLTP 的概念:联机分析处理(Online Analytical Processing)系统,即数据仓库。
NoSQL、SQL、OLAP 和 OLTP 的特点:
① NoSQL:Key-Value 数据
② SQL:关系型数据
③ OLAP:离线分析、强调SQL执行。
④ OLTP:实时分析
基于 NoSQL、SQL、OLAP 和 OLTP 的特点,分析四者的关系。由于 NoSQL 具有查询速度快,常用作为缓存数据库,适用于 OLTP 的实时性特点。由于 SQL 作为通用数据库语言,具有查询关联数据的特点,适用于 OLAP 的离线数据分析特点,也适合作为流批一体的标准语言。总体而言,NoSQL 、SQL 是 OLTP 和 OLAP 的基础,前者为后者提供了可靠的缓存组件和通用的数据库语言。
网友评论