- 论坛徽章:
- 0
|
Zvchat原本是用txt文件做为存储介质的.当年用的**免费空间,根本没有提供mysql数据库的可能.所以就自己写了一套基于txt的驱动.
这个驱动是存在着问题的.虽然一度度进行完善,但是它还是在一定程度上有着极限.
我们试想一下在txt下存储结构
单文件方式存储,多文件存储.
先来说说单文件存储.
单文件存储是在一个单文件中存储一个表的内容.一个表就是一个单文件.
我使用的方法如下:
假如一列表:
Id(用户名) + content(用户发言的内容) + time (时间戳记)
这是表头.
我们怎么样把它存进单文件存储结构当中去呢?
首先.定义一个间隔符,把每个列数据分隔开.再定义一个不同的间符,把每一行的数据分开.这样一行一行写下去.具体操作过程就不讲了.
完整的存储例子可能是这样的.
Data_msgs .txt
大王|+|你们好吗|+|2008/08/20|_|
小刘|+|说什么话呢?|+|2008/08/22|_|
这样的存储的问题在于:当表要存储的内容过多的时候,数据的检索,更新,删除就变的不可维护.会很慢.
重要的一点是,php有执行时间的限制,还有使用内存的限制.
所以最后会造成堵塞.不能正常的存,取,改,删数据.
多文件存储.
多文件存储,是按目录为表名,每行记录为一个单文件.一个又一个单文件构成了表的结构.
还是跟上面差不多.只是变成这样了.
Txt
大王|+|你们好吗|+|2008/08/20|_|
Txt
小刘|+|说什么话呢?|+|2008/08/22|_|
这种存储结构要优于单文件存储,性能上也要优于单文件存储.如果一定要用txt存储.那就使用这种吧.
存,取,改,都没有太大问题.删的话,单文件存储的方式是遍历文件内容来进行操作.多文件存储是遍历文件名来进行操作.不要哪条记录,删掉文件名就好.然后对文件名进行整理.
如果存储的东西过多,那么这个最后的效率,都会降下来.
用文本存储的最要命的地方在哪里?
你要自己写出数据的存取改删的过程.
如果你不是很精于此,象我一样.那么,很遗憾,你的程序,效率也不会高到哪里去.
PHP不是C++ ,所以,你没办法象其它语言一样,开发出有效的存储结构来.
文件型存储,有acess的MDB.还有sqlite.如果不是到很需要的情况下,不建议使用文本存储.
PHP自身有限制,它能使用有限的内存,在规定的执行时间内,对不超过限制大小的文件进行处理,这个过程要比用C++写就的程序要慢.同样的执行流程,肯定要慢很多.
再来说说数据库.市面上所有的数据库,多数是基于C语言来开发的.
不用我多说.它们的存储结构,和效率,都是经过时间检验的,安全性上也不知道要高过多少.
下面说正题.聊天室程序存储的开发思路.基于数据库存储.
一个百人左右的聊天室.一秒钟之内,可能有好几十条信息抛向服务器.我们的前台程序负责接收这些信息.然后检查身体,看是不是生病了,带毒.有没有攻击性.如果有,结他和谐了.然后迅速抛向数据存储接口.数据存储接口就通过管道把它交给数据库来进行储存.
这个过程必须要快.
那读取呢?我们的聊天室里边.这个界面是每隔一段很小的时间就把面面进行刷新的.以显示最新加入的信息.(聊天的内容).
我们可以用一个计数器的形式来进行刷新.
当提交的聊天记录大于十条,或者是过了五秒钟之后.进行聊天记录的缓存更新.
把所有提交的聊天记录,都给它取出来,灌入缓存文件.
客户端的请求么,就直接指向这个缓存页面.不要直接来读数据库.不然会增加额外的负担.
我们对数据库进行操作,只发生在提交新的信息给数据库.我们附加一些条件,当达到一定条件时,再执行相应的操作.
比如:当达到100条信息,就开始进行替换,从最旧的信息开始,一条条的往下替换.这样最多数据表里只存在着100条信息,聊天室.不能一直存信息下去.这些信息,会撑爆你的硬盘的.
所以采用循环更新的方式是比较理想的.
这样,基本就解决了聊天室数据存储的问题.
主要理念就是存储要快.不能让一个信息丢掉了.不然人家就会很郁闷,怎么看不到我说的话啊.这是聊天室程序首先要解决的问题.Txt文本的存储方式,经常碰到丢包的现象.我想数据库的存储肯定要好一些.
显示聊天记录时,不必要直接读取数据库.因为这样会带来额外的负担.我们可以设定一个时间:三秒或五秒钟的间隔,或当提交了超过十条的聊天信息,我们再在提交信息之后,把缓存文件更新一下.
Over.收尾了.这是存储这一块.以后的存储,采用什么样的方式,来改进效率,到时再想想.
此路我开,此树我栽,要从此过,留下财来,但若不从,管杀不埋. |
评分
-
查看全部评分
|