`OLAP` 是 **Online Analytical Processing** 的缩写,中文是**联机分析处理**。
这段简历中提到“结合离线计算与OLAP技术,实现查询效率的跨越式提升”,意味着求职者利用了OLAP技术来解决企业成本管理系统中的性能瓶颈,特别是在处理大量数据、进行复杂分析查询时的效率问题。
**OLAP 的核心思想和作用:**
1. **多维分析 (Multidimensional Analysis)**:这是 OLAP 最重要的特点。传统的关系型数据库(用于 OLTP,即联机事务处理)通常以二维表格的形式存储数据,关注的是事务的快速处理。而 OLAP 将数据组织成多维的“数据立方体”(Data Cube)模型。这个立方体的每个维度代表一个分析视角(例如:时间、产品、地区、客户),立方体内部的单元格则存储度量值(例如:销售额、成本、利润)。
2. **为分析而设计**:OLAP 系统是专门为分析和决策支持而设计的,而不是为了日常事务处理。它的主要目标是提供快速、灵活、交互式的数据查询和分析能力,帮助用户从不同角度深入洞察业务数据。
3. **预计算与聚合 (Pre-computation and Aggregation)**:为了加速查询,OLAP 系统通常会在数据加载到数据仓库或数据立方体时,对数据进行大量的预计算和聚合。这意味着很多常见的汇总、统计结果已经被计算并存储起来,用户查询时可以直接获取,而无需实时地扫描和计算原始海量数据。这就是为什么简历中提到“成本分析大客户查询耗时从120秒降至10秒,中长尾查询降至1秒内”,因为预计算大大减少了查询时的计算量。
4. **常见的 OLAP 操作**:
- **上卷 (Roll-up)**:将数据向上聚合,例如从“城市销售额”上卷到“省份销售额”。
- **下钻 (Drill-down)**:从汇总数据深入到更详细的细节,例如从“年份销售额”下钻到“月份销售额”。
- **切片 (Slice)**:选择一个维度的特定值,查看该维度下的数据,例如只看“2023年所有产品的销售额”。
- **切块 (Dice)**:在多个维度上选择特定范围或值的组合,例如只看“2023年华东地区的产品A的销售额”。
- **旋转 (Pivot)**:改变数据立方体的视图,将维度从行转换到列,或反之,以便从不同角度观察数据。
**OLAP 与 OLTP 的区别:**
- **OLTP (Online Transaction Processing)**:联机事务处理,关注的是日常业务交易的快速、准确处理,如订单录入、库存更新等。数据通常是实时写入、修改,查询多是简单、小范围的。
- **OLAP (Online Analytical Processing)**:联机分析处理,关注的是历史数据的复杂分析和查询,为决策提供支持。数据通常是周期性从 OLTP 系统中抽取、转换、加载到数据仓库中。
**在简历的语境中:**
求职者将 `OLAP` 技术应用于**企业成本管理系统**,意味着他能够处理和分析海量的成本数据,并以多维度的视角(例如,按时间、按部门、按项目、按产品等)进行快速查询和分析,从而帮助企业更高效地进行成本控制和决策。通过采用 OLAP,他显著提升了复杂查询的效率,将原本耗时很长的查询缩短到秒级,这对于企业进行实时的成本分析和管理至关重要。
___
MySQL/✅A,B,C的联合索引,按照 AB,AC,BC查询,能走索引吗?.md
MySQL/✅InnoDB中的索引类型?.md
MySQL/✅InnoDB中的表级锁、页级锁、行级锁?.md
MySQL/✅InnoDB为什么使用B+树实现索引?.md
MySQL/✅InnoDB和MyISAM有什么区别?.md
MySQL/✅InnoDB如何解决脏读、不可重复读和幻读的?.md
MySQL/✅InnoDB支持哪几种行格式?.md
MySQL/✅InnoDB的一次更新事务是怎么实现的?.md
MySQL/✅Innodb加索引,这个时候会锁表吗?.md
MySQL/✅Innodb的RR到底有没有解决幻读?.md
MySQL/✅MyISAM 的索引结构是怎么样的,它存在的问题是什么?.md
MySQL/✅MySQL 5.x和8.0有什么区别?.md
MySQL/✅MySQL 中如何查看一个 SQL 的执行耗时.md
MySQL/✅MySQL 为什么是小表驱动大表,为什么能提高查询性能?.md
MySQL/✅MySQL 的 select _ 会用到事务吗?.md
MySQL/✅MySQL 获取主键 id 的瓶颈在哪里?如何优化?.md
MySQL/✅MySQL中like的模糊查询如何优化.md
MySQL/✅MySQL中的事务隔离级别?.md
MySQL/✅MySQL为什么会有存储(内存)碎片?有什么危害?.md
MySQL/✅MySQL主从复制的过程.md
MySQL/✅MySQL做索引更新的时候,会锁表吗?.md
MySQL/✅MySQL只操作同一条记录,也会发生死锁吗?.md
MySQL/✅MySQL如何实现行转列和列转行?.md
MySQL/✅MySQL怎么做热点数据高效更新?.md
MySQL/✅MySQL执行大事务会存在什么问题?.md
MySQL/✅MySQL是AP的还是CP的系统?.md
MySQL/✅MySQL是如何保证唯一性索引的唯一性的?.md
MySQL/✅MySQL用了函数一定会索引失效吗?.md
MySQL/✅MySQL的BLOB和TEXT有什么区别_.md
MySQL/✅MySQL的Hash Join是什么?.md
MySQL/✅MySQL的binlog有几种格式.md
MySQL/✅MySQL的limit+order by为什么会数据重复?.md
MySQL/✅MySQL的主键一定是自增的吗?.md
MySQL/✅MySQL的优化器的索引成本是怎么算出来的?.md
MySQL/✅MySQL的并行复制原理.md
MySQL/✅MySQL的数据存储一定是基于硬盘的吗?.md
MySQL/✅MySQL的深度分页如何优化.md
MySQL/✅MySQL的行级锁锁的到底是什么?.md
MySQL/✅MySQL的驱动表是什么?MySQL怎么选的?.md
MySQL/✅MySQL索引一定遵循最左前缀匹配吗?.md
MySQL/✅MySQL自增主键用完了会怎么样?.md
MySQL/✅SQL中PK、UK、CK、FK、DF是什么意思?.md
MySQL/✅SQL执行计划分析的时候,要关注哪些信息?.md
MySQL/✅SQL语句如何实现insertOrUpdate的功能?.md
MySQL/✅Using filesort 能优化吗,怎么优化?.md
MySQL/✅a,b两个单独索引,where a=xx and b=xx 走哪个索引?为什么?.md
MySQL/✅binlog、redolog和undolog区别?.md
MySQL/✅buffer pool的读写过程是怎么样的?.md
MySQL/✅char和varchar的区别?.md
MySQL/✅count(1)、`count(_)` 与 count(列名) 的区别.md
MySQL/✅limit 0,100和limit 10000000,100一样吗?.md
MySQL/✅on和where有什么区别?.md
MySQL/✅order by 是怎么实现的?.md
MySQL/✅truncate、delete、drop的区别?.md
MySQL/✅undolog会一直存在吗?什么时候删除?.md
MySQL/✅uuid和自增id做主键哪个好,为什么?.md
MySQL/✅where条件的顺序影响使用索引吗?.md
MySQL/✅一个查询语句的执行顺序是怎么样的?.md
MySQL/✅为什么MySQL 8.0要取消查询缓存?.md
MySQL/✅为什么MySQL会选错索引,如何解决?.md
MySQL/✅为什么MySQL默认使用RR隔离级别?.md
MySQL/✅为什么不建议使用存储过程?.md
MySQL/✅为什么不推荐使用外键?.md
MySQL/✅为什么大厂不建议使用多表join?.md
MySQL/✅为什么默认RR,大厂要改成RC?.md
MySQL/✅乐观锁与悲观锁如何实现?.md
MySQL/✅二级索引在索引覆盖时如何使用MVCC?.md
MySQL/✅什么情况会导致自增主键不连续?.md
MySQL/✅什么时候索引失效反而提升效率?.md
MySQL/✅什么是InnoDB的页分裂和页合并.md
MySQL/✅什么是MySQL的内存碎片?如何清理?.md
MySQL/✅什么是MySQL的字典锁?.md
MySQL/✅什么是OnlineDDL.md
MySQL/✅什么是ReadView,什么样的ReadView可见?.md
MySQL/✅什么是buffer pool?.md
MySQL/✅什么是事务的2阶段提交?.md
MySQL/✅什么是前缀索引,使用的时候要注意什么?.md
MySQL/✅什么是回表,怎么减少回表的次数?.md
MySQL/✅什么是意向锁?.md
MySQL/✅什么是排他锁和共享锁?.md
MySQL/✅什么是数据库事务?.md
MySQL/✅什么是数据库的主从延迟,如何解决?.md
MySQL/✅什么是数据库的锁升级,Innodb 支持吗?.md
MySQL/✅什么是数据库范式,为什么要反范式?.md
MySQL/✅什么是最左前缀匹配?为什么要遵守?.md
MySQL/✅什么是索引合并,原理是什么?.md
MySQL/✅什么是索引覆盖、索引下推?.md
MySQL/✅什么是索引跳跃扫描.md
MySQL/✅什么是聚簇索引和非聚簇索引?.md
MySQL/✅什么是脏读、幻读、不可重复读?.md
MySQL/✅介绍一下InnoDB的数据页,和B+树的关系是什么?.md
MySQL/✅介绍下InnoDB的锁机制?.md
MySQL/✅介绍下MySQL 5.7中的组提交.md
MySQL/✅从 innodb 的索引结构分析,为什么索引的 key 长度不能太长_.md
MySQL/✅区分度不高的字段建索引一定没用吗?.md
MySQL/✅唯一索引和主键索引的区别?.md
MySQL/✅如何优化一个大规模的数据库系统?.md
MySQL/✅如何理解MVCC?.md
MySQL/✅如何进行SQL调优?.md
MySQL/✅当前读和快照读有什么区别?.md
MySQL/✅怎么比较两个索引的好坏?.md
MySQL/✅慢SQL的问题如何排查?.md
MySQL/✅执行计划中,key有值,还是很慢怎么办?.md
MySQL/✅数据库乐观锁的过程中,完全没有加任何锁吗?.md
MySQL/✅数据库加密后怎么做模糊查询?.md
MySQL/✅数据库怎么做加密和解密?.md
MySQL/✅数据库扫表任务如何避免出现死循环.md
MySQL/✅数据库死锁如何解决?.md
MySQL/✅是否支持emoji表情存储,如果不支持,如何操作?.md
MySQL/✅有了关系型数据库,为什么还需要NOSQL?.md
MySQL/✅用了索引还是很慢,可能是什么原因?.md
MySQL/✅索引失效的问题如何排查?.md
MySQL/✅联合索引是越多越好吗?.md
MySQL/✅设计索引的时候有哪些原则(考虑哪些因素)?.md
MySQL/✅说一说MySQL一条SQL语句的执行过程?.md
MySQL/✅阿里的数据库能抗秒杀的原理.md
MySQL/✅高并发情况下自增主键会不会重复,为什么?.md
## 列式
好的,我们用一个非常通俗的例子来解释**列式数据库**和**普通数据库(行式数据库)**的区别。
想象你有一个**巨大的表格**,里面记录了你公司每个月的销售数据。表格的列可能是:**日期、产品名称、地区、销售额、客户ID**。
---
### **普通数据库(行式数据库)**
- **存储方式:** 就像我们平时看到的表格一样,数据是**按行存储**的。
- 当你记录一条新的销售数据时,比如 "2023年5月26日, 电脑, 北京, 5000, 客户A",数据库会把这一整行数据**连续地**存储在一起。
- 可以想象成,你的数据是这样存储的:
- 行1: (日期1, 产品1, 地区1, 销售额1, 客户ID1)
- 行2: (日期2, 产品2, 地区2, 销售额2, 客户ID2)
- ...
- **优点:**
- **快速插入/更新单条记录:** 如果你想插入一条新的销售记录,或者更新某个客户的销售额,因为它是一整行存储的,所以修改起来非常方便快捷。就像你直接在表格的某一行里填入或修改数据。
- **适合事务处理 (OLTP):** 比如在线商城下单、银行转账,这些操作通常是针对单条或少量记录的增删改查。
- **缺点:**
- **分析慢(尤其当你只关心部分列时):** 假设你现在只想知道“所有产品的总销售额”是多少。数据库不得不**读取每一行**,然后从每一行中跳过“日期”、“产品名称”、“地区”、“客户ID”,只取出“销售额”这一列的数据来求和。*即使你只想要一列,它也得把整行数据读出来,再从中挑拣。当表格非常大时,这就很浪费时间和资源*。
---
### **列式数据库**
- **存储方式:** 顾名思义,它把数据**按列存储**。
- 还是上面的销售数据,它会把所有“日期”存放在一起,所有“产品名称”存放在一起,所有“销售额”存放在一起,等等。
- 可以想象成,你的数据是这样存储的:
- 日期列: (日期1, 日期2, 日期3,...)
- 产品名称列: (产品1, 产品2, 产品3,...)
- 销售额列: (销售额1, 销售额2, 销售额3,...)
- ...
- **优点:**
- **分析快(尤其当你只关心部分列时):** 假设你只想知道“所有产品的总销售额”是多少。数据库只需要去读取“销售额”这一列的数据就行了,它不需要去碰其他列的数据。就像你直接拿到了一张纸,上面密密麻麻全是销售额数字,你直接求和就行,不需要跳过其他无关信息。
- **压缩效率高:** 因为同一列的数据类型和值往往是相似的(比如“地区”列可能只有少数几个城市),所以列式数据库可以应用更高效的压缩算法,大大减少存储空间。
- **适合分析处理 (OLAP):** 比如大数据分析、报表生成、商业智能等。
- **缺点:**
- **插入/更新单条记录相对慢:** 如果你想插入一条新的销售记录,或者更新某个客户的销售额,你就得去好几列(日期列、产品名称列、销售额列等)中找到对应的位置,然后分别插入或修改。这比行式数据库一次性写一行要复杂一些。
---
### **总结:**
简单来说:
- **行式数据库(普通数据库)** 就像是你的**笔记本**,你一页一页(一行一行)地记录所有信息,方便你快速查阅或修改某页(某行)的完整内容。
- **列式数据库** 就像是你的**分类归档文件柜**,你把所有“日期”的纸条放一个抽屉,所有“销售额”的纸条放另一个抽屉。当你需要统计所有销售额时,你只需要打开“销售额”的抽屉,比翻阅整个笔记本要快得多。
**选择哪个取决于你的需求:**
- 如果你需要频繁地**添加、修改单条记录**,并且每次操作都关心记录的**完整信息**,那么**行式数据库**更适合(例如,银行交易系统、电商订单系统)。
- 如果你需要对**海量数据进行复杂分析、统计和报表生成**,而且通常**只关心部分列**的数据,那么**列式数据库**会表现得更出色(例如,数据仓库、用户行为分析、商业智能报表)。
大多数情况下,企业会同时使用两种类型的数据库,行式数据库负责业务交易,列式数据库负责数据分析。