1、安装Berkeley DB
# cd /usr/local/src
# wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz
# tar -zxvf db-4.6.21.tar.gz
# cd db-4.6.21
# cd build_unix
Berkeley DB默认是安装在/usr/local/BerkeleyDB.4.6目录下,其中4.6就是版本号,你也可以指定–prefix参数来设置安装目录
# ../dist/configure --prefix=/usr/local/berkeleydb --enable-cxx
其中–enable-cxx就是编译C++库,这样才能编译Berkeley DB数据库的PHP扩展php_db4
# make
# make install
# echo '/usr/local/berkeleydb/lib/' >> /etc/ld.so.conf
# ldconfig
这2句的作用就是通知系统Berkeley DB的动态链接库在/usr/local/berkeleydb/lib/目录。
如果没有系统提示ldconfig命令,则用whereis ldconfig找一下在哪,一般可用 # /sbin/ldconfig
至此,Berkeley DB数据库已经安装完成。
2、安装Berkeley DB的PHP扩展
虽然PHP里已经自带了php_db和php_dba两个扩展都支持Berkekey DB,但是毕竟支持的有限,所以还是编译Berkeley DB自带的php_db4扩展好。
# cd /usr/local/src/db-4.6.18/php_db4/
# phpize(/usr/local/php/bin/phpize)
# ./configure --with-db4=/usr/local/berkeleydb/ --with-php-config=/usr/local/php/bin/php-config
# make
# make install
说明:这里configure的时候可能会提示你找不到php-config,你可以找到你的php安装PATH,然后增加--with-php- config=PATH
至此db4已编译好在/usr/lib64/php/modules/db4.so目录(具体跟你的系统有关)
echo 'extension=db4.so' > /etc/php.d/db4.ini
重起WEB服务器(Apache等)
至此php_db4扩展的安装也完成了,执行php -m即可看到db4扩展已经加载了。
3、测试php_db4扩展php_db4提供了下面4个类:
class Db4Env {
function Db4Env($flags = 0) {}
function close($flags = 0) {}
function dbremove($txn, $filename, $database = null, $flags = 0) {}
function dbrename($txn, $file, $database, $new_database, $flags = 0) {}
function open($home, $flags = DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN, $mode = 0666) {}
function remove($home, $flags = 0) {}
function set_data_dir($directory) {}
function txn_begin($parent_txn = null, $flags = 0) {}
function txn_checkpoint($kbytes, $minutes, $flags = 0) {}
}
class Db4 {
function Db4($dbenv = null) {} // create a new Db4 object using the optional DbEnv
function open($txn = null, $file = null, $database = null, $flags = DB_CREATE, $mode = 0) {}
function close() {}
function del($key, $txn = null) {}
function get($key, $txn = null, $flags = 0) {}
function pget($key, &$pkey, $txn = null, $flags = 0) {}
function get_type() {} // returns the stringified database type name
function stat($txn = null, $flags = 0) {} // returns statistics as an as
function join($cursor_list, $flags = 0) {}
function sync() {}
function truncate($txn = null, $flags = 0) {}
function cursor($txn = null, flags = 0) {}
}
class Db4Txn {
function abort() {}
function commit() {}
function discard() {
function id() {}
function set_timeout($timeout, $flags = 0) {}
}
class Db4Cursor {
function close() {}
function count() {}
function del() {}
function dup($flags = 0) {}
function get($key, $flags = 0) {}
function pget($key, &$primary_key, $flags = 0) {}
function put($key, $data, $flags = 0) {}
}
从字面上也不难理解,Db4Env设置数据库环境、Db4操作数据库、Db4Txn用于事务处理、Db4Cursor用于光标处理。具体使用可参考
http://www.oracle.com/technology/documentation/berkeley-db/db/ref/ext/php.html
/usr/local/src/db-4.6.18/php_db4/samples目录下提供了2个简单的例子simple_counter.php和 transactional_counter.php。
simple_counter.php
// Create a new Db4 Instance
$db = new Db4();
// Open it outside a Db4Env environment with datafile/var/lib/db4
// and database name "test"
$db->open(null, "/var/tmp/db4", "test");
// Get the current value of "counter"
$counter = $db->get("counter");
print "Counter Value is $counter\n";
// Increment $counter and put() it.
$db->put("counter", $counter+1);
// Sync to be certain, since we're leaving the handle open
$db->sync();
?>
transactional_counter.php
// Open a new Db4Env
$dbenv = new Db4Env();
$dbenv->set_data_dir("/var/tmp/dbhome");
$dbenv->open("/var/tmp/dbhome");
// Open a database in $dbenv. Note that even though
// we pass null in as the transaction, db4 forces this
// operation to be transactionally protected, so PHP
// will force auto-commit internally.
$db = new Db4($dbenv);
$db->open(null, 'a', 'foo');
$counter = $db->get("counter");
// Create a new transaction
$txn = $dbenv->txn_begin();
if($txn == false) {
print "txn_begin failed";
exit;
}
print "Current value of counter is $counter\n";
// Increment and reset counter, protect it with $txn
$db->put("counter", $counter+1, $txn);
// Commit the transaction, otherwise the above put() will rollback.
$txn->commit();
// Sync for good measure
$db->sync();
// This isn't a real close, use _close() for that.
$db->close();
?>
需要补充的是
db4.so文件
cp modules/db4.so/usr/local/php5/ext/
这里需要你先设置你的php的扩展目录的在
在php.ini里面
通过设extension_dir
最后一不是你在php.ini文件中打开这个扩展
extension=jinzhesheng_module.so
http://cms.nn200.com/html/system/201011/1117992/
-----------------------------
table { padding: 2px; border: 1px solid rgb(170, 170, 170); border-collapse: collapse; }td { padding: 2px; border: 1px solid rgb(170, 170, 170); border-collapse: collapse; }
BerkeleyDB的cache可以采用Hash和BTree两种索引方式,今天测试了这两种方式的存取速度,测试方法是:向bdb中写
100万条记录,key是1至100万的数字编号,value分别是32、64、128、256字节的字符串,然后再顺序查询这100万条记录,分别统计
写和读的时间,其中bdb版本为4.2。
当cache开到1G大小时,数据如下(其中大小单位为字节,时间单位为秒):
Cache为1G时 |
value大小(字节) |
Hash写时间 |
Hash读时间 |
BTree写时间 |
BTree读时间 |
32 |
12 |
6 |
4 |
3 |
64 |
8 |
4 |
4 |
3 |
128 |
7 |
4 |
5 |
3 |
256 |
7 |
4 |
6 |
3 |
由于cache非常大,几乎所有的数据都可以放在里面,所以两种索引方式的存取效率基本一样。
如果把cache改为32M,测试结果又如下:
Cache为32M时 |
value大小(字节) |
Hash写时间 |
Hash读时间 |
BTree写时间 |
BTree读时间 |
32 |
11 |
6 |
5 |
39 |
64 |
205 |
62 |
17 |
50 |
128 |
缺 |
缺 |
44 |
42 |
256 |
缺 |
缺 |
186 |
51 |
其中“缺”字表示测试无法进行,因为当数据太大时,用Hash索引运行bdb几乎把机器搞死,我不得不中断测试。这组测试看得出:如果使用
BTree,随着数据的翻倍,写的时间也近乎翻倍,但读的时间非常稳定,对于数据量大、写少读多的应用(比如bbs、图片服务等)应该尽量使用BTree
索引。
总的来看,BerkeleyDB的Hash索引表现古怪,只在小cache小数据量的情况下查询速度快于BTree,可现在哪会有这种情况?还是用BTree索引保险一些。
分享到:
相关推荐
在IT领域,构建一个基于LINUX、APACHE、PHP、BDB、OPENLDAP和PHPLDAPADMIN的系统是常见的任务,这样的组合常用于搭建高效能的Web服务器和身份认证服务。下面将详细介绍这些组件的功能以及它们的安装配置步骤。 **...
4. 安装PHP:同样使用包管理器安装PHP及其相关扩展,确保与Apache版本兼容。 5. 安装BDB:获取并安装BDB库,它可能需要手动编译和配置。 6. 安装OpenLDAP:安装OpenLDAP服务器软件,配置目录结构和权限,选择BDB作为...
在实际项目中,MySQL常常用于存储网站内容、用户信息等数据,尤其在不需要事务处理的场景下,它的性能表现优异,且由于开源特性,可以自由定制和扩展,降低了企业成本。 综上所述,数据库是存储和管理数据的关键...
标题中的"php-handelrsocket_npw4x2_npw569_V2_php_"似乎是一个项目或库的名称,其中包含了"php",表明它与PHP编程语言有关,"handlersocket"则可能指的是HandlerSocket扩展,这是一款用于MySQL数据库的高性能NoSQL...
在设计一个类似BDB的基于文件的Key-Value小型数据库时,开发者需要根据数据存储需求、性能要求以及未来扩展的考虑,仔细选择合适的数据序列化方式。本文提供的性能测试分析结果可作为决策时的一个参考。不过,通常还...
使用事务处理时,还应注意到,大量的事务操作会占用数据库资源,尤其是在高并发的环境下,可能会导致性能瓶颈。因此,在设计数据库操作时,应尽量减少事务的使用,合理设计操作流程,优化SQL语句,并考虑合理的事务...
在 CentOS 6.2 系统环境下,首先确保服务器已更新至最新状态,并安装必要的工具包,如 PHP 和 Perl 等,以便后续的配置工作可以顺利进行。根据给定的部分内容,我们首先执行以下命令来安装这些工具: ```bash yum ...
以上是对PHP工程师面试笔试真题的部分解析,涵盖了进制转换、面向对象特性、文件操作、安全模式、数据库操作、性能测试以及字符串处理等多个知识点。面试中,这些问题会帮助评估应聘者的PHP基础知识和实际应用能力。
PHP通过MySQLi或PDO_MySQL扩展与MySQL进行通信,这些扩展提供了连接、查询、结果处理等功能,使得开发者可以轻松地在PHP应用中集成数据库操作。 压缩包内的文件名称列表揭示了安装程序的一些关键组件: 1. **...
2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....
- 安装过程中可能需要先安装依赖库,如 Berkeley DB(通常称为 BDB)。 - 通过源码编译或使用包管理器(如 apt-get 或 yum)进行安装。 2. **基本概念** - **键值对**:`memcachedb` 存储的数据以键值对的形式...
3. 可扩展性:MySQL 数据库具有高性能和可扩展性,可以轻松处理高并发的请求,还支持主从复制和集群等高可用性解决方案,以确保业务的稳定性和可靠性。 4. 安全性:MySQL 数据库具有高安全性,可以保护数据的机密性...
该系列产品主要作为“前沿”数据库部署,为不需要SQL功能的应用场景提供高性能、高可靠性和高可扩展性。 **1.2 产品系列** - **BerkeleyDB - 事务处理式存储引擎**:适用于基本键/值数据结构中的非类型化数据存储...
下面我们将详细探讨MySQL 5.0.18在Windows环境下的主要特点、安装步骤以及相关知识点。 **1. MySQL 5.0版本的主要特性** - **优化查询性能**:MySQL 5.0引入了更高效的查询优化器,能够更好地处理复杂的SQL语句,...
2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....
2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....
2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL...
2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL ...
2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....