准确来讲我们今天要说的这个问题并不仅仅是针对初学者的。不过初学者进来肯定要问:什么是MDAC?要回答这个问题,大家就要先回答我一个问题:请问大家才以在用什么数据库?要说现在的数据库因为各种大数据的需求,可以说是空前的繁荣,传统的oracle、sqlserver这些就不说了,连mysql现在都算前辈了,很多数据库不要说用过,我甚至闻所未闻,而它们实际上在业界已经使用很广泛了。比如什么mongodb、各种众多的nosql等都是正当道啊。但要问到另一个领域的数据库就很尴尬:本地数据库应该用什么啊?什么是本地数据库,初学者们要说了。
考虑这样的应用场景,比如我们要写一个浏览器或者email客户端,数据应该保存在哪里?一般情况下写文件,需要查询或者需要调整缓冲的时候普通文件系统肯定是不够用的了。这时候就要用到本地的数据库了(总不能每个软件都配个mysql吧)。其实现在的浏览器一般都是使用一个大家比较熟悉的数据库来做本地数据库来使用的,那就是sqlite。但sqlite有个问题,就是线程锁很糟糕。还有个更糟糕的问题,那就是二十年前,还没有sqlite......那么,那会我们老程序员们都用的是什么呢?dbase、fbase、dbf......其实蛮多的,特别是dbf,至今仍是股票交易中常用的数据库文件。在我们使用delphi的历史中还有非常众多的delphi语言实现的数据库引擎。但这些引擎都有一个致命的弱点,都会在某种特别的操作下导致数据库文件损坏,从而让软件无法使用。在这种情况下有一个数据库脱颖而出了,那就是微软的mdac,一般情况下就是曾经也非常著名Access数据库了。因为第三方使用access的时候通常要安装mdac所以两者对于一般的程序来说可以认为是同一个。mdac的安装程序有好几个m,在那个时候还是相当大的,但从windows后操作系统自带了mdac数据库驱动,事实上就相当于我们的程序都可以直接使用access数据库了而无需再带上mdac安装程序,微软这一措施基本上就让当时的本地数据库市场统一为了access。
曾经的access是相当的好用要说微软的开发功力真不是一般的软件公司可以相比的,在我近二十年的程序开发生涯中从未遇到过access文件损坏导致数据库无法使用的问题!这真的是了不起的。后来sqlite出现了,我们老家伙们也开始使用sqlite,因为access的sql语句是非常的不规范,如果用其他的数据库久了再回来维护access的sql语句会非常的不舒服。而sqlite最成功的一点就是其sql语句兼容性非常的好(好到容易引起混乱的地步,真的,我不是开玩笑)。但因为access的并发性比sqlite好太多,所以在某些对性能要求比较高的地方我还是一直都使用的access--很多那个年代就一路维护过来的软件也是如此。
但是,最近在windows10下维护老程序的经历让我感觉到是时候和mdac/access说再见了。我在一天之内就在win10中用坏了access文件好几次,超过了前二十年的总和。这也许是因为微软已经不再重视mdac的引擎了,所以在win10中没有太认真的去测试它的兼容性。所以在这里我要跟大家说,真的是时候和mdac引擎说再见了。让我们换个本地数据库引擎吧,如果觉得sqlite太慢,可以试试现在红得发紫的leveldb--这可是google开源的数据库,不会比微软的差--可惜的是不直接支持sql语句。