首先是文本数据库的特点,主要相对于传统关于数据库的优缺点:
文本数据库的缺点一是并发访问麻烦,无法实现多个程序同时修改数据库里面的不同记录。
文本数据库的缺点二是查询、修改、删除非常麻烦,只能顺序查找,修改、删除需要更新整个文件。
文本数据库的优点显而易见,程序简单,数据库管理方便。
什么情况下才适合使用文本数据库呢?
首先只有对于无需并发访问的数据库,其次数据库不大(比如只有一条记录),或者不需要修改删除数据的数据库才适合使用文本类型。
比如网站的超级管理员,使用文本数据库存放就有优越性,无需任何数据库扩展,检查权限的程序直接获取文本内容即可,性能会比任何数据库都高。
这个表很少修改,而且也不会许多记录,所以适合用文本数据库。
也有很多开源的基于文本数据库的项目,博客啊论坛都有.这时想起以前旧博客上备份过一个php *** 作xml的类,这里重新记一下,也算是另一种文本数据库吧:
<?php
* example 读取数据:
*
* $xml = new xml("dbase.xml",'table')
*
* $data=$xml->xml_fetch_array()
*
* echo "<pre style="font-size:12px">"
*
* print_r($data)
*
class xml
{
var $dbase//数据库,要读取的XML文件
var $dbname//数据库名称,顶层元素,与数据库文件名称一致
var $dbtable//数据表,要取得的节点
var $parser//剖析器
var $vals//属性
var $index//索引
var $dbtable_array//节点数组
var $array//下级节点的数组
var $result//返回的结果
var $querys
function xml($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)
//遍历索引,筛选出要取值的节点 节点名:$dbtable
foreach ($this->index as $key=>$val) {
if ($key == $this->dbtable) {
//取得节点数组
$this->dbtable_array = $val
} else {
continue
}
}
for ($i=0$i <count($this->dbtable_array)$i+=2) {
$offset = $this->dbtable_array[$i] + 1
$len = $this->dbtable_array[$i + 1] - $offset
//array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。
//所取节点下级数组
$value=array_slice($this->vals,$offset,$len)
//取得有效数组,合并为结果数组
$this->array[]=$this->parseEFF($value)
}
return true
}
//将XML文件读入并返回字符串
function ReadXml($file)
{
return file_get_contents($file)
}
//取得有效数组
function parseEFF($effective) {
for ($i=0$i <count($effective)$i++){
$effect[$effective[$i]["tag"]] = $effective[$i]["value"]
}
return $effect
}
//xml_query(方法,条件,多条件时逻辑运算符and or or,插入或更新的数组)
function xml_query($method,$condition,$if='and',$array=array())
{
if(($method=='select')||($method=='count')){
return $this->xml_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数组
function xml_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<$cs$i++){
$conditions[]=array("field"=>$condition[$i*3],
"operator"=>$condition[$i*3+1],"match"=>$condition[$i*3+2])
}
//echo count($row)
for($r=0$r<count($row)$r++){
for($c=0$c<$cs$c++){
//$i++
$condition=$conditions[$c]//当前条件
$field=$condition['field']//字段
$operator=$condition["operator"]//运算符
$match=$condition['match']//匹配
if(($operator=='=')&&($row[$r][$field]==$match)){
$true++//若条件符合,符合数加1
} elseif(($operator=='!=')&&($row[$r][$field]!=$match)){
$true++//若条件符合,符合数加1
} elseif(($operator=='<')&&($row[$r][$field]<$match)){
$true++//若条件符合,符合数加1
} elseif(($operator=='<=')&&($row[$r][$field]<=$match)){
$true++//若条件符合,符合数加1
} elseif(($operator=='>')&&($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 "<pre style="font-size:12pxtext-align:left">"
//print_r($true)
$true=0//符合条件数归零,进入下一轮循环
}
} else {
$result=$this->array
}
//echo "<pre style="font-size:12pxtext-align:left">"
//print_r($this->result)
return $result
}
//筛选或统计
function xml_select($method,$condition,$if)
{
$result=$this->xml_fetch_array($condition,$if)
if($method=='select'){
return $result
} else {
return count($result)
}
}
//插入数据
function xml_insert($condition,$if,$array)
{
$data=$this->xml_fetch_array($condition,$if)//总数据数组
$data[]=$array//插入后的总数据数组
$this->array=$data//更新总数组
$this->WriteXml($data)
}
//得到更新的XML并改写
function xml_update($condition,$if,$array)
{
$datas=$this->array//总数据数组
$subtract=$this->xml_fetch_array($condition,$if)//要更新的数组
//echo "<pre style="font-size:12pxtext-align:left">"
//print_r($data)
//print_r($datas)
//echo "每条记录中有".count($datas[0])."个值<br>"
for($i=0$i<count($datas)$i++){
$data=$datas[$i]
//echo "原始记录中的第".$i."条<br>"
foreach($data as $k=>$v){
//echo "-第".$i."条的".$k."值为".$v."<br>"
//echo "--要查找的数组".$k."值为".$subtract[0][$k]."<br>"
if($v==$subtract[0][$k]){
$is++
}
}
if($is==count($data)){
//echo "----与第".$i."条符合<br>"
$datas[$i]=$array
//array_splice($datas,$i,$i+1)
}
//echo "原始记录中的第".$i."条与要查找的有".$is."匹配<br>"
//echo "原始记录中的第".$i."条结束<br>"
$is=0
}
//array_splice($datas,2,2+1,$array)
//echo "<pre style="font-size:12pxtext-align:left">"
//print_r($datas)
$this->array=$datas
$this->WriteXml($datas)
}
//写入XML文件(全部写入)
function WriteXml($array)
{
if(!is_writeable($this->dbase)){
die("无法写入".$this->dbname.".xml")
}
$xml.="<?xml version="1.0" encoding="utf-8"?>rn"
$xml.="<$this->dbname>rn"
for($i=0$i<count($array)$i++){
$xml.="<$this->dbtable>rn"
foreach($array[$i] as $k=>$s){
$xml.="<$k>$s</$k>rn"
}
$xml.="</$this->dbtable>rn"
}
$xml.="</$this->dbname>"
$fp=@fopen($this->dbase,"w")
flock($fp, LOCK_EX)
rewind($fp)
fputs($fp,$xml)
fclose($fp)
}
//逐行写入xml(我试着写入10000行,感觉没一次写入快,所以没用这种写入方式)
function WriteLine($array)
{
if(!is_writeable($this->dbase)){
die("无法写入".$this->dbname.".xml")
}
$fp=@fopen($this->dbase,"w")
rewind($fp)
flock($fp, LOCK_EX)
fputs($fp,"<?xml version="1.0" encoding="utf-8"?>rn")
fputs($fp,"<$this->dbname>rn")
for($i=0$i<count($array)$i++){
fputs($fp,"<$this->dbtable>rn")
$xml.="<$this->dbtable>rn"
foreach($array[$i] as $k=>$s){
fputs($fp,"<$k>$s</$k>rn")
}
fputs($fp,"</$this->dbtable>rn")
}
fputs($fp,"</$this->dbname>")
fclose($fp)
}
}
?>
再一查,其实这种文本数据库也是很强大的,像txtsql,txtDB API,txtdb等等.
用好了也可以扬长避短.
说回来各有各的好处,也就要学会在合适的地方用上合适的工具.可以研究一下php *** 作文本数据库.
OA系统是一个管理系统,通过OA办公系统实现多人、多部门、跨地域的协同办公模式,使日常许多通过手工完成的事情,被计算机和网络提供的功能所代替。一般中小型企业有几十人,实际的并发数量很少,国企或大一些的公司有几千人,甚至几万人。与OA系统的性能相关的主要因素包括,硬件、网络、并发使用的用户数、OA产品软件(包括数据和应用服务器等系统软件)、系统积累的数据量等。如果系统遇到了性能上的瓶颈,我们可以结合压力测试工具,对相关的因素进行分析。下面我们对影响OA系统性能的因素分别进行阐述:1、硬件
硬件是决定OA系统性能的关键因素之一,主要包括服务器的CPU、内存,磁盘的IO等,如用户并发数增加而内存小了,则会加重CPU和磁盘IO的压力。对与用户数非常多的OA系统,如果单台服务器不能满足性能方面的要求,则可以考虑使用多台服务器,如,数据库和应用服务分别部署在不同的服务器上,甚至数据库和应用服务分别使用多台服务器一组进行集群。
承元OA支持数据库服务器、应用服务器的合并、分离、集群模式的部署,可以使用不同的数据库平台和应用服务器。对于普通的只有几十人小型企业,使用一般的PC机器即可满足要求。
domino 用户多。
Domino的功能强大,界面丰富,主要用于辅助多人协同工作,从而突破平台、技术、组织和地理上的限制,充分实现信息与技术方面的共享。该软件目前在企业级基础通信、办公自动化和信息发布等领域已取得领导地位,在国内企事业单位中得到了广泛应用。
你的Notes帐号不惟一, 必须由管理员将多余的记录删除. 因为在Notes的安装过程中会根据你的ID文件中的信息在Domino目录中查找, 从中获取服务器和邮箱位置, 然后添加到工作区, 但不惟一时无法添加。
文档:
文档包含唯一的ID,以及其他内置的字段,如最终作者、最后修改日期,等等,并且自定义特殊字段。文档可以包含富文本,存储为原生Notes富文本(CD记录格式)或MIME格式。这两种存储类型都可以用来存储格式化文本以及图像。
但是只有Notes富文本格式被表单或页面这样的设计元素所使用。文档还可以包含完整的文件附件。通过API及视图可以查询文档。作为内置的特性,Lotus Domino也支持完整数据库的全文文本检索。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)