问一个关于网页数据库连接的问题
大家好,我刚开始学做网页,有一个问题不明白了。
我在自己尝试做一个新闻系统,我想知道在新闻首页显示新闻的时候,不同类别板块(比如国际、国内新闻,社会、教育等等)显示的列表是否都要分别连接一次数据库。
比如我有100个分类,我是连接100次数据库来得到?还是1次连接取出所有需要的数据再分类?如果1次读取了这么才能在表现层分类呢。
这样会不会对数据库性能有很大影响,是否有办法一次连接在显示的时候按类别显示
,一般网站怎么处理这个问题。
我在一本英文的asp.net电子书上看到作者说“数据库连接就像炸弹,迫不得已才拿起来,然后赶紧关闭丢出去”,虽然夸张了一点,但是我觉得很有意思。
------解决方案--------------------搞个数据连接模块
------解决方案--------------------首先,做新闻系统最好的办法是实时生成静态网页,这样就没有数据库大规模连接的问题
其次,按楼主的想法,是在页面中连接数据库来显示数据.我建议1次连接取出所有需要的数据再分类,把这种分类筛选工作交给业务层去处理
------解决方案--------------------以dataset为例
在存储过程中一次返回多个结果集就行(用多个select分类)
在Dataset里就 是:dataset.table[0],dataset.table[1].....
------解决方案--------------------做多个实体类实现.效率会好一些.
------解决方案--------------------主要看你的数据表的设计以及实际网页的情况;如果你的分类达到100个了,那最好就是静态的网页!
不然的话一次拿出来也可以,分几次拿出来也可以;毕竟ds也是会消耗不少资源的
------解决方案--------------------首先回答你第一个问题:最好将所有新闻都放在同一个数据库中,加上分类字段以区别各类。使用的时候只要连接一个数据库,然后用sql语句挑选需要的类别(毕竟你显示在新闻首页的数据量不会很大)。至于怎么才能在表现层分类,那无非就是select * where *......等等。
第二个问题,不用担心频繁连接的问题,对.net程序而言,默认为允许连接池,当然也可以在SQLConnection对象的连接字符串中加入 "Pooling = true "确保程序允许连接池的使用。
也许你还不明白什么是连接池,数据库的连接池允许程序从中获得一个连接并使用这个连接,而不需要为每一个连接请求重新创建数据库连接。当应用程序使用完连接后,改连接被归还给连接池而不是直接释放。这样性能就大大提高了。
这里必须强调一点,连接对象使用完毕后应当调用Close或Dispose方法将其显示的关闭并返回给连接池,而不是依靠垃圾收集器来释放连接。
呵呵,写的累死了,我的CSDN第一帖就献给你了。