大数据下的数据存储问题¶
OLAP和OLTP¶
概念¶
数据库:是OLTP(联机事务处理)应用的场景,其存储的主要是与业务直接相关的数据,强调准确、低时延、高并发,如果没有特别强调,基本上数据库里只会去存储与业务相关的数据。
数据仓库:OLAP(联机分析处理)是数据仓库系统的主要应用,其支持的对象只要是面向分析场景的应用,提供结构化的、主题化的数据提供给运营,做业务反馈和辅助决策用,同时,有些场景下,也可以由数据仓库对业务进行支持。
- OLTP也就是我们一般用来做业务数据存储的,读写操作都有,一般是由Applications对其进行操作,由用户读写数据。例如商城的订单数据、库存数据等。
- OLAP一般是用来给内部人员做数据分析的,他更加侧重于对数据的查找,分析等。一般情况下是只提供内部人员使用的,例如大公司做市场的调查等。也可以用来做搜索和推荐功能。
对比维度 | OLTP | OLAP |
---|---|---|
一句话特征 | 小事务众多的场景 | 使用复杂查询来处理较大数据量的场景 |
ACID | 强 | 弱 |
面向用户 | 数据库操作人员 | 决策人员、高级管理人员,数据库科学家、业务分析师和知识工作者 |
使用场景 | 金融(如银行、股票)、电商、旅行预订等 | 商业智能(BI)、数据挖掘和气压决策支持应用程序 |
基本操作 | 主要为:insert, update, delete为主 | 主要为聚合操作,窗口操作等为主 |
操作数据范围 | 通常读写数据量较小(数十条记录) | 通常读写数据量大(数百万条记录) |
主要衡量指标 | 事务吞吐量(TPS) | 查询响应速度(QPS) |
响应时间要求 | 实时性要求高,通常毫秒级 | 实时性要求低,依赖于所处理的数据量,时间范围由小时,分钟秒级,亚秒级等 |
数据源 | 业务系统实时事务数据 | 业务系统中的历史数据,事务型数据 |
数据库表设计规范 | 通常需要满足三范式(3NF) | 不作规范 |
数据量/磁盘空间 | 较小,MB~TB级 | 较大,GB~PB级 |
并发量 | 需要支持大并发环境 | 对并发量要求不高 |
稳定性 | 要求高 | 要求高 |
可用性(备份,恢复) | 完整的备份,恢复能力(全量,增量) | 主要按时间点进行备份/恢复,备份/恢复要求不高 |
数据完整性要求 | 强一致性要求 | 数据完整性要求不高 |
系统吞吐量,IOPS | 低 | 高 |
挑战 | 1.高吞吐量,保证数据完整性,可靠性等;2.完整的生态工具,不同异构产品间协调使用难度; | 1.海量数据高效,低成本的数据存储;2.复杂查询高效处理; |
可靠性要求 | 通常要求高可靠性:主备、同城灾备、异地灾备 | 可靠性要求相对低,一般同城灾备 |
读特性 | 简单查询为主、每次查询只返回少量数据 | 复杂查询为主、对大量数据进行汇总 |
写特性 | 1.随机、低延迟、小数据量;2.数据更新、删除频繁 | 1.很少有更新、删除操作;2.大数据量批量、并行导入 |
数据模型 | ER(实体、关系) | 星型或者雪花、星座 |
数据粒度 | 行级 record | 多表 |
数据结构 | 高度结构化、复杂,适合操作计算 | 简单、适合分析 |
数据字段 | 动态变化,按字段更新 | 静态、很少直接更新,定时添加、刷新 |
数据返回值 | 一般为记录本身或该记录的多个列 | 一般为聚合计算结果 |
实例¶
OLTP¶
OLTP的实例有很多,而且常见。大致分类就可以RDBMS(关系型数据库),NewSQL,NoSQL。
- RDBMS:关系型数据库有很长的发展历史,所以技术和种类也比较成熟,常见的例如MySQL、ORACLE等等。RDBMS主要侧重于对ACID的满足。
ACID的解释(from 百度百科)
- Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
-
NoSQL:非关系型数据库也十分常见,他的侧重点主要在于高可用性和高扩展性。常见的例如Redis、MongoDB。
-
NewSQL:在大数据下的一种新的数据库,他结合了NoSQL和RDBMS的特点。
特点 | SQL | NoSQL | NewSQL |
---|---|---|---|
关系型属性 | 是的,它在很大程度上遵循关系模型。 | 不,它不遵循关系模型。它被设计成与之完全不同。 | 是的,因为关系模型对于实时分析来说同样至关重要。 |
ACID | 是的,ACID属性是其应用的基础 | 不是,而是提供CAP支持 | 是的,ACID的属性被照顾到了 |
SQL | 对SQL的支持 | 不支持旧的SQL | 是的,对旧SQL有适当的支持,甚至增强了功能。 |
OLTP | 对OLTP数据库来说效率不高。 | 它支持此类数据库,但不是最适合的。 | 完全支持OLTP数据库的功能,效率很高 |
扩展性 | 垂直扩展 | 只有垂直扩展 | 垂直+水平扩展 |
查询处理 | 可以轻松地处理简单的查询,当查询的性质变得复杂时就会失败 | 在处理复杂的查询时比SQL更好 | 在处理复杂查询和小型查询时效率很高。 |
分布式数据库 | 不支持 | 支持 | 支持 |
OLAP¶
OLAP的分为两个大体的方向:传统的OLAP和大数据OLAP
- 传统OLAP:十分常见,例如我们日常使用的Excel,还有Expression
- 大数据OLAP:属于是幕后工作者,虽然不常见,但是我们日常都在使用。例如我们日常使用的搜索引擎,就是基于OLAP的Elasticsearch(简称ES)实现的。
误区
OLAP和OLTP只是两个对于数据处理的概念,在数据库选型的时候只有适合而言,但是并不是绑定的关系,比如MySQL也可以做OLAP的小型数据处理。这就好像JAVA不仅仅能做WEB开发,也可以做嵌入式等,知识更适合而已。