﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-那谁的技术博客-随笔分类-ccache</title><link>http://www.cppblog.com/converse/category/6498.html</link><description>感兴趣领域:高性能服务器编程,算法,Linux内核</description><language>zh-cn</language><lastBuildDate>Mon, 21 Sep 2009 16:37:30 GMT</lastBuildDate><pubDate>Mon, 21 Sep 2009 16:37:30 GMT</pubDate><ttl>60</ttl><item><title>commoncache与tokyocabinet插入数据的效率比较</title><link>http://www.cppblog.com/converse/archive/2009/09/20/96793.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Sun, 20 Sep 2009 12:02:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2009/09/20/96793.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/96793.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2009/09/20/96793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/96793.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/96793.html</trackback:ping><description><![CDATA[最近tokyocabinet这个数据库很流行，网上出现很多研究这个玩意儿的文章。在它的<a href="http://1978th.net/tokyocabinet/">主页</a>上，给出的<a href="http://1978th.net/tokyocabinet/benchmark.pdf">benchmark</a>表明，在它的硬件环境下，插入一百万数据仅需不到一秒的时间。<br><br>我被震撼了，为了亲眼所见，也为了和我之前写的<a  href="http://www.cppblog.com/converse/category/6498.html">commoncache</a>库进行比较，我决定在我自己的机器上，使用同样类型，大小的数据，同样的量级，进行插入数据这个操作的比较。<br><br>下面给出我写的测试文件：<br>针对tokyocabinet的：<br>test_unfix_cache.c<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*******************************************************************<br><br>&nbsp;&nbsp;&nbsp;&nbsp;created:&nbsp;&nbsp;&nbsp;&nbsp;2008/05/30<br><br>&nbsp;&nbsp;&nbsp;&nbsp;filename:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test_unfix_cache.c<br><br>&nbsp;&nbsp;&nbsp;&nbsp;author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lichuang<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;purpose:&nbsp;&nbsp;&nbsp;&nbsp;<br><br>********************************************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">errno.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">unistd.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">fcntl.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">types.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">wait.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">netinet</span><span style="color: #000000;">/</span><span style="color: #0000ff;">in</span><span style="color: #000000;">.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">signal.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">arpa</span><span style="color: #000000;">/</span><span style="color: #000000;">inet.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tcutil.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tchdb.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br><br><br>TCHDB&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">hdb&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br><br><br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;mainloop();<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;createrandstring(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;len);<br><br><br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;isparent&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br><br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br><br>{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;hdb&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tchdbnew();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">hdb)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">create&nbsp;error!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">tchdbopen(hdb,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">1.hdb</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;HDBOWRITER&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;HDBOCREAT))<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">open&nbsp;error!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;mainloop();<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>}<br><br><br><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;STRING_LEN&nbsp;5</span><span style="color: #000000;"><br><br><br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;mainloop()<br><br>{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[STRING_LEN];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;num,&nbsp;i,&nbsp;len;<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;srand((unsigned)time(NULL)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getpid());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;STRING_LEN;<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000000</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;STRING_LEN);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;createrandstring(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;len);<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">tchdbput2(hdb,&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">pid&nbsp;=&nbsp;%d,&nbsp;test&nbsp;done\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;getpid());<br><br>}<br><br><br><br></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;str[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br><br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;createrandstring(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;len)<br><br>{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,&nbsp;i;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;len&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;rand()&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(str)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">x&nbsp;=&nbsp;(i&nbsp;+&nbsp;len)&nbsp;%&nbsp;(sizeof(str)&nbsp;-&nbsp;1);&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str[x];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[</span><span style="color: #000000;">++</span><span style="color: #000000;">i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str[len&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(str)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br><br>}<br><br><br></span></div>
对应的Makefile：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">all:test_unfix_cache.c<br>&nbsp;&nbsp;&nbsp;&nbsp;gcc&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">I</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">include&nbsp;test_unfix_cache.c&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;test_unfix_cache&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">L</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">lib&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">ltokyocabinet&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lz&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lbz2&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lrt&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lpthread&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lm&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lc<br></span></div>
<br>而针对commoncache的测试文件是：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">*******************************************************************<br>&nbsp;&nbsp;&nbsp;&nbsp;created:&nbsp;&nbsp;&nbsp;&nbsp;2008/05/30<br>&nbsp;&nbsp;&nbsp;&nbsp;filename:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test_unfix_cache.c<br>&nbsp;&nbsp;&nbsp;&nbsp;author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lichuang<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;purpose:&nbsp;&nbsp;&nbsp;&nbsp;<br>********************************************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">errno.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">unistd.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">fcntl.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">types.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">wait.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">netinet</span><span style="color: #000000;">/</span><span style="color: #0000ff;">in</span><span style="color: #000000;">.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">signal.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">arpa</span><span style="color: #000000;">/</span><span style="color: #000000;">inet.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ccache.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">memory.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><br>ccache_t</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;cache;<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;mainloop();<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;createrandstring(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;len);<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;isparent&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;cache&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ccache_create(</span><span style="color: #000000;">75000</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">./testunfixmap</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">810</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(NULL&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;cache)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">create_cache&nbsp;error!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;mainloop();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;STRING_LEN&nbsp;5</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cmp_fun(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;data1,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;data2,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;len)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;memcmp(data1,&nbsp;data2,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;len);<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;mainloop()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[STRING_LEN];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,&nbsp;len;<br>&nbsp;&nbsp;&nbsp;&nbsp;ccache_data_t&nbsp;data;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;srand((unsigned)time(NULL)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getpid());<br>&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;STRING_LEN;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000000</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;STRING_LEN);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;createrandstring(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;len);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.datasize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;len;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.keysize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;len;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.key&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">printf("i&nbsp;=&nbsp;%d\n",&nbsp;i);</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;ccache_insert(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">data,&nbsp;cache,&nbsp;cmp_fun,&nbsp;NULL,&nbsp;NULL))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">pid&nbsp;=&nbsp;%d,&nbsp;test&nbsp;done\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;getpid());<br>}<br><br></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;str[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;createrandstring(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;len)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;len&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;rand()&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(str)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">x&nbsp;=&nbsp;(i&nbsp;+&nbsp;len)&nbsp;%&nbsp;(sizeof(str)&nbsp;-&nbsp;1);&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str[x];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[</span><span style="color: #000000;">++</span><span style="color: #000000;">i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str[len&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(str)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br>}<br><br></span></div>
在commoncache的项目代码的test目录中，同样存在一个名为test_unfix_test.c的文件，是我以前写commoncache时测试用的，不过原来的那个文件功能较多，不仅有插入操作，还有查找，替换等操作，这次为了测试，我对这个文件进行了精简，只保留插入数据操作的部分。使用的是commoncache中的hash－rbtree结构。<br><br>性能测试结果：<br>tokyocabinet：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">lichuang@lichuang:</span><span style="color: #000000;">/</span><span style="color: #000000;">media</span><span style="color: #000000;">/</span><span style="color: #000000;">e</span><span style="color: #000000;">/</span><span style="color: #000000;">source</span><span style="color: #000000;">/</span><span style="color: #000000;">tokyocabinet</span><span style="color: #000000;">/</span><span style="color: #000000;">test$&nbsp;time&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">test_unfix_cache&nbsp;<br>pid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">15464</span><span style="color: #000000;">,&nbsp;test&nbsp;done<br><br>real&nbsp;&nbsp;&nbsp;&nbsp;0m0.373s<br>user&nbsp;&nbsp;&nbsp;&nbsp;0m0.364s<br>sys&nbsp;&nbsp;&nbsp;&nbsp;0m0.008s<br></span></div>
commoncache：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">lichuang@lichuang:</span><span style="color: #000000;">/</span><span style="color: #000000;">media</span><span style="color: #000000;">/</span><span style="color: #000000;">e</span><span style="color: #000000;">/</span><span style="color: #000000;">source</span><span style="color: #000000;">/</span><span style="color: #000000;">ccache</span><span style="color: #000000;">/</span><span style="color: #000000;">bin$&nbsp;time&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">test_unfix_cache&nbsp;<br>pid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">15514</span><span style="color: #000000;">,&nbsp;test&nbsp;done<br><br>real&nbsp;&nbsp;&nbsp;&nbsp;0m0.235s<br>user&nbsp;&nbsp;&nbsp;&nbsp;0m0.228s<br>sys&nbsp;&nbsp;&nbsp;&nbsp;0m0.004s<br></span></div>
看上来，commoncache比之tokyocabinet还稍好一些？<br>不过，commoncache与tokyocabinet还是有区别的，前者工作的区域是共享内存，后者是磁盘文件，有这样的表现，确实惊人。<br><br>这次比较，起码给了我一些些的自信，我的commoncache不比世界一流的文件数据库性能差的太多。<br>下一步，我想继续下面的几个工作：<br>1） 国庆的时候，整理出一份commoncache的设计文档，算是阶段性的一个小结。另外，commoncache在插入数据的时候，有时会报错，我还得查查是为什么。<br>2） 抽空要开始研究文件数据库的实现了，tokyocabinet就是一个不错的参考。<br><br>另外，多说几句，一个产品要成功，仅仅有性能是不够，可维护性，可备份性，优秀的协议设计等等，都是重要的指标。我想，commoncache只做到了性能这一点，我需要在其他几方面继续努力。<br><br>哦，忘了给出我的环境参数：<br>ubuntu9.04,内核2.6.18,内存3G，intel 双核CPU。<br><br><br> <img src ="http://www.cppblog.com/converse/aggbug/96793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">那谁</a> 2009-09-20 20:02 <a href="http://www.cppblog.com/converse/archive/2009/09/20/96793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ccache发布0.5版本</title><link>http://www.cppblog.com/converse/archive/2008/11/14/66929.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Fri, 14 Nov 2008 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2008/11/14/66929.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/66929.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2008/11/14/66929.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/66929.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/66929.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2008/11/14/66929.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/66929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">那谁</a> 2008-11-14 16:54 <a href="http://www.cppblog.com/converse/archive/2008/11/14/66929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ccache发布0.4版本</title><link>http://www.cppblog.com/converse/archive/2008/10/31/65656.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Fri, 31 Oct 2008 15:59:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2008/10/31/65656.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/65656.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2008/10/31/65656.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/65656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/65656.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2008/10/31/65656.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/65656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">那谁</a> 2008-10-31 23:59 <a href="http://www.cppblog.com/converse/archive/2008/10/31/65656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ccache发布0.3版本</title><link>http://www.cppblog.com/converse/archive/2008/08/07/58253.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Thu, 07 Aug 2008 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2008/08/07/58253.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/58253.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2008/08/07/58253.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/58253.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/58253.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2008/08/07/58253.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/58253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">那谁</a> 2008-08-07 17:27 <a href="http://www.cppblog.com/converse/archive/2008/08/07/58253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ccache发布0.2版本</title><link>http://www.cppblog.com/converse/archive/2008/04/02/46016.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Wed, 02 Apr 2008 04:00:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2008/04/02/46016.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/46016.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2008/04/02/46016.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/46016.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/46016.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ccache发布0.2版本&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2008/04/02/46016.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/46016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">那谁</a> 2008-04-02 12:00 <a href="http://www.cppblog.com/converse/archive/2008/04/02/46016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发布我的开源cache库ccache</title><link>http://www.cppblog.com/converse/archive/2008/03/24/45236.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Mon, 24 Mar 2008 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/converse/archive/2008/03/24/45236.html</guid><wfw:comment>http://www.cppblog.com/converse/comments/45236.html</wfw:comment><comments>http://www.cppblog.com/converse/archive/2008/03/24/45236.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/converse/comments/commentRss/45236.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/converse/services/trackbacks/45236.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 发布我的开源cache库ccache version 0.1&nbsp;&nbsp;<a href='http://www.cppblog.com/converse/archive/2008/03/24/45236.html'>阅读全文</a><img src ="http://www.cppblog.com/converse/aggbug/45236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/converse/" target="_blank">那谁</a> 2008-03-24 11:20 <a href="http://www.cppblog.com/converse/archive/2008/03/24/45236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>