龙空技术网

大数据初篇谈存储

巽百谷 54

前言:

现时小伙伴们对“列式存储oracle”大概比较注意,咱们都需要知道一些“列式存储oracle”的相关内容。那么小编在网摘上网罗了一些有关“列式存储oracle””的相关知识,希望兄弟们能喜欢,各位老铁们快快来学习一下吧!

阳光

天下苦‘秦’久矣,大数据风风雨雨一路走来,经历了全球的疫情,见证了美股的多次熔断,其自身存储也在不断坎坷发展,前面提到不痛不痒,其实有点夸张。如果开发者从传统数仓转到以 Hadoop 为存储的数仓,会感觉到极不适应,犹如戴着脚镣跳舞一般。

那是什么原因导致开发小伙伴不适应目前大数据架构下的数仓呢,就是所谓的 CRUD 操作,当然这里就是特指 Delete 和 Update 操作,基本上这两个操作困惑了开发者好多年,因此开篇提到了天下苦秦久矣,其实就是这两个操作很难运用自如,比如想要对历史拉链表进行 Merge 操作,在 Hive 语法中就要写一大串 SQL 代码 来实现,而且性能可能还不是很好。记得当初在 Y 公司,有次改了离职小伙伴留下的代码,不小心掉入陷阱,导致我们的拉链数据全部出错,那怎么办呢,那就解链吧,坑啊,Hive 的SQL 语法不太好解,既然这个招我们接不住,那就重做,幸好我们当时对数据做了快照可以恢复,因为我们的拉链任务多,而且跑起来很慢,所以干到凌晨好几点才做完。又是一次特殊的经历,从那时起再也不敢轻易动那个拉链脚本了,里面的日期参数的坑太多了。

然而这两年开源社区也在不断的努力来解决这个问题,可谓雨后春笋,百花齐放、百家争鸣,先后出来了CarbonData、Delta Lake、Iceberg等存储方面的组件来解决数据库方面的 ACID 和 Update、Delete操作,当然 Hive 本身也是支持更新操作,但是太弱了。而前面提到那个三个组件,也大多数基于 Spark 来解决更新操作的,虽然功能还可以,但是业界用 Hive 的还是比较多的,目前也正在努力支持 Hive。

聊完了数据更新的苦,我们再聊聊下一个苦,人在江湖混,哪能随心所欲快意恩仇,我们要对老板负责。目前大数据平台的数据仓库有两种形态,一是离线数仓、二是实时数仓。所谓的离线数仓可以通俗的理解为在上面执行的 SQL 一天或者更长时间执行一次,比如我需要看昨天的UV数(网页访问的用户量),那我们可以简单在凌晨 12 点之后执行 SQL 取出昨天的数据,然后形成报表给早晨上班的老板看,这种跑 SQL 的任务我们称为离线任务;那所谓的实时数仓又是什么鬼呢,其实就是可以理解把离线的 SQL 每秒或者更短时间不停的执行取出数据,比如老板办公室里有个大屏幕主要实时的显示当天访问的用户量,那这种 SQL 就要不停的执行,我们称之为 实时任务。于是乎,老外提出了两个牛逼的概念 Lambda 架构和 Kappa 架构,所谓的 Lambda 架构就是只能处理离线任务,而Lambda 架构可以处理两者的任务,也就是我们说的流批一体,代表是今天的 Flink,

Flink 在这方面发展的很快,比如新版本可以完全兼容 Hive SQL 语法。但是这个 Flink 只是个计算引擎,也没有解决更新操作的问题,所以江湖中的小伙伴依旧苦秦,只是习惯了这种规则,所以也感受不到苦了,还乐此不疲的说我们用了 Flink。

每个公司都有自己的业务模型,选择适合自己的技术而且能玩的转的那就是王道。接下来聊聊目前开源的一个TiDB,在 TiDB 之前,社区也出现了很多应用于 OLAP(就是为分析数据量身打造的存储引擎,传统的数据库如Oracle等我们称OLTP) 存储的 DB,比如Kudu、Greenplum、ClickHouse 等这些数据库都是基于列式存储的,相比于传统基于行式的Oracle等数据库的优势在是能快速对大量数据进行聚合计算,这种涉及到行存和列存的底层文件原理,简单来讲就是列存就是一列数据存储在一个文件里,在做求和运算的时候只要扫描这个一个文件就行,而行存的某一列的数据都是分布在多个文件,在求和运算的时候要遍历多个文件,那当然是遍历一个文件效率高了啊。

那有没有一种数据库可以基于 OLTP 的实现ACID 和 CRUD的,又可以实现 OLAP 快速分析场景的数据库呢,目前可能比较好的是阿里的 OceanBase,但是没有开源,具体有多牛逼没有用过。偶尔在 Y 公司,小伙伴引入了 TiDB 使用,第一眼看起来存储结构蛮像 Hbase的,那就用用了解了解,反正开源的,当时用的时候版本是2.X的,各种奇葩的坑都经历过,有个映像特别深,“select count(1) from t”和 “select count(disctinct pk) from t”的数据居然不一样, 很乖吧,官方解释由于分布式数据库,主键被更新的时候可能多保留个副本,还有个不适应的地方就是 left join 的时候 on 后面的条件不走索引,希望这些东西不要在4.X版本出现了哈。TiDB之所以进入我们的视野,他不仅支持OLTP而且支持OLAP,不过支持 OLAP 的功能还没有开源,所以它两个都兼容了,分析和和实时更新都有了,期待 TiDB 新版本出来有一种全新的感觉。

其实未来我们想要的数据库,无论数据大小,无论 SQL 逻辑有多复杂,都可以像今天的 Oracle 等一样方便的实时操作。估计随着硬件技术的提高,若真正实现了这种数据库,Hadoop 的生态圈也就夕阳西下了吧, 也就不用苦秦了,我们也就可以告老返乡泛舟于西湖。

知乎专栏:

知识星球

标签: #列式存储oracle