最近的“好消息” 是一个接一个,有点让人体会到,人间不值得,平安是福才是千古名训。
数据库里面传统的老四样,POMS,具体这四样在设计上有什么根本上的不同,想来分析分析,但如果写的太正式估计也没人爱看,数据库本身也是软件,对比一下完成同种功能的软件了解其中的不同,有利于针对项目针对应用来选择适合的东西。(基于个人的能力,以及认知,下面的文字必然会存在很多漏洞,所以放在周五,大家就当周末放松,另外周围的牛人都潜伏着,还希望多多帮助,下面如果有根本性的错误,还请指出,不吝赐教,在此表示感谢)
Round One
四种数据库,存储格式 PG ORACLE ,典型的堆表(Heap table)存储数据的方式,SQL SERVER MYSQL 典型的 Cluster index table ( 如果你读过SQL SERVER 2000 到 SQL SERVER 2005 的方面的书籍,你就会知道早期的SQL SERVER 十分强调要建立聚簇索引,并且有序的是最好的,而新版本的SQL SERVER 目前很少有table scan 如果你有cluster index 则一般会扫描主键来替代TABLE SCAN)。
ROUND ONE 分为两个阵营, PG ORACLE 为代表的堆表存储方式,以及 SQL SERVER MYSQL 为阵营的 有序主键的表的存储方式。
PK :堆表显然在大数据量的情况下,占有优势,插入数据的速度会很快,而在顺序读,Range 扫描,有序主键索引表占有优势。
SQL SERVER , MYSQL :我们选择建立有序主键表,对我们的查询尤其是范围查询以及和主键有关的排序查询时非常有利的,哪像你们堆表的存储方式,那都不挨着哪里,查询与主键有关的顺序型的排序查询,你们和我们怎么比。并且我们在数据插入的时候,比你们都少一个I/O操作 呵呵
PG, ORACLE 反击:你们才有毛病呢,要是开发给你们一个 UUID的主键,每行和每行都那不挨着哪,你们要去哪里哭去,HEAP 表天生对分布式存储友好的支持,我们支持超大的数据量,哪像你们一个表就是一个索引,数据量一大,你们无序插入慢不说,数据主键变化的时候还要因为B+ 树原理叶子节点要变动存储位置,你说变态不变态。
反水:SQL SERVER 弱弱的小声说,我也能存HEAP 表,MYSQL 大骂叛徒,存HEAP表你replication 怎么做,真要脸。
Round Two 数据能回滚 undo 功能
有些数据库是没有 UNDO 的设计,例如 PG SQL SERVER ,而这次ORACLE 和MYSQL 站在一个阵营,至少都有 UNDO 这个名字
PK :在MVCC 多版本控制中,对事务可见性,隔离性,以及事务的回滚等等有的数据库是通过UNDO 表空间来完成的,而有些数据库通过其他的设计来完成的。
ORACLE MYSQL 攻击:你说说现在还有数据库根本就么有UNDO 表空间,多奇葩,你说要是事务回滚你可怎么办,扳着手指头往回算呀,可笑。
SQL SERVER PostgreSQL 反击:奇葩年年有,你俩好意思说 ORA-01555,不知道是谁的报错,我们可没有,还有那个主线程还要不断清理undo 表空间的奇葩设计也不知道是哪个脑残设计出来的。SQL SERVER 我可是全部通过LDF 文件来进行事务的回滚的。PostgreSQL 我主要是通过我本身基础设计的好,我每行都有详细的事务及事务执行的详情,并且我还有clog 来进行事务的commit,哪里还需要UNDO 那么奇葩的东西。
反水:PG 反水 SQL SERVER ,你还是别说你那个LDF了,尤其你提交事务中和我们三都不一样的那个默认设置,事务回滚都那么奇葩,你少说点吧, SQL SERVER 反击,就你好,vacuum 就给你一个人准备的,好意思笑我。
画外音:MYSQL 其实我每行也有和事务有关的记录。
Round Three : 存储过程在传统的应用中都是存在的,那存储过程和函数等等在这几个数据库有什么不同。
PK:存储过程方面大部分是在传统的应用程序中应用,而互联网等应用中很少有(其实就是没有)存储过程的存在
SQL SERVER ORACLE : 在存储过程和函数,我们是很有发言权的,各种功能,并且开发可以在数据库上编写大量的存储过程,对于执行的性能,以及程序的灵活性,存储过程,都有很大的用武之地,PLSQL TSQL 等等都有很长的使用的历史,哪像有的数据库 要不就是 什么铁律,军规上明确写着,不能使用存储过程,不能JOIN 超过三次,这么弱鸡,还有那个什么一直拿函数当存储过程的二等残废,最近刚治好病吧
PG MYSQL 反击:就你们好,也不看看现在什么天,互联网的天下,基于分布式的中间件的方式使用,那有什么存储过程,我们的开发都牛逼着呢,我们的逻辑都在程序里面,都那年那月了,存储过程真有脸说。还有说我之前用存储过程和函数都一个命令,但我功能样样都有,碍得着你们,现在新版本也分开了别揪着过去,反过头看看你们一个个存储过程写的,根本没有并发性,调试不好调,找问题不好找,搞得开发就一个个写存储过程的,切,老土
反水:PG 反水,你MYSQL 本身支持的查询方式例如窗口函数,复杂的查询就差劲,少说两句,不知道公司因为你请了不少贵的开发,来应付你,少说点没人不知道那点毛病,另外还有你的那个因为临时表造成的函数问题,到 8 都没解决,没人把你当哑巴。MYSQL 反击 ,你好,你好,写个存储过程想返回值都不行,新版本还建议用 create function ,你说你的create procedure 到底什么鬼,你也闭嘴吧。
ROUND N (混战)....... ---你加个字段还不能加到随意的位置,还天天牛逼的厉害,---你大表加字段,改数据库名,要死了一样,大家都知道,谁说的,8 VERSION 我这毛病都改了,反倒是你 19C 字段还是不能加到任意位置,还有你到12 version 了和那个 19C 一样,字段不能加到任意位置,还通过什么插件骗人,真不要脸。还有在WINDOWS 上装的那个,大家都可以在LINUX 上装,你的就业面真窄,---谁说的,我已经可以在2017 以后就装到 LINUX ,我也支持了LINUX ,---哎真好意思说,你问问大家,谁还关心你装不装到LINUX ,都快把你忘了吧,,---滚,我2019 都支持大数据功能了,---shut up ,我们家堂兄 greenplum 早就是大数据里面的座上宾,谁用你做大数据, 还有你,现在都是分布式了,RAC 不知道要用到那年,一个歌唱家一辈子就唱一首歌,现在大家都 烦你,都倒你, ---是是是,大家都dig我, 说自己分布式的那个 MGR 有几个地方用,不还是MHA 借着别人活的高可用,连个物理复制都没有,---谁说没有的 8 我已经有了物理复制,哎看看他不做声,新版本越做越差,镜像都要没有了,就一个 ALWALYS ON 不知道要吃到哪辈子,还不稳定,---谁说我不稳定了,我还有 replicaiton , ---你就别提你那个 replicaiton , 还双向复制,笑死个人,来来来表里面加个trigger 试试,我这是 物理复制,逻辑复制,逻辑复制输出各种格式任君挑选,我才最好,---是呀,到现在还有人在群里问,到底哪个高可用靠谱的也是你吧 哈哈哈哈, ---呸,说没有自我就是你,越来越和那个 衰鬼 一样一样的不就是你,也不是亲生的,舔着脸住在别人家里,在家一个样(企业版),出门就跟裸奔一样,挡上点露点了(社区版),真是脸大,---我可是有extension 我可以模糊查询走索引,你们谁行,---行行行 就你牛逼,安装麻烦死了,没个水平可装不了你,---你好,之前你安装各种毛病,比我好得到那里去一个安装文件4个多G ,---说的也是那么大的安装文件也没见有什么特异功能,25000百万行的代码有一半都是没用的把,哈哈哈, --你好,原来几十MB就可以安装,现在到我家,你自己看看你自己,也快要突破 1G的安装文件了,还不是学我, ................. ---我不要钱, ---我也不要吧,---假的吧,---你贵死了,---你不好用.....................
(以上文字使用---作为不同角色切换)
愿能博您一笑,瑾祝您有一个愉快的周末 !