??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美日韩亚洲精品,9l国产精品久久久久麻豆,黄色成人片子http://www.shnenglu.com/converse/category/10172.html感兴领?高性能服务器编E?法,Linux内核zh-cnMon, 11 Jan 2010 05:55:45 GMTMon, 11 Jan 2010 05:55:45 GMT60tokyocabinet1.4.19阅读W记Q一Qhash数据库概q?/title><link>http://www.shnenglu.com/converse/archive/2010/01/10/105317.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Sun, 10 Jan 2010 02:22:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2010/01/10/105317.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/105317.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2010/01/10/105317.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/105317.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/105317.html</trackback:ping><description><![CDATA[开始正式的研究key-value形式的持久化存储Ҏ(gu)了,W一个阅ȝ目是tokyo cabinetQ版本号?.4.19.<br><br>tokyo cabinet支持几种数据库Ş式,包括hash数据库,B+树数据库Qfix-length数据库,table数据库。目前我仅看了第一Uhash数据库的实现。之所以选择q个Q是因ؓW一q种cd的数据库g是TC中用的最多的一U,其次它的法比之B+树又更简单一些而效率上的表C丝毫不差?br><br>看看TC中代码的l织。关于上面几个分cȝ数据库实玎ͼ实际上在TC目的代码组l中各自以单个文件的形式出现Q比如hash数据库的代码全都集中?tchdb.c/h中,也只不过4000多行|了。除去这几种数据库的实现文gQ其余的代码文g功能可以大体上分Zc,一cL辅助性质的代码,l项目中各个部分使用上的Q另一部分是单独的管理数据库的CLIE序的代码,比如tchmgr.c/h是用于理HASH数据库的CLIE序的代码。之所以要交代一下项目中代码的组l,无非是ؓ了说明,其实如果问题集中在HASH数据库或者其他Ş式的数据库实CQv码在TC中,所要关注的代码是不多的?br><br>首先来看数据库文件是如何l织的?br><img alt="" src="http://www.shnenglu.com/images/cppblog_com/converse/12791/r_tokyo%20cabinet%20hash%20database%20file%20overview.png"><br>从图中可以看刎ͼhash数据库文件大致分为四个部分:数据库文件头Qbucket 数组Qfree pool数组Q最后的是真正存放record的部分。下面对q几部分做一个说明?br><br>1Q数据库文g?br>数据库文件头部分存放的是关于该数据库的一些M信息Q包括这些内容:<br> <table summary="database header format"> <tbody> <tr> <td class="label">name</td> <td class="label">offset</td> <td class="label">length</td> <td class="label">feature</td> </tr> <tr> <td>magic number</td> <td class="number">0</td> <td class="number">32</td> <td>identification of the database. Begins with "ToKyO CaBiNeT"</td> </tr> <tr> <td>database type</td> <td class="number">32</td> <td class="number">1</td> <td>hash (0x01) / B+ tree (0x02) / fixed-length (0x03) / table (0x04)</td> </tr> <tr> <td>additional flags</td> <td class="number">33</td> <td class="number">1</td> <td>logical union of open (1<<0) and fatal (1<<1)</td> </tr> <tr> <td>alignment power</td> <td class="number">34</td> <td class="number">1</td> <td>the alignment size, by power of 2</td> </tr> <tr> <td>free block pool power</td> <td class="number">35</td> <td class="number">1</td> <td>the number of elements in the free block pool, by power of 2</td> </tr> <tr> <td>options</td> <td class="number">36</td> <td class="number">1</td> <td>logical union of large (1<<0), Deflate (1<<1), BZIP2 (1<<2), TCBS (1<<3), extra codec (1<<4)</td> </tr> <tr> <td>bucket number</td> <td class="number">40</td> <td class="number">8</td> <td>the number of elements of the bucket array</td> </tr> <tr> <td>record number</td> <td class="number">48</td> <td class="number">8</td> <td>the number of records in the database</td> </tr> <tr> <td>file size</td> <td class="number">56</td> <td class="number">8</td> <td>the file size of the database</td> </tr> <tr> <td>first record</td> <td class="number">64</td> <td class="number">8</td> <td>the offset of the first record</td> </tr> <tr> <td>opaque region</td> <td class="number">128</td> <td class="number">128</td> <td>users can use this region arbitrarily</td> </tr> </tbody> </table> <br>需要说明的是,上面q个表格来自tokyocabinet的官Ҏ(gu)说明,?a >q里</a>。同Ӟ数据库文件中需要存放数据的地方Q用的都是端方式存放的,以下׃再就q点做说明了。从上面的表格可以看出,数据库文件头的尺ؓ256 bytes?br>在操作hash数据库的所有API中,都会用到一个对象类型ؓTCHDB的指针,该结构体中存攄信息包括了所有数据库文g头的内容Q所以每ơ在打开或者创Z个hash数据库的时候,都会数据库文g头信息读入到q个指针中(函数tchdbloadmetaQ?br><br>2Qbucket 数组<br>bucket array中的每个元素都是一个整敎ͼ按照使用的是32位还?4位系l,存放的也是32位或?4位的整数。这个数l存攄q个整数|是每次?key q行hash之后得到的hash值所对应的第一个元素在数据库文件中的偏U量?br><br>3Qfree pool数组<br>free pool数组中的每个元素定义l构体如下:<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;">typedef </span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> {                         </span><span style="color: #008000;">//</span><span style="color: #008000;"> type of structure for a free block</span><span style="color: #008000;"><br></span><span style="color: #000000;">  uint64_t off;                          </span><span style="color: #008000;">//</span><span style="color: #008000;"> offset of the block</span><span style="color: #008000;"><br></span><span style="color: #000000;">  uint32_t rsiz;                         </span><span style="color: #008000;">//</span><span style="color: #008000;"> size of the block</span><span style="color: #008000;"><br></span><span style="color: #000000;">} HDBFB; </span></div> <br>很明显,仅有两个成员Q一个存攄是在数据库文件中的偏U量Q一个则是该free block的尺寸。free pool数组用于保存那些被删除的记录信息Q以便于回收利用q些数据区,后箋会针对free pool相关的操作,API做一个详l的分析?br><br>4Qrecord数据?br>每个record数据区的l构如下表:<br> <table summary="record format"> <tbody> <tr> <td class="label">name</td> <td class="label">offset</td> <td class="label">length</td> <td class="label">feature</td> </tr> <tr> <td>magic number</td> <td class="number">0</td> <td class="number">1</td> <td>identification of record block. always 0xC8</td> </tr> <tr> <td>hash value</td> <td class="number">1</td> <td class="number">1</td> <td>the hash value to decide the path of the hash chain</td> </tr> <tr> <td>left chain</td> <td class="number">2</td> <td class="number">4</td> <td>the alignment quotient of the destination of the left chain</td> </tr> <tr> <td>right chain</td> <td class="number">6</td> <td class="number">4</td> <td>the alignment quotient of the destination of the right chain</td> </tr> <tr> <td>padding size</td> <td class="number">10</td> <td class="number">2</td> <td>the size of the padding</td> </tr> <tr> <td>key size</td> <td class="number">12</td> <td class="number">vary</td> <td>the size of the key</td> </tr> <tr> <td>value size</td> <td class="number">vary</td> <td class="number">vary</td> <td>the size of the value</td> </tr> <tr> <td>key</td> <td class="number">vary</td> <td class="number">vary</td> <td>the data of the key</td> </tr> <tr> <td>value</td> <td class="number">vary</td> <td class="number">vary</td> <td>the data of the value</td> </tr> <tr> <td>padding</td> <td class="number">vary</td> <td class="number">vary</td> <td>useless data</td> </tr> </tbody> </table> <br>当然Q上面这个结构只是该record被用时的结构图Q当某一record被删除时Q它的结构就变ؓQ?br> <table summary="free block format"> <tbody> <tr> <td class="label">name</td> <td class="label">offset</td> <td class="label">length</td> <td class="label">feature</td> </tr> <tr> <td>magic number</td> <td class="number">0</td> <td class="number">1</td> <td>identification of record block. always 0xB0</td> </tr> <tr> <td>block size</td> <td class="number">1</td> <td class="number">4</td> <td>size of the block</td> </tr> </tbody> </table>     <br>Ҏ(gu)两种情况Q首先是最开始的magic number是不同的Q当magic number?XB0也就是该record是已l被删除的free recordӞ那么紧跟着?个字节存攄是q个free record的尺寸,而record后面的部分可以忽略不计了?br><br>分析完了hash数据库文件的几个l成部分Q从最开始的数据库文件示意图中还看到Q从文g头到bucket arrayq一部分通过mmap映射到系l的׃n内存中,当然Q可以映的内容可能不止到这里,但是Q数据库文g?bucket arrayq两部分是一定要映射到共享内存中的,也就是说Qhash数据库中映射到共享内存中的内容上限没有限Ӟ但是下限是文件头+bucket array部分?br><br>同时Qfree pool也会通过malloc分配一个堆上的内存Q存攑ֈTCHDB的fbpool指针中?br><br>q几部分Q除了record zoneQ,通过不同的方式都分别的读取到内存中,目的是Z加快查找的速度Q后面会详细的进行说明?br><br><br> <br> <img src ="http://www.shnenglu.com/converse/aggbug/105317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2010-01-10 10:22 <a href="http://www.shnenglu.com/converse/archive/2010/01/10/105317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux内核V2.6.11学习W记(6)--中断处理http://www.shnenglu.com/converse/archive/2009/05/03/81773.html那谁那谁Sun, 03 May 2009 08:09:00 GMThttp://www.shnenglu.com/converse/archive/2009/05/03/81773.htmlhttp://www.shnenglu.com/converse/comments/81773.htmlhttp://www.shnenglu.com/converse/archive/2009/05/03/81773.html#Feedback1http://www.shnenglu.com/converse/comments/commentRss/81773.htmlhttp://www.shnenglu.com/converse/services/trackbacks/81773.html阅读全文

那谁 2009-05-03 16:09 发表评论
]]>
linux内核V2.6.11学习W记(5)--异常处理http://www.shnenglu.com/converse/archive/2009/04/29/81496.html那谁那谁Wed, 29 Apr 2009 13:45:00 GMThttp://www.shnenglu.com/converse/archive/2009/04/29/81496.htmlhttp://www.shnenglu.com/converse/comments/81496.htmlhttp://www.shnenglu.com/converse/archive/2009/04/29/81496.html#Feedback0http://www.shnenglu.com/converse/comments/commentRss/81496.htmlhttp://www.shnenglu.com/converse/services/trackbacks/81496.html阅读全文

那谁 2009-04-29 21:45 发表评论
]]>
linux内核V2.6.11学习W记(4)--中断与异常处理概q?/title><link>http://www.shnenglu.com/converse/archive/2009/04/28/81381.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Tue, 28 Apr 2009 15:28:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2009/04/28/81381.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/81381.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2009/04/28/81381.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/81381.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/81381.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.shnenglu.com/converse/archive/2009/04/28/81381.html'>阅读全文</a><img src ="http://www.shnenglu.com/converse/aggbug/81381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2009-04-28 23:28 <a href="http://www.shnenglu.com/converse/archive/2009/04/28/81381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux内核V2.6.11学习W记(3)--switch_to?/title><link>http://www.shnenglu.com/converse/archive/2009/04/19/80421.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Sun, 19 Apr 2009 02:16:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2009/04/19/80421.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/80421.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2009/04/19/80421.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/80421.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/80421.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.shnenglu.com/converse/archive/2009/04/19/80421.html'>阅读全文</a><img src ="http://www.shnenglu.com/converse/aggbug/80421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2009-04-19 10:16 <a href="http://www.shnenglu.com/converse/archive/2009/04/19/80421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux内核V2.6.11学习W记(2)--list和hlisthttp://www.shnenglu.com/converse/archive/2009/04/11/79572.html那谁那谁Sat, 11 Apr 2009 02:47:00 GMThttp://www.shnenglu.com/converse/archive/2009/04/11/79572.htmlhttp://www.shnenglu.com/converse/comments/79572.htmlhttp://www.shnenglu.com/converse/archive/2009/04/11/79572.html#Feedback8http://www.shnenglu.com/converse/comments/commentRss/79572.htmlhttp://www.shnenglu.com/converse/services/trackbacks/79572.html阅读全文

那谁 2009-04-11 10:47 发表评论
]]>
linux内核V2.6.11学习W记(1)--pid位图http://www.shnenglu.com/converse/archive/2009/04/10/79488.html那谁那谁Fri, 10 Apr 2009 04:57:00 GMThttp://www.shnenglu.com/converse/archive/2009/04/10/79488.htmlhttp://www.shnenglu.com/converse/comments/79488.htmlhttp://www.shnenglu.com/converse/archive/2009/04/10/79488.html#Feedback6http://www.shnenglu.com/converse/comments/commentRss/79488.htmlhttp://www.shnenglu.com/converse/services/trackbacks/79488.html阅读全文

那谁 2009-04-10 12:57 发表评论
]]>
ҹƵþþþһ| ɫۺϾþþþۺһ| þֻоƷþ| ˺ݺۺϾþ88| þ99Ʒ| AVһþ| þþþùƷ| ޾Ʒһþ| ҹƷþþþþ| þþƷƷapp| þۺ͵͵ɫ| ˾þþùۿëƬ| 99þѹƷػ| þþƷAV鶹վ| þþWWWѾƷ| 99ŷþþþƷѿ| þþƷŷպ99| ܻƺ۵վþmimiɫ | ƷVAþþþþþñ| ĻƷѾþ| 2022Ʒþþþ| Ļþ| þþƷӰѿ| һAvëƬþþƷ| Ʒ99þþþþլ| ƷŮٸaѾþ| ۺҹҹþ| þþƷѹۿ97| þ99Ʒŷ| þݺҹҹ96׽ | ޾Ʒһþ| aëƬþ| 99鶹þþùƷ| 97þۺϾƷþþۺ| 91ɫۺϾþ| þùƷ99þþþþ| þúݺݸ߳޾Ʒ| ݺݺɫۺϾþ | þþƷAV鶹վ| þþƷҹһ| þ޾ƷAV|