• 一个网站的诞生 MagicDict开发总结2 [ACCESS的烦恼]


        说到数据库,有很多很多选择,除了MS-SQL,Oracle,SQLite,MySql,这些大家都非常熟悉的同学,还有DB2,IMSDB(灰常灰常古老的数据库,用在OS390等Mainframe中,层次型数据结构,不做大型机的同学们可能不知道)。不过,大部分个人网站的首选还是Access,理由很简单,ASPNET的空间,它是免费使用的。

         天下没有白吃的午饭,ACCESS对于小型数据库来说,完全没有什么问题,不过,如果数据库非常庞大的话,呵呵,可能让你整天提心吊胆了。(特别是对于入门级的网络空间来说,简直就是灾难)

         好了,来说说我的故事吧。我和ACCESS,不得不说的故事。

        使用数据库,第一件事情,就是数据库的设计,不过,具体设计不在这篇文章里面介绍了。[数据库的设计,其实是非常令人纠结的事情,特别是ACCESS这种弱小的东西,考虑到空间服务商1%CPU使用率的规定,有的时候要努力的优化,不然,访问很慢很慢很慢]。第二件事情就是使用数据库。

       使用数据库,都是从建立DBConnection开始的。如何建立DBConnection,无非是通过一个数据库连接字符串New出一个数据库连接实例。数据库连接字符串放在什么地方,我很负责任的说,有N种地方可以放这个东西。最最简单的,直接写死在数据库访问类里面:

    OleDbConnection rtnConnection = new OleDbConnection();
    rtnConnection 
    = new OleDbConnection("大家好,我是数据库连接字符串");

    当然,同学们在各种模式设计和IOC的洗脑下,都知道要把这个写在配置里面了。其实在小的项目,这个真的没有什么实际的意义。为了Install B,为了展示我也是学习过高手的代码的,我也这样写了。[大型项目,非常有必要这么做,通过配置文件来修改数据库,不是通过改写代码来修改数据库]

    1。先把字符串写在配置文件里面,

      <appSettings>
        
    <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

            OleDbConnection rtnConnection = new 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/

        

       

  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2061031.html
Copyright © 2020-2023  润新知