数据库的偏见—总论

来源:互联网 发布:班服设计软件下载 编辑:程序博客网 时间:2024/04/29 13:15

      实际代码工作掐指一算一个地支轮回了,这十二年间对数据库的使用可谓是三心二意。基本上paradox、access、SQL server、PostgreSQL、MySQL、DB2甚至SQLite、fastDB、mongoDB都接触了一番,但总体说来DB2用的时间最长,而且是在不摸数据库好长时间后才又提起来使用的,当然使用的方式也可谓是最为不同。其它数据库只是扮演着打酱油的角色。对于一个喜欢并习惯于思辨的人来说,虽然接触到的数据库产品过于五花八门,且研究的也并不非常深刻,但还是不妨碍对这么多年来数据库使用的思考,无非就是角度不同罢了。

       青涩的大表时代,这是一个美好的时代,记忆中最清楚的是大二暑假,神使鬼差的找到了一份编写程序的活儿,要说起来,小地方总是有着这样或者那样的不方便,但是最大的好处就是容易当孙山,想想矬子里面选将军,只要表现的稍微有点不同,就很容易被围观。很显然我被围观了。而我也凭着一身浑蛋设计了一张有一张的大表,那是一家家具耗材公司,当我那个初中专同行看到我设计的门、窗、围栏等一张张大表时,我估计惊讶的下巴都能掉下来,可是他显然没办法,我的设计虽然没水准,可是不懂技术的老板能看懂,还为能参加到我的设计中而喜欢不得。最搞笑的是统计当月的营业额时,我是专门设计了一个界面的,把十几个BED的RecordTable(那时候用的是DELPHI)扔到一个data model(用来统一配置数据库的链接信息)里面,好在RecordTable这个组件很人性好像有个sum功能,不然估计当时我还真会遍历计算然后给出答案。

       过了暑假,大三开专业课,有数据库原理。那时候不知道学校抽什么疯,给弄了一本纯英文的《the first curse of database》。不过好在这本书是以fox公司为例子娓娓道来的,为了坑爹的英语四级,竟然把这本书从头到尾看了好几遍,基本每页都有汉语注释,四级竟然还是没过。副作用就是大表的美好时代离我越来越远。寒假,有老师问我能不能晚回家几天,帮他一个朋友搞一个律师管理系统应付检查,谁让咱会用DELPHI呢,能开发windows程序啊,一口答应。

        这次的数据库设计可为是把关系这一时髦的理念应用了再应用,人、原告、被告、案件等等能想起来的都干成表,唯一副作用就是本来打算一个周完工的,没想到是整整一个寒假,春节就在家里呆了三天就又回学校了。这种情况下paradox显然没法完成工作啊(paradox一个表一个文件,还有索引文件神马的)。好在access不负众望,DELPHI对ODBC的支持也算到位。春节前一个版本,春节后一个版本。那可真是jion乱飞啊。也不知道后来检查又没有通过,反正是虚荣心得到了极大的满足,甚至放言没有数据库的程序就不是程序,知道若干年后遇到一个和我一样的刺头反问了一句,不叫程序叫啥,我才洗心革面。

        后来听说有一个大师叫李维,就开始看他的书,那看的是一个酣畅淋漓啊。关于技术的书买的不多,因为更新太快,总感觉还是一次性消费好,可是破例的是他的书我买了一本《Inside VCL》,没想到的是这本书宣告了我跟DELPHI的永别,就好像上一本书《boost导论》让我跟c++诀别了一样。这大概是物有本末,时有终始吧。搞笑的是论源码分析,他的源码分析对我影响远没有侯杰的MFC和STL对我影响大。因为一直没有从事过WEB系统的开发工作,对数据得持久化和分层工作则是直接从《新视通》项目中的配置系统开发总结中开始的,虽然在这之前也读了不少关于多层开发的书籍,可是感触真是不深。

        《新视通》是一个很有意思的项目,一个视频会议项目。当时我是打死也没想到这玩意儿也能赚钱,因为功能很简单,就是给电视盒子里面写代码,然后通过盒子来控制摄像头,麦克风,通过视频输出接口在电视上显示出对方的是音视频来和对方开启视频会议。更没想到的是这个系统竟然是对我软件开发思想撞击最激烈的一个项目,让我真正的思考了诸如什么样划分才算是分层、设计出怎样的接口才算是上下层不感知,其实这很大一部分工作应该感谢的是魏永明先生的miniGUI忠实的复制了windows下的GUI接口和无私的开源精神,让当时的我深信不疑windows GUI就是这么开发出来的;另一个感谢的是MFC6.0的简洁和不使用任何c++的奇技淫巧便于我们抽丝剥茧,边注释边剪裁再加上侯杰的宝书,让我感觉到了英雄的用武之地;还有一个神奇的美工,竟然能如此不厌其烦的在程序和产品的再四啰嗦下弄出flash演示原型,使得我比乔布斯更早的看到了创意的牛逼,其他无非贴图;更为强大的测试则把我们提供的各种后门组合使用到了极致,让我明白有时候用户给你的惊喜是你永远都想不到的,可控和不可控之间的界限有时候是异常的模糊。当然这一切的努力使得我们的系统可以横跨windows、vxworks、linux等操作系统。但是最让我感到收获最大的还是这期间分层的原则和目的。这些虽然和数据库没啥关系,但是一个重要的念头开始了萌芽,以至于到现在还深深的影响着我的观念,那就是对象不死,任何数据的持久化只是为了对象的再次复活提供一个重现构建的素材。

         之后陆续接触了一些诸如fastDB、Sqllite、BerkeleyDB等小微型数据库、不为别的,只为等待对象的重生。期间有一次,把好几个G的数据文件想当然的导入mySQL时,导致了mySQL的直接崩溃,DBA火急火燎的找到我问我当时做啥操作了,几年来都不曾崩溃的DB系统让我给搞爆了,真是狼狈不堪。postgreSQL是我自己在捣鼓东西的时候,为了集中式管理的方便二搞得,不过他那套宣称高大上的面向对象的特征确实一点都没用。因为SOCI这个访问库在一定程度上支持OR映射,当然前提表的设计不能完全遵守sql的设计范式,得有意无意的像对象靠拢,或者用视图来模拟。

         后来直接接触的就是db2这种高大上的货。各种难用,不过还好的是按照他的手册,亦步亦趋的使用也没有捅什么娄子,大家遇到的坑我都没遇到过,这大概是因为我的sql语句都是入门级别的不至于让db2很是为难,最为光火的其实还是嵌入式c访问数据库,每次数据库表有屁大的一个更改我的程序都得重新编译一遍让我很是不爽,更是不爽的是有些系统数据库表的字段还需要进行二次解码。计划赶不上变化看来是永恒的存在。

         在自己主导的项目中,因为都是边缘项目,当然可以恣意妄为,引入的mongoDB终于让我爽了一把,以至于后来我都想把db2改造成一个类文档数据库使用,可惜只有一半机会,在一个内部管理系统如此使用,在对外系统早早的就毙于无形之中。

0 0