多事情,可以写blog的东西很多很多,不过由于自己过于繁忙,没时间写东西,而且公司
政策限制,我所做的东西不可以写到这里来,有点遗憾。现在我已经离开了Teradata,加入
了上海方正数字出版技术有限公司作为XML数据库项目技术负责人,带领团队从事XML数
据库开发。下面我就大概地总结一下我这一年的工作,并且展望一下未来。
对于在TeraData的工作,由于不能精确地描述,我就模棱两可地描述一下吧。这一年多在
Teradata我做的事情让我有机会把我对BerkeleyDB的理解以及数据库存储引擎的通用理论
的理解完整地应用来开发一个存储引擎,虽然不是从零开始开发,但是期间从别人的成熟代
码中收获甚多,而我们对那些代码也进行了大刀阔斧的改进,也增加了不少新功能,使得它
更加强大和灵活。在这个过程中我对存储引擎的理解更加透彻,同时还拓展了知识面,开始
接触和理解MPP(Massive Parallel Processing)方面的理论和技术,要知道Teradata在这方面是
全球领先的,我们开发的存储引擎就是为MPP架构的系统而特别设计的。
在这个过程中我完成了很多很cool的新功能开发,包括非常高效的bulk load功能,其性能
可以达到磁盘写速度的80%;以及位图索引和位图列存储等,位图索引对于等值查找非常高
效,时空效率都很高;而位图列存储也继承了这些优点。这些都是原来的代码中没有的功
能。另外我们还实现了更加灵活的事务处理,也就是同一个事务可以被拆分为多个操作的序
列,其中每个操作都可以被运行存储引擎的任意线程执行,这是一个非常强大的功能,除
了Teradata的数据库服务器外,拥有这种功能的DBMS并不多。传统的数据库(包括 oracle,
sql server, postgresql, mysql等,以及BerkeleyDB)都没有这种灵活性,它们都是必须在同一
个线程或者进程当中执行一个完整的事务。
在MPP架构下,由于一个事务需要被多个存储节点去执行,事务的操作从查询处理节点分
发到存储节点去执行,如果为每个事物在每个节点上面预留线程直到这个全局事务执行完毕
的话,是非常耗费资源的,必须使用灵活的任务处理架构----线程池+任务队列,线程每次
拿到一个任务,即某个事物的一个操作后,就去执行,然后等待下一个任务,这些操作可以
属于任何一个有效的事务。
现在MPP架构的OLAP数据库系统是一个快速成长的行业,在2010年这个行业发生了很多
大的整合和发展,首先是Teradata公司的市值快速上升,在市场领域表现强劲;同时,其他
大公司也开始涉足这个领域,比如IBM收购了 Neteazza, SAP收购了 Sybase, EMC收购了
Greenplum, 而Teradata收购了Asterdata,这四家被收购的公司都是MPP领域的新公司,具
有很大的发展潜力。MPP快速发展的根本原因是数据量的爆炸性增长,而这又很大程度上
是伴随着网络时代的新发展,个人手机上网带来的巨大的数据量;从技术角度来说,
Greenplum和Asterdata公司的主打产品(以及前面没有提到的ENterpriseDB公司的Gridsql)
都是基于Postgresql的。Postgresql在经历了二十多年不温不火的发展后,终于被世人所接
受,自身也取得了进一步发展的机会。Postgresql能够胜过mysql被上述公司采用,除了采
用BSD license外,另外一个很重要的原因是:postgresql是更加擅长于读多写少的应用的,
而上述公司的产品都是面向OLAP市场的分析型MPP数据库系统,其应用特征天然的具有
读多写少的特征。另一个巧合的地方是,上述公司使用postgresql的方式也是惊人的一致---
直接拿来postgresql不加修改地作为存储节点,因而数据查询节点最终产生的执行计划必须
是SQL语句,而不是像普通关系数据库那样产生高效的查询执行计划,这样就重复地执行
了很多SQL查询解析和优化,不过在大规模的数据存取和计算中,这样的开销可以忽略。
所以我相信,MPP架构的OLAP数据库系统会是未来数据库发展的一个新方向,而postgresql
也非常值得大家好好研究学习。
虽然有这些机遇,但是我由于某些原因决定离开Teradata,加入上海方正数字出版公司,作
为公司的数据库部门的技术负责人和架构师,从事大规模XML数据库系统的开发。
上海方正是方正集团与上海市政府共同成立的,隶属方正集团,它的主要目标之一就是开发
大规模XML数据库系统,这是国家新闻出版总署投资的项目。这对我来说是一个机遇。说
它是机遇是因为这样一个XML数据库产品在方正所擅长的新闻出版行业以及其他相关行业
有广阔的应用前景,市场空间很大,公司的发展潜力自然也很大;当然我也知道前面的道
路会很坎坷,想把一个产品从无到有做出来,并且做到具有优良的性能,并不容易。但是我
相信以我和项目组内其他几位骨干成员的技术积累为基础,再加上项目组全体成员的共同
努力,我们是有能力完成这个任务的。目前我们的项目组已经开始了第一阶段的开发,各方
面运行步入正轨。后文中关于这方面的经验体会我会写文章出来和大家分享。