php操作dba的总结笔记

来源:互联网 发布:淘宝怎么找收藏的店铺 编辑:程序博客网 时间:2024/05/17 07:22

1.简介Database (dbm-style) Abstraction Layer

这些函数是建立在访问 Berkeley DB (伯克利数据库)的基础之上。

目前 PHP 支持的 DBA 数据库包括:

  1. dbm:柏克莱发展的最早期 DBA 数据库。
  2. ndbm:较新且较有弹性的 DBA。
  3. gdbm:GNU 发展的 DBA,ftp://ftp.gnu.org/pub/gnu/gdbm/
  4. db2:由 Sleepycat 软件开发的 DB2 (非 IBM 的 DB2),http://www.sleepycat.com
  5. db3:由 Sleepycat 软件开发的 DB3。
  6. db4:由 Sleepycat 软件开发的 DB4,从php4.3.2开始支持。
  7. cdb:这是 qmail 作者开发快速可靠的 DBA,http://cr.yp.to/cdb.html.
  8. cdb_make
  9. flatfile
  10. inifile
  11. qdbm

2.相关的函数

  • dba_close —关闭dba数据库
  • dba_delete —删除数据库中指定的key
  • dba_exists — 检查key是否存在
  • dba_fetch— 取得指定key的值
  • dba_firstkey — 获取第一个key
  • dba_handlers —列出所有可用的handler
  • dba_insert— 插入一条记录
  • dba_key_split— Splits a key in string representation into array representation
  • dba_list — 列出所有打开的数据库
  • dba_nextkey — 获取下一个key
  • dba_open —打开数据库
  • dba_optimize — 优化数据库
  • dba_popen — 使用长链接打开数据库
  • dba_replace —替换或者插入一条记录
  • dba_sync — 数据库同步

3.函数说明和范例

3.1 dba_open()

3.1.1 说明:

resource dba_open ( string $path , string $mode [, string $handler [, mixed $... ]] 链接数据库

3.1.2 参数

string $path :打开数据库所在的目录。

string $mode : 打开的模式。第一个字符位置,'r’:读的方式; 'w’:写的方式; 'c’:读写方式,如果数据库不存在,则创建; 'n’:创建,以读写方式; 第二个字符位置,'l’:以锁定的方式,并生成一个.lck的文件; 'd’:锁定数据库自己。第三个字符位置:'t’:测试访问锁而且不想等待的时候,用此选项。

注意:对一个数据库文件,只能有一个人可以写操作。当dba数据库用在web服务或者多个需要写操作的时候,只能是一个接着一个,不能同时写,而且在写的时候,读也是不允许的。dba的扩展用锁来防止同时操作,请看下表:

 

DBA lockingalready openmode = "rl"mode = "rlt"mode = "wl"mode = "wlt"mode = "rd"mode = "rdt"mode = "wd"mode = "wdt"not openokokokokokokokokmode = "rl"okokwaitfalseillegalillegalillegalillegalmode = "wl"waitfalsewaitfalseillegalillegalillegalillegalmode = "rd"illegalillegalillegalillegalokokwaitfalsemode = "wd"illegalillegalillegalillegalwaitfalsewaitfalse

 

  • ok: the second call will be successfull. 第二次调用将会成功
  • wait: the second call waits until dba_close() is called for the first. 第二次调用会等待,直到调用dba_close() 时候
  • false: the second call returns false. 第二次调用会返回false
  • illegal: you must not mix "l" and "d" modifiers for mode parameter.         'l' 和 'd'禁止混合使用在模式参数中

string $handler:使用的数据库

3.1.3 返回值

成功返回handler, 失败返回 false

3.1.4 示例

//打开数据库test.db,使用的handler是db4
$dbh = dba_open( "./test.db", "c", "db4" );
if (!$dbh) {
    echo "Open db4 false./n";
    exit;
}

3.2 dba_insert()

3.2.1 说明

bool dba_insert ( string $key , string $value , resource $handle ) 插入一条记录

3.2.2 参数

string $key   key值,假如key存在的话,函数返回false

string $value 想要插入的值

resource $handle 数据库的handler, 通过dba_open() , dba_popen() 返回

3.2.3 返回值

如果成功则返回 TRUE,失败则返回 FALSE

3.2.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
       or die( "Couldn't open database" );
dba_insert( "Sonic Screwdriver", "23.20", $dbh);
dba_insert( "Tricorder", "55.50", $dbh);
dba_insert( "ORAC AI", "2200.50", $dbh);
dba_insert( "HAL 2000", "4500.50", $dbh); dba_close( $dbh );

3.3 dba_fetch()

3.3.1 说明

string dba_fetch ( string $key , resource $handle )   通过指定的key获取数据

3.3.2 参数

string $key key值

resource $handle 数据库的handler,通过dba_open(), dba_popen() 返回

3.3.3 返回值

如果key对应的value值存在,返回data字符串,否则返回FALSE

3.3.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
       or die( "Couldn't open database" );
$tricorder = dba_fetch('Tricorder', $dbh);
dba_close($dbh);

3.4 dba_delete()

3.4.1 说明

bool dba_delete ( string $key , resource $handle ) 通过指定的key删除数据库记录

3.4.2 参数

string $key key值, 如果key不存在,返回false

resource $handle 数据库的handler, 通过调用 dba_open(), dba_popen() 返回

3.4.3 返回值

如果成功则返回 TRUE,失败则返回 FALSE

3.4.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
        or die( "Couldn't open database" );
$res_del = dba_delete('Tricorder', $dbh);
dba_close();

3.5 dba_exists()

3.5.1 说明

bool dba_exists ( string $key , resource $handle ) 检查key是否存在

3.5.2 参数

string $key key值

resource $handle 数据库handler, 通过调用 dba_open(), dba_popen() 函数返回

3.5.3 返回值

key存在返回TRUE, 否则返回FALSE

3.5.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
       or die( "Couldn't open database" );
if (dba_exists('Tricorder', $dbh)) {
    $res_del = dba_delete('Tricorder', $dbh);
}
dba_close();

3.6 dba_replace()

3.6.1 说明

bool dba_replace ( string $key , string $value , resource $handle ) 替换或者插入记录

3.6.2 参数

string $key 要替换的key,如果可以不存在,就插入

string $value 要替换的值

resource $handle 数据库handler, 通过调用 dba_open(), dba_popen() 返回

3.6.3 返回值

如果成功则返回 TRUE,失败则返回 FALSE

3.6.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
or die( "Couldn't open database" );

dba_insert("Tricorder", "55.50", $dbh);
dba_replace("Tricorder", "66.60", $dbh);
dba_close($dbh);

 

3.7 dba_firstkey()

3.7.1 说明

string dba_firstkey ( resource $handle ) 获取数据库第一条记录的key值,从新设置库内部的指针

3.7.2 参数

resource $handle 打开的数据库handler, 通过dba_open(), dba_popen() 返回

3.7.3 返回值

成功返回key值,失败返回FALSE

3.7.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
       or die( "Couldn't open database" );
echo dba_firstkey($dbh);  // print "Sonic Screwdriver"
dba_close();

3.8 dba_nextkey()

3.8.1 说明

string dba_nextkey ( resource $handle ) 获取当前指针指向的下一条记录的key值

3.8.2 参数

resource $handle 打开的数据库handler, 通过调用dba_open(),dba_popen() 返回

3.8.3 返回值

成功返回key值, 失败返回FALSE

3.8.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
       or die( "Couldn't open database" );
echo dba_firstkey($dbh);     //print "Sonic Screwdriver"
echo dba_nextkey($dbh); //print "Tricorder"
dba_close();

3.9 dba_handlers()

3.9.1 说明

array dba_handlers ([ bool $full_info ] ) 获取支持的handlers列表

3.9.2 参数

bool $full_info 打开/关闭在结果集中显示全部信息,默认是FALSE

3.9.3 返回值

返回一个数据库handler的数组,假如full_info设置为TRUE,返回的数组以handler名字为键值,版本信息为值,否则返回一个索引数组,

3.9.4 示例

$dbh = dba_open( "./data/products", "c", "db4" )
       or die( "Couldn't open database" );
print_r(dba_handlers());
// 默认参数,打印如下
Array
(
[0] => gdbm
[1] => cdb
[2] => cdb_make
[3] => db4
[4] => inifile
[5] => flatfile
)

print_r(dba_handlers(true));
// 参数为true,打印如下
Array
    (
     [gdbm] => GDBM version 1.8.3. 10/15/2002 (built Oct 22 2008 11:30:17)
     [cdb] => 0.75, $Revision: 1.10.2.1.2.3 $
     [cdb_make] => 0.75, $Revision: 1.9.2.1.2.1 $
     [db4] => Berkeley DB 4.5.20: (September 20, 2006)
     [inifile] => 1.0, $Revision: 1.14.2.1.2.3 $
     [flatfile] => 1.0, $Revision: 1.14.2.1.2.1 $
    )

3.10 dba_list()

3.10.1 说明

array dba_list ( void ) 获取打开的所有数据库列表

3.10.2 参数

void 无参数

3.10.3 返回值

一个联合数组, resourceid => filename

 

3.11 dba_popen()

3.11.1 说明

resource dba_popen ( string $path , string $mode [, string $handler [, mixed $... ]] ) 以长链接方式打开数据库

3.11.2 参数

参考dba_open() 函数

3.11.3 返回值

成功返回数据库handler, 否则返回FALSE

3.12 dba_optimize()

3.12.1 说明

bool dba_optimize ( resource $handle ) 优化数据库

3.12.2 参数

resource $handle 打开的数据库handler, 通过调用dba_open(),dba_popen()返回

3.12.3 返回值

如果成功则返回 TRUE,失败则返回 FALSE

3.13 dba_sync()

3.13.1 说明

bool dba_sync ( resource $handle ) 数据库的同步

3.13.2 参数

resource $handle 打开的数据库handler,通过调用dba_open(),dba_popen()返回

3.13.3 返回值

如果成功则返回 TRUE,失败则返回 FALSE

 

3.14 dba_close()

3.14.1 说明

void dba_close ( resource $handle ) 关闭一个dba数据库

3.14.2 参数

resource $handle 打开的数据库handler,通过调用dba_open(),dba_popen() 返回

3.14.3 返回值

 

4. 使用db4,和gdbm的效率比较

文件1,打开dba数据库,handler设置为db4

文件2,打开dba数据库,handler设置为gdbm

文件1,文件2 循环写入100条记录,取出100记录,删除100条记录,所有的时间(单位为秒)如下:

文件1:                                                                                                     文件2:

写入时间::0.44283866882324                                                           写入时间::2.2147016525269
读取时间::0.046286106109619                                                         读取时间::0.037073612213135
删除时间: 0.00073099136352539                                                    删除时间: 0.00082588195800781

由此看以看出: 读取,删除的时间基本差不多,使用db4写入的速度是比gdbm快5倍左右,

5.db 版本

db-4.5.20.NC.tar.gz

下载地址:http://www.berkeleydb.net/download/index.html

原创粉丝点击