我们知道,数据库的数据处理能力是封闭的。所谓封闭性,这里是指要被数据库计算和处理的数据,必须事先装入数据库之内,数据在数据库内部还是外部是很明确的。
数据库一般有 OLTP 和 OLAP 两个用途。对于 OLTP 业务来讲,因为要保证数据的一致性,而一致性只有在一个确定的范围内谈论才有意义,这样就自然就会带来封闭性:数据库系统将保证也只负责数据库内部的数据的一致性。
如果不关注 OLTP 业务,只关心 OLAP 业务时,数据库在逻辑上可以被理解成为数据仓库,而这样的数据仓库也顺便继承了这个封闭性。
数据库的名字中有个“库”字,即使不考虑 OLTP 业务,也会让人觉得它是个以存储为主要目的的产品。其实不然,在实际应用中,特别是在大数据场景下,数据库有相当多的作用是计算,对于 OLAP 业务几乎可以说是全部,其存储经常也是为了计算服务的。因为数据库的计算能力还不错,远远超过大多数其它软件产品,所以人们经常会为了计算目标而部署数据库。
但是,一个以计算为主要任务的产品,没必要绑定封闭性这样的特点。
计算能力的封闭性有什么坏处呢?
一个典型的现象就是 ETL 经常被做成 ELT 甚至 LET。ETL 中的 E 和 T 这两步事实上也是某种计算,如果计算能力被封闭到数据库之内的话,我们就只能先把数据装入库中才能计算了,因为无法计算库外的数据。然而 ETL 过程中的原始数据常常并不在库内,或者至少不在这个用于计算的数据库中,也可能存在于多个数据库。总之,都需要先做个同库动作之后才能再计算。
有点多此一举!
数据库的封闭性,相当于城市有个城墙,数据要进出也必须通过数据库的城门&