一个网站的诞生- MagicDict开发总结2 [ACCESS的烦恼]
说到数据库,有很多很多选择,除了MS-SQL,Oracle,SQLite,MySql,这些大家都非常熟悉的同学,还有DB2,IMSDB(灰常灰常古老的数据库,用在OS390等Mainframe中,层次型数据结构,不做大型机的同学们可能不知道)。不过,大部分个人网站的首选还是Access,理由很简单,ASPNET的空间,它是免费使用的。
天下没有白吃的午饭,ACCESS对于小型数据库来说,完全没有什么问题,不过,如果数据库非常庞大的话,呵呵,可能让你整天提心吊胆了。(特别是对于入门级的网络空间来说,简直就是灾难)
好了,来说说我的故事吧。我和ACCESS,不得不说的故事。
使用数据库,第一件事情,就是数据库的设计,不过,具体设计不在这篇文章里面介绍了。[数据库的设计,其实是非常令人纠结的事情,特别是ACCESS这种弱小的东西,考虑到空间服务商1%CPU使用率的规定,有的时候要努力的优化,不然,访问很慢很慢很慢]。第二件事情就是使用数据库。
使用数据库,都是从建立DBConnection开始的。如何建立DBConnection,无非是通过一个数据库连接字符串New出一个数据库连接实例。数据库连接字符串放在什么地方,我很负责任的说,有N种地方可以放这个东西。最最简单的,直接写死在数据库访问类里面:
rtnConnection = new OleDbConnection("大家好,我是数据库连接字符串");
当然,同学们在各种模式设计和IOC的洗脑下,都知道要把这个写在配置里面了。其实在小的项目,这个真的没有什么实际的意义。为了Install B,为了展示我也是学习过高手的代码的,我也这样写了。[大型项目,非常有必要这么做,通过配置文件来修改数据库,不是通过改写代码来修改数据库]
1。先把字符串写在配置文件里面,
<add key="strconForJpDic" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=@urlbase\Kuww_Net_System\Access\TJJTDS.mdb;Persist Security Info=True"/>
</appSettings>
2。通过配置管理器ConfigurationManager获得配置文件里面的字符串内容,然后实例化OleDbConnection
rtnConnection = new OleDbConnection(ConfigurationManager.AppSettings["strconForMagicDict"].Replace("@urlbase", UrlBase));
3。接下来就是打开数据库连接。
这里有一个问题,我一直不是很明白。数据库连接并不是要显式Open才能使用。有时候不写Open,Close也可以使用。
一说,数据库组件会自动打开,一说,有数据库连接缓存池,这个问题我始终不知道为什么。
另外,如果数据库一直开着,不知道是不是有什么问题。
数据库连接开开关关,是不是会有性能问题呢?高手有人知道吗?
下面是这个故事的重点了:
数据库的话,原来我只做了一个Access文件,这里面有查询要用的一些表格,这些表格是单纯Selete的。
同时为了记录下没有查询到结果的词语,这里还有一个用于数据记录INSERT的表格。
这个数据库的大小为13M,应该不是很大的数据库。放在网络上测试一下,第一次,不错,速度很快,第二次,也可以,不过,到了第N次后,网站整体速度就不行了。为什么速度会不行呢,如何解决这个问题呢?为了提高网站速度,我使用了很多方法,这个将在以后的文章里面介绍。最后发现,数据库不给力,是最大的凶手。怎么办?怎么办?“花钱买SQL空间可能会提高速度”,空间服务商的同学给出了一个很好[很标准]的答案,当然,也是促销的方法。我心里也明白,这个方法一劳永逸了,不过,我喜欢在苛刻环境中,压榨系统的最后一滴油。。。。(不是图省钱,和CPU超频的朋友一样,能够压榨系统,也是一种乐趣)。
数据库的问题,可能是因为数据库的占用空间太大了,在数据库无法压缩的情况下面,有什么好办法吗?把一个数据库拆成2个试试看吧。这个方法的根据是,一次操作针对一个大数据库可能会很慢,化整为零可能会好一点。在1个时间单位里面处理1个大数据库,可能会对CPU造成瞬间的大的负荷,如果把处理分在2个时间单位里面,CPU使用会相对平缓,在查询时间不是很苛刻的时候,这个会很管用。同时,把检索的表和插入的表格分在不同数据库里面,这样,需要读的文件大小不变,需要写的文件就变得小了很多,IO的负担也降下来了。
把数据库一分为二后,上线,测试一下,OK,世界重新变得美好了。。。。
[后来继续试验发现,两个数据库,只读和读写分开来是关键,单个数据库大小并不是很重要。现在13M的数据库被分割为11M只读和2M读写,并没有平均分割,保证读写的那个足够小,才是王道。有大虾能够解释一下理由吗?]
总结一下:
1。数据库会拖累网站速度
2。数据库只读和读写表格,在使用ACCESS的时候,最好能分开来,保证每次写文件使用的IO尽量少。
另外,觉得一个人做网站太苦了,有人愿意加入网站开发吗?日语单词检索网站,ASPNET开发的。
有兴趣的写信给我 root#magicdict.com [convert # to @ ]
或者加MSN mynightelfplayer@hotmail.com
网站地址 http://www.magicdict.com/