在Linux中我们可能需要操作Berkeley 数据库即DB,而不是MySQL。我这里举的例子就是Apache的RewriteMap中的DBM:DB,由于RewriteMap不支持MySQL数据库,所以只能对Berkeley DB操作。已达到我们期望的动态Rewrite。
首先我们要检查自己的Perl是否支持DB_File类。我们可以通过编写一个简单的Perl程序来检查。程序代码下:
#!/usr/bin/perl -w
use DB_File;
只要能够运行上面的程序就可以知道是否支持DB_File。下面是DB数据库的基本操作
1、连接到DB数据库
tie %hash, "DB_File", "DB文件名", "标志", "权限", $DB_HASH;
tie函数使得我们操作DB就像操作一个内存中的hash变量一样。
一般情况下标志我们取O_RDWR和O_CREAT。使用“或”操作符连接,如:O_RDWR|O_CREAT。
权限表示如果DB文件不存在,当使用了O_CREAT标志后,创建的DB文件所带的属性。一般取0666。
2、添加和修改DB中的记录
$hash{"key"} = "value";
如果key已经存在则会用value中的值替换原来的值,如果key不存在则会添加一个key=>value的记录。
3、删除记录
delete $hash{"key"};
此时key必须是存在的,可以在删除前判断一下key是否存在。
4、判断key是否存在
if ( '' eq $hash{"key"} ) { ... }
5、遍历整个DB库
while ( ( $key, $value ) = each %hash ) { ... }
不建议对DB库进行遍历,尤其是DB文件较大时,更应该避免出现类似的遍历。