sql数据库比domino文本数据库好在哪里
最近的一些想法让我对文本数据库又一次产生了兴趣,一番搜索,果然发现了不少好东西.首先是文本数据库的特点,主要相对于传统关于数据库的优缺点:文本数据库的缺点一是并发访问麻烦,无法实现多个程序同时修改数据库里面的不同记录。文本数据库的缺点二是查询、修改、删除非常麻烦,只能顺序查找,修改、删除需要更新整个文件。文本数据库的优点显而易见,程序简单,数据库管理方便。什么情况下才适合使用文本数据库呢?首先只有对于无需并发访问的数据库,其次数据库不大(比如只有一条记录),或者不需要修改删除数据的数据库才适合使用文本类型。比如网站的超级管理员,使用文本数据库存放就有优越性,无需任何数据库扩展,检查权限的程序直接获取文本内容即可,性能会比任何数据库都高。这个表很少修改,而且也不会许多记录,所以适合用文本数据库。也有很多开源的基于文本数据库的项目,博客啊论坛都有.这时想起以前旧博客上备份过一个php操作xml的类,这里重新记一下,也算是另一种文本数据库吧:xml_fetch_array();**echo"";**print_r($data);*classxml{var$dbase;//数据库,要读取的XML文件var$dbname;//数据库名称,顶层元素,与数据库文件名称一致var$dbtable;//数据表,要取得的节点var$parser;//剖析器var$vals;//属性var$index;//索引var$dbtable_array;//节点数组var$array;//下级节点的数组var$result;//返回的结果var$querys;functionxml($dbase,$dbtable){$this->dbase=$dbase;$this->dbname=substr($dbase,strrpos($dbase,"/")1,-4);$this->dbtable=$dbtable;$data=$this->ReadXml($this->dbase);if(!$data){die("无法读取$this->dbname.xml");}$this->parser=xml_parser_create();xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,0);xml_parser_set_option($this->parser,XML_OPTION_SKIP_WHITE,1);xml_parse_into_struct($this->parser,$data,$this->vals,$this->index);xml_parser_free($this->parser);//遍历索引,筛选出要取值的节点节点名:$dbtableforeach($this->indexas$key=>$val){if($key==$this->dbtable){//取得节点数组$this->dbtable_array=$val;}else{continue;}}for($i=0;$idbtable_array);$i=2){$offset=$this->dbtable_array[$i]1;$len=$this->dbtable_array[$i1]-$offset;//array_slice()返回根据offset和length参数所指定的array数组中的一段序列。//所取节点下级数组$value=array_slice($this->vals,$offset,$len);//取得有效数组,合并为结果数组$this->array[]=$this->parseEFF($value);}returntrue;}//将XML文件读入并返回字符串functionReadXml($file){returnfile_get_contents($file);}//取得有效数组functionparseEFF($effective){for($i=0;$ixml_select($method,$condition,$if);}elseif($method=='insert'){return$this->xml_insert($condition,$if,$array);}elseif($method=='update'){return$this->xml_update($condition,$if,$array);}}//取得xml数组functionxml_fetch_array($condition,$if){//$this->querys;$row=$this->array;//初始化数据数组if($condition){//是否有条件,如有条件则生成符合条件的数组//生成条件数组,条件格式field,operator,match$condition=explode(",",$condition);//条件数组$cs=count($condition)/3;//条件数for($i=0;$i$condition[$i*3],"operator"=>$condition[$i*31],"match"=>$condition[$i*32]);}//echocount($row);for($r=0;$r')&&($row[$r][$field]>$match)){$true;//若条件符合,符合数加1}elseif(($operator=='>')&&($row[$r][$field]>=$match)){$true;//若条件符合,符合数加1}}//根据条件取值if($if=='and'){//如果多条件为and,当符合数等于条件数时,生成数组if($true==$cs){$result[]=$row[$r];}}else{//如果多条件为or,当有符合纪录时,生成数组if($true!=0){$result[]=$row[$r];}}//echo$true;//echo"";//print_r($true);$true=0;//符合条件数归零,进入下一轮循环}}else{$result=$this->array;}//echo"";//print_r($this->result);return$result;}//筛选或统计functionxml_select($method,$condition,$if){$result=$this->xml_fetch_array($condition,$if);if($method=='select'){return$result;}else{returncount($result);}}//插入数据functionxml_insert($condition,$if,$array){$data=$this->xml_fetch_array($condition,$if);//总数据数组$data[]=$array;//插入后的总数据数组$this->array=$data;//更新总数组$this->WriteXml($data);}//得到更新的XML并改写functionxml_update($condition,$if,$array){$datas=$this->array;//总数据数组$subtract=$this->xml_fetch_array($condition,$if);//要更新的数组//echo"";//print_r($data);//print_r($datas);//echo"每条记录中有".count($datas[0])."个值";for($i=0;$i$v){//echo"-第".$i."条的".$k."值为".$v."";//echo"--要查找的数组".$k."值为".$subtract[0][$k]."";if($v==$subtract[0][$k]){$is;}}if($is==count($data)){//echo"----与第".$i."条符合";$datas[$i]=$array;//array_splice($datas,$i,$i1);}//echo"原始记录中的第".$i."条与要查找的有".$is."匹配";//echo"原始记录中的第".$i."条结束";$is=0;}//array_splice($datas,2,21,$array);//echo"";//print_r($datas);$this->array=$datas;$this->WriteXml($datas);}//写入XML文件(全部写入)functionWriteXml($array){if(!is_writeable($this->dbase)){die("无法写入".$this->dbname.".xml");}$xml.="rn";$xml.="dbname>rn";for($i=0;$idbtable>rn";foreach($array[$i]as$k=>$s){$xml.="$srn";}$xml.="dbtable>rn";}$xml.="dbname>";$fp=@fopen($this->dbase,"w");flock($fp,LOCK_EX);rewind($fp);fputs($fp,$xml);fclose($fp);}//逐行写入xml(我试着写入10000行,感觉没一次写入快,所以没用这种写入方式)functionWriteLine($array){if(!is_writeable($this->dbase)){die("无法写入".$this->dbname.".xml");}$fp=@fopen($this->dbase,"w");rewind($fp);flock($fp,LOCK_EX);fputs($fp,"rn");fputs($fp,"dbname>rn");for($i=0;$idbtable>rn");$xml.="dbtable>rn";foreach($array[$i]as$k=>$s){fputs($fp,"$srn");}fputs($fp,"dbtable>rn");}fputs($fp,"dbname>");fclose($fp);}}?>再一查,其实这种文本数据库也是很强大的,像txtsql,txtDBAPI,txtdb等等.用好了也可以扬长避短.说回来各有各的好处,也就要学会在合适的地方用上合适的工具.可以研究一下php操作文本数据库.