<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>超群.com的博客 &#187; cache</title>
	<atom:link href="http://www.fuchaoqun.com/tag/cache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fuchaoqun.com</link>
	<description></description>
	<lastBuildDate>Thu, 08 Sep 2011 15:08:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Berkeley DB：网站数据缓存方案测试</title>
		<link>http://www.fuchaoqun.com/2009/01/bdb-cache/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bdb-cache</link>
		<comments>http://www.fuchaoqun.com/2009/01/bdb-cache/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 15:23:04 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[cache]]></category>
		<guid isPermaLink="false">http://chaoqun.17348.com/?p=136</guid>
		<description><![CDATA[本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接http://chaoqun.17348.com/2009/01/bdb-cache/ 做网站，好像大家都比较喜欢文件缓存，把那些读操作多写操作少的内容缓存成一个文件放服务器硬盘上，下次直接读取或者更新。针对每一个key缓存成一个文件，当需要缓存的内容多的时候，文件数也就相应的多，这么多文件的同步和备份都是大问题，数据的可靠性也无从保证。 可是为了&#8221;效率&#8221;，我们也忍了，但文件缓存的效率真的好吗？有没有更好的方案？当然，memcached是很好的解决方案，今天这里测试另外一种方案：使用Berkeley DB作为网站数据缓存方案。 测试环境：CentOS 5.2，Core2 T5500@ 1.66GHz，1.5G内存，Ext3文件系统，apache 2.2.3，php 5.2.8 with php_dba 数据初始化：为了不至于在一个目录下文件数目过多，文件缓存分了两级hash目录，初始化数据数10万条。 /** * 初始化缓存 * * @param int $limit */ function init_cache&#40;$limit = 100000&#41; &#123; $str = 'good good study,and day day up.'; $bdb = dba_open&#40;'./bdb.db', 'c', 'db4'&#41;; for &#40;$i = 0; $i &#38;lt; $limit; $i++&#41; &#123; $data = str_repeat&#40;$str, rand&#40;1,100&#41;&#41;; dba_insert&#40;$i, $data, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接<a href="http://chaoqun.17348.com/2009/01/bdb-cache/" target="_blank">http://chaoqun.17348.com/2009/01/bdb-cache/</a></p></blockquote>
<p>做网站，好像大家都比较喜欢文件缓存，把那些读操作多写操作少的内容缓存成一个文件放服务器硬盘上，下次直接读取或者更新。针对每一个key缓存成一个文件，当需要缓存的内容多的时候，文件数也就相应的多，这么多文件的同步和备份都是大问题，数据的可靠性也无从保证。</p>
<p>可是为了&#8221;效率&#8221;，我们也忍了，但文件缓存的效率真的好吗？有没有更好的方案？当然，memcached是很好的解决方案，今天这里测试另外一种方案：使用Berkeley DB作为网站数据缓存方案。</p>
<p>测试环境：CentOS 5.2，Core2 T5500@ 1.66GHz，1.5G内存，Ext3文件系统，apache 2.2.3，php 5.2.8 with php_dba</p>
<p>数据初始化：为了不至于在一个目录下文件数目过多，文件缓存分了两级hash目录，初始化数据数10万条。</p>
<blockquote>
<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * 初始化缓存
 *
 * @param int $limit
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> init_cache<span style="color: #009900;">&#40;</span><span style="color: #000088;">$limit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100000</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'good good study,and day day up.'</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$bdb</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dba_open</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./bdb.db'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'c'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db4'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #000088;">$limit</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_repeat</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">dba_insert</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$cache_file</span> <span style="color: #339933;">=</span> get_cache_file<span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_file</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #990000;">dba_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * 获得缓存文件
 *
 * @param string $cache_key
 * @param string $md5_key
 * @return string
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> get_cache_file<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$md5_key</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'9527'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$dir_md5</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_key</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$md5_key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$file_md5</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./cache/'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_md5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$dir</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'/'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir_md5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span>  <span style="color: #000088;">$dir</span>  <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$file_md5</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.txt'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>
</blockquote>
<p>同样的缓存内容，占用磁盘大小：</p>
<blockquote><p>文件缓存：<span style="color: #ff0000;">348.9MB</span><br />
BDB缓存：<span style="color: #ff0000;">296.5MB</span></p></blockquote>
<p>BDB缓存占用磁盘空间要小一些。</p>
<p>测试程序尽可能的模拟真实环境，90％的读操作，10％的写操作，很多应用可能98％的读操作，2％的写操作，另外还模拟了一些新增缓存。</p>
<p>文件缓存测试程序代码：</p>
<blockquote>
<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * 文件缓存测试程序
 */</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'./common.php'</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// 随机一个key</span>
<span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">109999</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$cache_file</span> <span style="color: #339933;">=</span> get_cache_file<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 读写标记</span>
<span style="color: #000088;">$flag</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_file</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #cc66cc;">9</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$flag</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_file</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_repeat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'learn from LeiFeng!'</span><span style="color: #339933;">,</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>
</blockquote>
<p>BDB缓存测试程序代码：</p>
<blockquote>
<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * BDB缓存测试程序
 */</span>
<span style="color: #666666; font-style: italic;">// 随机一个key</span>
<span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">109999</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 读写标记</span>
<span style="color: #000088;">$flag</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$bdb</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dba_popen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./bdb.db'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db4'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dba_fetch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// dba_close($bdb);</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #cc66cc;">9</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$flag</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$data</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">dba_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_repeat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'learn from Comrade LeiFeng!'</span><span style="color: #339933;">,</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #990000;">dba_fetch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">dba_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>
</blockquote>
<p>文件缓存测试结果：</p>
<blockquote><p>ab -n10000 -c200 http://127.0.0.1/labs/TestCache/file.php</p>
<p>Requests per second:    <span style="color: #ff0000;">189.92</span> [#/sec] (mean)<br />
Time per request:       1053.055 [ms] (mean)<br />
Time per request:       5.265 [ms] (mean, across all concurrent requests)</p></blockquote>
<p>BDB缓存测试结果：</p>
<blockquote><p>ab -n10000 -c200 http://127.0.0.1/labs/TestCache/bdb.php</p>
<p>Requests per second: <span style="color: #ff0000;"> 220.69</span> [#/sec] (mean)<br />
Time per request:       906.249 [ms] (mean)<br />
Time per request:       4.531 [ms] (mean, across all concurrent requests)</p></blockquote>
<p>反复测试了几次，文件缓存每秒大概能处理170～200个请求，BDB缓存每秒大概能处理190～230个请求，貌似BDB还比文件缓存要快一些，其实BDB还可以更快一些，我们在测试代码里面用了不管是读操作还是写操作都用了$bdb = dba_popen(&#8216;./bdb.db&#8217;, &#8216;w&#8217;, &#8216;db4&#8242;);写的方式，其实我们很多的应用只是读操作，如果把BDB测试代码换成只有在写的时候才用写操作：</p>
<blockquote>
<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * BDB缓存测试程序
 */</span>
<span style="color: #666666; font-style: italic;">// 随机一个key</span>
<span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">109999</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 读写标记</span>
<span style="color: #000088;">$flag</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$bdb</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dba_popen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./bdb.db'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db4'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dba_fetch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #cc66cc;">9</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$flag</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$data</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">dba_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$bdb</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dba_popen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./bdb.db'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db4'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">dba_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_repeat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'learn from Comrade LeiFeng!'</span><span style="color: #339933;">,</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #990000;">dba_fetch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">dba_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bdb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>
</blockquote>
<p>测试结果：</p>
<blockquote><p>ab -n10000 -c200 http://127.0.0.1/labs/TestCache/bdb.php</p>
<p>Requests per second:    <span style="color: #ff0000;">361.62</span> [#/sec] (mean)<br />
Time per request:       553.068 [ms] (mean)<br />
Time per request:       2.765 [ms] (mean, across all concurrent requests)</p></blockquote>
<p>有点吓人，速度快要翻翻了。</p>
<p>后记：</p>
<p>php_dba扩展中建立数据库句柄，有dba_open和dba_popen两个函数，dba_popen建立的是持久连接，我在测试中发现使用dba_popen的性能要大大好于dba_open，测试中使用亦非常稳定。</p>
<p>其实<a href="http://memcachedb.org/" target="_blank">memcachedb</a>的核心还是BDB，引入了缓存和兼容memcached协议的socket接口，memcachedb当然会比单纯的BDB快，如果没办法用memcachedb，纯粹的BDB也是一种不错的方案，照测试看，各个方面比文件缓存都要好一些，当然，写频繁的操作可能要差些，因为存在文件锁的问题，换个思路想，写频繁缓存又有什么用呢。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2009/01/bdb-cache/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
