sql数据库比domino文本数据库好在哪里

sql数据库比domino文本数据库好在哪里,第1张

最近的一些想法让我对文本数据库又一次产生了兴趣,一番搜索,果然发现了不少好东西.

首先是文本数据库的特点,主要相对于传统关于数据库的优缺点:

文本数据库的缺点一是并发访问麻烦,无法实现多个程序同时修改数据库里面的不同记录。

文本数据库的缺点二是查询、修改、删除非常麻烦,只能顺序查找,修改、删除需要更新整个文件。

文本数据库的优点显而易见,程序简单,数据库管理方便。

什么情况下才适合使用文本数据库呢?

首先只有对于无需并发访问的数据库,其次数据库不大(比如只有一条记录),或者不需要修改删除数据的数据库才适合使用文本类型。

比如网站的超级管理员,使用文本数据库存放就有优越性,无需任何数据库扩展,检查权限的程序直接获取文本内容即可,性能会比任何数据库都高。

这个表很少修改,而且也不会许多记录,所以适合用文本数据库。

也有很多开源的基于文本数据库的项目,博客啊论坛都有.这时想起以前旧博客上备份过一个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也支持完整数据库的全文文本检索。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10025051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存