一个网站的诞生- 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/

 

 

    

   

转载于:https://www.cnblogs.com/TextEditor/archive/2011/05/29/2061031.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TS引用JS模块

为TypeScript引用的JS写声明文件 写TypeScript声明文件的时候会有三个困惑&#xff0c;一个是声明文件是什么&#xff1f;一个是声明文件怎么写&#xff1f;还有一个是TS依据什么规则找到我们的声明文件或者说模块。 第一个问题&#xff1a;按照我的理解声明文件就是告诉TS编…

angular模块

深入浅析AngularJS中的模块 模块是AngularJS应用程序的一个组成部分&#xff0c;模块可以是一个Controller、Service服务、Filter过滤器、directive指令&#xff0c;这些都属于模块。 大多数的应用程序都有一个函数入口main文件&#xff0c;用它来进行初始化&#xff0c;加载…

对象应该是不可变的

在面向对象的编程中&#xff0c;如果对象的状态在创建后无法修改&#xff0c;则该对象是不可变的 。 在Java中&#xff0c;不可变对象的一个​​很好的例子是String 。 创建完成后&#xff0c;我们将无法修改其状态。 我们可以要求它创建新的字符串&#xff0c;但是它自己的状…

开源GIS---.Net系列

NASA World WindNASA World Wind是使用.NET开发的一个Windows窗体系统&#xff0c;以地球外观看得角度提供全球定位功能&#xff0c;类似于Google Earth。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像&#xff0c;这些图像应用于Blue Marble, Landsat 7, SRTM, MODIS 以及…

TypeScript中怎么用接口(interface)描述类(静态部分与实例部分)

TypeScript是JavaScript的超集 在看TypeScript官方文档的接口一节的时候对于类的静态部分与实例部分产生了疑问&#xff0c;通过努力得到自认为相对合理的解释&#xff0c;写下此文以记所得&#xff0c;如有谬误感谢指正。 文中大部分代码示例来自TypeScript官网 TS中的接口…

Java黑科技之源:JVMTI完全解读

Java生态中有一些非常规的技术&#xff0c;它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。 形象地说&#xff0c;JVMTI是Java虚拟机提供的一整套后门。通过这套后…

npm install --save

1. npm install&#xff1a;本地安装 2. npm install -g&#xff1a;全局安装 我们在使用 npm install 安装模块或插件时&#xff0c;有两种命令把它们写入到 package.json 文件中去&#xff0c;在 package.json 里面体现出的区别就是&#xff0c;使用 --save 安装的插件&…

其他一些单元测试技巧

在我以前的文章中&#xff0c;我展示了有关JavaBeans单元测试的一些技巧。 在此博客文章中&#xff0c;我将提供有关单元测试某些相当常见的Java代码的另外两个技巧&#xff0c;即实用程序类和Log4J日志记录语句 。 测试实用程序类 如果您的实用程序类遵循与我倾向于编写的相同…

常见的CSS布局

各种常见的CSS布局 在工作中会经常用到很多的布局方式&#xff0c;这里总结一下所遇到的布局&#xff0c;会持续更新。 悬挂布局 实现这种布局的方式有很多&#xff0c;这边主要挑两个&#xff0c;如下&#xff1a; 方式一&#xff1a;使用浮动和块级格式化上下文特性 这种…

netflix数据处理2(转)

原始数据&#xff1a;$head -10 mv_0006890.txt6890:1735266,1,2004-04-021008399,1,2004-06-222360117,2,2003-11-081294425,2,2004-03-15439931,4,2004-03-271583311,1,2004-03-112431832,3,2005-02-13620771,2,2004-03-201110906,1,2004-03-04结果数据&#xff1a;user_id m…

jQuery 效果

显示和隐藏 1. show(speed) &#xff1a;speed 可以取&#xff1a;slow/fast/毫秒 1 $("#show").click(function(){2 $("p").show(1000);3 }); 2. hide(speed) &#xff1a; 1 $("#hide").click(function(…

OSCP-Kioptrix2014-2 漏洞利用

pChart 2.1.3 文件包含漏洞 搜索漏洞查看漏洞理由代码:hxxp://localhost/examples/index.php?ActionView&Script%2f..%2f..%2fetc/passwd 之前的8080端口禁止访问,看看apache的配置:http://192.168.1.78/pChart2.1.3/examples/index.php?ActionView&Script%2f..%2f..…

使用Drools跟踪输出

Drools 6包含一个跟踪输出&#xff0c;可以帮助您了解系统中正在发生的事情&#xff0c;事物执行的频率以及多少数据。 这也有助于理解Drools 6现在是基于目标的算法&#xff0c;它使用链接机制链接评估规则。 有关此的更多详细信息&#xff1a; http://www.javacodegeeks.co…

CodeSmith注册机,支持5.2.2和5.2.1版

CodeSmith&#xff0c;不用说了&#xff0c;大名鼎鼎的代码生成工具。最早是免费的&#xff0c;后来收费啦这个注册机是针对目前新的CodeSmith 5.2.2的&#xff0c;支持Professinal和其他版本。使用的方法&#xff1a;安装原版的试用版本&#xff0c;从官方网站下载运行试用版&…

JS中与正则相关的方法

前面有一篇文章大体介绍了一下JS中正则表达式&#xff0c;而使用正则表达式还需要配合JS中的相关方法&#xff0c;分别是String对象和RegExp对象的方法。今天就来具体介绍一下这些方法。 使用这则表达式的方法可以分为两类&#xff0c;一个是String的几个方法&#xff0c;还有…

JS基础:求一组数中的最大最小值,以及所在位置

1 var arr [0, 5, -3, 6, 2, -6, 10];2 //定义一个最大值和一个最小值&#xff0c;把他们的索引值赋值给固定的两个变量3 var maxValue arr[0];4 var minValue arr[0];5 var maxIndex 0;6 var minIndex 0;7 for …

linux epoll,poll,select

epoll函数用法&#xff0c;还有点poll和select 1&#xff0c;LT的epoll是select和poll函数的改进版。 特点是&#xff0c;读完缓冲区后&#xff0c;如果缓冲区还有内容的话&#xff0c;epoll_wait函数还会返回&#xff0c;直到把缓冲区全部读完。 2&#xff0c;ET的epoll&#…

λ和副作用

总览 Java 8添加了诸如lambda和类型推断之类的功能。 这使语言不那么冗长和简洁&#xff0c;但是它带来了更多的副作用&#xff0c;因为您不必对所做的事情那么明确。 Lambda的返回类型很重要 Java 8推断闭包的类型。 一种方法是查看返回类型&#xff08;或是否返回任何内容&a…

sessionStorage和localStorage的用法,不同点和相同点

一&#xff0c;共同点 &#xff08;1)存储时用setItem: localStorage.setItem("key","value");//以“key”为名称存储一个值“value”sessionStorage.setItem("key", "value"); &#xff08;2&#xff09;获取时用getItem: localS…

shell学习笔记1-文件安全与权限

1&#xff0c;创建文件的用户和他所属的组拥有该文件&#xff0c;文件的属主可以设定谁具有读、写、执行该文件的权限&#xff0c;根用户可以改变任何普通用户的设置。 2&#xff0c;一个文件一经创建&#xff0c;就具有三种访问权限&#xff1a;读&#xff08;可以显示该文件的…