﻿<?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>P.Linux Laboratory &#187; 列式存储</title>
	<atom:link href="http://www.penglixun.com/tag/%e5%88%97%e5%bc%8f%e5%ad%98%e5%82%a8/feed" rel="self" type="application/rss+xml" />
	<link>http://www.penglixun.com</link>
	<description>MySQL DBA &#38; Linux SA</description>
	<lastBuildDate>Sun, 22 Jan 2012 16:34:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>列式数据库的简单分析</title>
		<link>http://www.penglixun.com/tech/database/column-oriented_dbms_analyse.html</link>
		<comments>http://www.penglixun.com/tech/database/column-oriented_dbms_analyse.html#comments</comments>
		<pubDate>Wed, 03 Feb 2010 14:04:03 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[DW]]></category>
		<category><![CDATA[列式存储]]></category>
		<category><![CDATA[数据仓库]]></category>
		<category><![CDATA[行式存储]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=944</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/column-oriented_dbms_analyse.html 这些天看数据仓库的内容，... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/database/column-oriented_dbms_analyse.html </p>
<p></span>这些天看数据仓库的内容，发现一个新内容——列式存储。曾经有想过把数据库行列转置作成索引，不过没有深想，没想到列式数据库已经开始发展起来了。<br />
首先看下WIKI上对列式数据库的解释：</p>
<blockquote><p>列式数据库是以列相关存储架构进行数据存储的数据库，主要适合与批量数据处理和即席查询。相对应的是行式数据库，数据以行相关的存储体系架构进行空间分配，主要适合与小批量的数据处理，常用于联机事务型数据处理。<br />
数据库以行、列的二维表的形式存储数据，但是却以一维字符串的方式存储，例如以下的一个表：<br />
EmpId     Lastname    Firstname    Salary<br />
1            Smith           Joe               40000<br />
2            Jones           Mary             50000<br />
3            Johnson       Cathy           44000<br />
这个简单的表包括员工代码(EmpId), 姓名字段(Lastname and Firstname)及工资(Salary).<br />
这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同，电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中，又操作系统写到内存或硬盘中。<br />
行式数据库把一行中的数据值串在一起存储起来，然后再存储下一行的数据，以此类推。<br />
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;<br />
列式数据库把一列中的数据值串在一起存储起来，然后再存储下一列的数据，以此类推。<br />
1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;<br />
这是一个简化的说法。</p></blockquote>
<p>昨天装了下两个基于MySQL的数据仓库，infindb和infobright，看了文档发现它们都是列式数据库，把40多M的数据导入infobright，没想到数据文件只有1M多，压缩比令我惊讶！<br />
然后测试了下选择某一列，在列上做计算，都比MyISAM和InnoDB要快，看了一些原理文档，就自己模拟了一下，写了个程序测试。<br />
从内存中读取效率很高，但是从磁盘中读取（假设行式数据库的索引在内存中）比行式数据库要慢（开始在Twitter上说比行式快是程序写错了），不过我觉得还是我设计上的问题，至少Infobright就比MyISAM/InnoDB快，列式应该也有其特殊的索引机制和缓存机制，例如每列分开存在不同的文件，这样文件指针转移会更快。<br />
2010-02-04补充：采用了多个文件指针后，列式存储明显加速，如果给每个列一个文件指针，效率会非常高，也可以肯定，如果每个列单独存储一个文件，效率还会提高。现在文件中列式表读取效率降低了4/5，接近行式表了。继续优化还能提高。</p>
<p><span id="more-944"></span></p>
<p>代码请展开：</p>

<div class="wp_codebox"><table><tr id="p9442"><td class="code" id="p944code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;fstream&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;memory&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;time.h&gt;</span>
<span style="color: #339900;">#include &lt;map&gt;</span>
&nbsp;
<span style="color: #339900;">#define MAXINT RAND_MAX</span>
<span style="color: #339900;">#define MAXROWS 1000000</span>
<span style="color: #339900;">#define MINVAL 1</span>
<span style="color: #339900;">#define MAXVAL 150000000</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*计时器*/</span>
<span style="color: #0000ff;">class</span> Timer <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span> <span style="color: #008080;">:</span>
    <span style="color: #666666;">//构造函数</span>
    Timer <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//析构函数</span>
    ~Timer <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//开始计时</span>
    <span style="color: #0000ff;">void</span> begin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//计时结束</span>
    <span style="color: #0000ff;">void</span> end<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//获取时间,ms</span>
    <span style="color: #0000ff;">double</span> get_time<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">private</span> <span style="color: #008080;">:</span>
    <span style="color: #0000ff;">clock_t</span> start, finish<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
Timer<span style="color: #008080;">::</span><span style="color: #007788;">Timer</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    start <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    finish <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
Timer<span style="color: #008080;">::</span>~Timer <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    start <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    finish <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Timer<span style="color: #008080;">::</span><span style="color: #007788;">begin</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    start <span style="color: #000080;">=</span> <span style="color: #0000dd;">clock</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Timer<span style="color: #008080;">::</span><span style="color: #007788;">end</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    finish <span style="color: #000080;">=</span> <span style="color: #0000dd;">clock</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> Timer<span style="color: #008080;">::</span><span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>finish<span style="color: #000040;">-</span>start<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000ff;">CLOCKS_PER_SEC</span><span style="color: #000040;">*</span><span style="color: #0000dd;">1000</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//计时器</span>
Timer timer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*记录各种结构表的空间占用*/</span>
<span style="color: #0000ff;">struct</span> Size <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">struct</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">struct</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">int</span> _static<span style="color: #008080;">;</span>
            <span style="color: #0000ff;">int</span> _dynamic<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span> col,row<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> mem,file<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> size<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*记录各种结构表的文件指针*/</span>
<span style="color: #0000ff;">struct</span> File <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">struct</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">struct</span> <span style="color: #008000;">&#123;</span>
            fstream _static<span style="color: #008080;">;</span>
            fstream _dynamic<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span> table,index<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> col,row<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> file<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*静态行式表结构*/</span>
<span style="color: #0000ff;">struct</span> StaticRowTable <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span>     id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span>    name<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span>     num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span>  score<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span>    flag<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> <span style="color: #000040;">*</span> static_row_table<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*静态行式表索引*/</span>
<span style="color: #0000ff;">struct</span> StaticRowTableIndex <span style="color: #008000;">&#123;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>    id<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>  name<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>    num<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> score<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">bool</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>   flag<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> static_row_table_index<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*静态列式表结构*/</span>
<span style="color: #0000ff;">struct</span> StaticColTable <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span><span style="color: #000040;">*</span>     id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span>     <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>name<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span><span style="color: #000040;">*</span>     num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span><span style="color: #000040;">*</span>  score<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span><span style="color: #000040;">*</span>    flag<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> static_col_table<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*动态行式表结构*/</span>
<span style="color: #0000ff;">struct</span> DynamicRowTable <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span>    id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span>    char_len<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span>   <span style="color: #000040;">*</span>name<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span>    num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> score<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span>   flag<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> <span style="color: #000040;">*</span> dynamic_row_table<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*动态行式表索引*/</span>
<span style="color: #0000ff;">struct</span> DynamicRowTableIndex <span style="color: #008000;">&#123;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>    id<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>  name<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>    num<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> score<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">bool</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>   flag<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> dynamic_row_table_index<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*动态列式表结构*/</span>
<span style="color: #0000ff;">struct</span> DynamicColTable <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span><span style="color: #000040;">*</span>    id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span><span style="color: #000040;">*</span>    char_len<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span><span style="color: #000040;">**</span>  name<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span><span style="color: #000040;">*</span>    num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span><span style="color: #000040;">*</span> score<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span><span style="color: #000040;">*</span>   flag<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> <span style="color: #000040;">*</span> dynamic_col_table<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*随机字符*/</span>
<span style="color: #0000ff;">char</span> randChar<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color:#800080;">26</span><span style="color: #000040;">+</span><span style="color: #FF0000;">'A'</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*随机字符串*/</span>
<span style="color: #0000ff;">void</span> randString<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> col<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> len<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>len<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        col<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> randChar<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*初始化表数据*/</span>
<span style="color: #0000ff;">void</span> init_StaticTable<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;+-----静态数据-----+&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">//分配空间</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;分配空间中......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    static_row_table <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> StaticRowTable<span style="color: #008000;">&#91;</span>MAXROWS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    static_col_table.<span style="color: #007788;">id</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#91;</span>MAXROWS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    static_col_table.<span style="color: #007788;">name</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span>MAXROWS<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    static_col_table.<span style="color: #007788;">num</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#91;</span>MAXROWS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    static_col_table.<span style="color: #007788;">score</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">double</span><span style="color: #008000;">&#91;</span>MAXROWS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    static_col_table.<span style="color: #007788;">flag</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">bool</span><span style="color: #008000;">&#91;</span>MAXROWS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;空间分配完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl
         <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;分配空间耗时: &quot;</span> 
         <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">//产生随机数据和索引</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;生成数据中......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        static_col_table.<span style="color: #007788;">id</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> 
        static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
        static_row_table_index.<span style="color: #007788;">id</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
        randString<span style="color: #008000;">&#40;</span>static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">name</span>, <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color:#800080;">20</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">strcpy</span><span style="color: #008000;">&#40;</span>static_col_table.<span style="color: #007788;">name</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">name</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        static_row_table_index.<span style="color: #007788;">name</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>static_col_table.<span style="color: #007788;">name</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
        static_col_table.<span style="color: #007788;">num</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span>
        static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">num</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        static_row_table_index.<span style="color: #007788;">num</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">num</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
        static_col_table.<span style="color: #007788;">score</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> 
        static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">score</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        static_row_table_index.<span style="color: #007788;">score</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">score</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
        static_col_table.<span style="color: #007788;">flag</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> 
        static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">flag</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span><span style="color:#800080;">2</span><span style="color: #008080;">;</span>
        static_row_table_index.<span style="color: #007788;">flag</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">bool</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">flag</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;数据生成完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;生成数据耗时: &quot;</span> 
         <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
&nbsp;
    <span style="color: #666666;">//初始化文件指针</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">open</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;row_table_static.dat&quot;</span>, ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">out</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    file.<span style="color: #007788;">row</span>.<span style="color: #007788;">index</span>._static.<span style="color: #007788;">open</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;row_index_static.dat&quot;</span>, ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">out</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">open</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;col_table_static.dat&quot;</span>, ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">out</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> <span style="color: #000040;">!</span>file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static <span style="color: #000040;">||</span>
        <span style="color: #000040;">!</span>file.<span style="color: #007788;">row</span>.<span style="color: #007788;">index</span>._static <span style="color: #000040;">||</span>
        <span style="color: #000040;">!</span>file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;打开文件失败&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;正在将数据写入文件......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>static_row_table<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>StaticRowTable<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">row</span>.<span style="color: #007788;">index</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>static_row_table_index<span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>StaticRowTableIndex<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    file.<span style="color: #007788;">row</span>.<span style="color: #007788;">index</span>._static.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>static_col_table.<span style="color: #007788;">id</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>static_col_table.<span style="color: #007788;">name</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>static_col_table.<span style="color: #007788;">num</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>static_col_table.<span style="color: #007788;">score</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>static_col_table.<span style="color: #007788;">flag</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">bool</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;数据写入完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;写入数据耗时: &quot;</span> 
         <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">//计算总占用空间</span>
    size.<span style="color: #007788;">mem</span>.<span style="color: #007788;">row</span>._static <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>static_row_table<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>MAXROWS
                    <span style="color: #000040;">+</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>static_row_table_index<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>MAXROWS<span style="color: #008080;">;</span>
    size.<span style="color: #007788;">mem</span>.<span style="color: #007788;">col</span>._static <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #000040;">+</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">bool</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #000040;">+</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>MAXROWS<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;静态行式存储耗费空间: &quot;</span> 
         <span style="color: #000080;">&lt;&lt;</span> size.<span style="color: #007788;">mem</span>.<span style="color: #007788;">row</span>._static<span style="color: #000040;">/</span><span style="color: #0000dd;">1024</span><span style="color: #000040;">/</span><span style="color: #0000dd;">1024</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;M&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;静态列式存储耗费空间: &quot;</span> 
         <span style="color: #000080;">&lt;&lt;</span> size.<span style="color: #007788;">mem</span>.<span style="color: #007788;">col</span>._static<span style="color: #000040;">/</span><span style="color: #0000dd;">1024</span><span style="color: #000040;">/</span><span style="color: #0000dd;">1024</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;M&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init_DynamicTable<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;+-----动态数据-----+&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> time1, time2<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;======生成数据======&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    init_StaticTable<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    init_DynamicTable<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*
SELECT name
FROM table 
WHERE num BETWEEN MINVAL AND MAXVAL;
*/</span>
&nbsp;
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*测试内存中静态行存储*/</span>
<span style="color: #0000ff;">int</span> Mem_Static_testRow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> id<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it,itlow,itup<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;正在测试内存中读取行式静态表......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    itlow <span style="color: #000080;">=</span> static_row_table_index.<span style="color: #007788;">num</span>.<span style="color: #007788;">lower_bound</span> <span style="color: #008000;">&#40;</span>MINVAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    itup <span style="color: #000080;">=</span> static_row_table_index.<span style="color: #007788;">num</span>.<span style="color: #007788;">upper_bound</span> <span style="color: #008000;">&#40;</span>MAXVAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>it<span style="color: #000080;">=</span>itlow<span style="color: #008080;">;</span> it<span style="color: #000040;">!</span><span style="color: #000080;">=</span>itup<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        id <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>it<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">second</span><span style="color: #008080;">;</span>
        StaticRowTable row <span style="color: #000080;">=</span> static_row_table<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">//结果</span>
        <span style="color: #666666;">//cout &lt;&lt; row.id;</span>
        <span style="color: #ff0000; font-style: italic;">/*cout &lt;&lt; '\t' &lt;&lt; */</span>row.<span style="color: #007788;">name</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">//cout &lt;&lt; '\t' &lt;&lt; row.num;</span>
        <span style="color: #666666;">//cout &lt;&lt; endl;</span>
        <span style="color: #666666;">//计数</span>
        <span style="color: #000040;">++</span>count<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;内存中行式静态表读取测试完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;读取耗时:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> count<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*测试磁盘中静态行存储*/</span>
<span style="color: #0000ff;">int</span> File_Static_testRow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>name<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> pos<span style="color: #008080;">;</span>
    StaticRowTable row<span style="color: #008080;">;</span>
    multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it,itlow,itup<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">//初始化文件指针</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;正在测试磁盘中读取行式静态表......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">open</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;row_table_static.dat&quot;</span>, ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">in</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//file.row.index._static.open(&quot;row_index_static.dat&quot;, ios::binary | ios::in);</span>
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;打开文件失败&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #666666;">//假设索引在内存中</span>
    itlow <span style="color: #000080;">=</span> static_row_table_index.<span style="color: #007788;">num</span>.<span style="color: #007788;">lower_bound</span> <span style="color: #008000;">&#40;</span>MINVAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    itup <span style="color: #000080;">=</span> static_row_table_index.<span style="color: #007788;">num</span>.<span style="color: #007788;">upper_bound</span> <span style="color: #008000;">&#40;</span>MAXVAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>it<span style="color: #000080;">=</span>itlow<span style="color: #008080;">;</span> it<span style="color: #000040;">!</span><span style="color: #000080;">=</span>itup<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        id <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>it<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">second</span><span style="color: #008080;">;</span>
        pos <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>StaticRowTable<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>id<span style="color: #008080;">;</span>
        file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">seekg</span><span style="color: #008000;">&#40;</span>pos<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>row<span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>StaticRowTable<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">//结果</span>
        <span style="color: #666666;">//cout &lt;&lt; row.id;</span>
        <span style="color: #ff0000; font-style: italic;">/*cout &lt;&lt; '\t' &lt;&lt; */</span>row.<span style="color: #007788;">name</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">//cout &lt;&lt; '\t' &lt;&lt; row.num;</span>
        <span style="color: #666666;">//cout &lt;&lt; endl;</span>
        <span style="color: #666666;">//计数</span>
        <span style="color: #000040;">++</span>count<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    file.<span style="color: #007788;">row</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//file.row.index._static.close();</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;磁盘中行式静态表读取测试完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;读取耗时:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> count<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*测试磁盘中静态列存储*/</span>
<span style="color: #0000ff;">int</span> Mem_Static_testCol<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>name<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;正在测试内存中列式静态表读取......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">int</span> num <span style="color: #000080;">=</span> static_col_table.<span style="color: #007788;">num</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>num<span style="color: #000080;">&gt;</span>MINVAL and num<span style="color: #000080;">&lt;</span>MAXVAL<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #666666;">//结果</span>
            <span style="color: #666666;">//cout &lt;&lt; i;</span>
            <span style="color: #ff0000; font-style: italic;">/*cout &lt;&lt; '\t' &lt;&lt; */</span>static_col_table.<span style="color: #007788;">name</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            <span style="color: #666666;">//cout &lt;&lt; '\t' &lt;&lt; static_col_table.num[i];</span>
            <span style="color: #666666;">//cout &lt;&lt; endl;</span>
            <span style="color: #666666;">//计数</span>
            <span style="color: #000040;">++</span>count<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;内存中列式静态存储表读取测试完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;读取耗时:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> count<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*测试磁盘中静态列存储*/</span>
<span style="color: #0000ff;">int</span> File_Static_testCol<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>name <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> pos_num<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> pos_name<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> pos<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;正在测试磁盘中列式静态表读取......&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">open</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;col_table_static.dat&quot;</span>, ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">in</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    fstream <span style="color: #0000dd;">tmpfile</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;col_table_static.dat&quot;</span>, ios<span style="color: #008080;">::</span><span style="color: #007788;">binary</span> <span style="color: #000040;">|</span> ios<span style="color: #008080;">::</span><span style="color: #007788;">in</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static <span style="color: #000040;">||</span> <span style="color: #000040;">!</span><span style="color: #0000dd;">tmpfile</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;打开文件失败&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    pos_name <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>MAXROWS<span style="color: #008080;">;</span>
    pos_num <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>
            <span style="color: #000040;">+</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>MAXROWS<span style="color: #008080;">;</span>
    file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">seekg</span><span style="color: #008000;">&#40;</span>pos_num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>MAXROWS<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>num<span style="color: #008000;">&#41;</span>,
                                    <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>num<span style="color: #000080;">&gt;</span>MINVAL and num<span style="color: #000080;">&lt;</span>MAXVAL<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #666666;">//结果</span>
            id <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
            <span style="color: #666666;">//cout &lt;&lt; id;</span>
            pos <span style="color: #000080;">=</span> pos_name<span style="color: #000040;">+</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>id<span style="color: #008080;">;</span>
            <span style="color: #0000dd;">tmpfile</span>.<span style="color: #007788;">seekg</span><span style="color: #008000;">&#40;</span>pos<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000dd;">tmpfile</span>.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>name<span style="color: #008000;">&#41;</span>,
                        <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #ff0000; font-style: italic;">/*cout &lt;&lt; '\t' &lt;&lt; */</span>name<span style="color: #008080;">;</span>
            <span style="color: #666666;">//cout &lt;&lt; '\t' &lt;&lt; num;</span>
            <span style="color: #666666;">//cout &lt;&lt; endl;</span>
            <span style="color: #666666;">//计数</span>
            <span style="color: #000040;">++</span>count<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    file.<span style="color: #007788;">col</span>.<span style="color: #007788;">table</span>._static.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    timer.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> timer.<span style="color: #007788;">get_time</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;磁盘中列式静态存储表读取测试完毕!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;读取耗时:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">time</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; ms&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> count<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> test<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> count1, count2, count3, count4<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;=====内存存取测试=====&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;+----静态表测试中----+&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;*行式存储*&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #666666;">//内存中静态行式存储表</span>
    count1 <span style="color: #000080;">=</span> Mem_Static_testRow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//内存中静态列式存储表</span>
    count2 <span style="color: #000080;">=</span> Mem_Static_testCol<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;*列式存储*&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #666666;">//磁盘中静态行式存储表</span>
    count3 <span style="color: #000080;">=</span> File_Static_testRow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//磁盘中静态行式存储表</span>
    count4 <span style="color: #000080;">=</span> File_Static_testCol<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>count1<span style="color: #000080;">==</span>count2 and count2<span style="color: #000080;">==</span>count3 and count3<span style="color: #000080;">==</span>count4<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;共匹配:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> count1 <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; 行&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;错误:每次匹配行数不同&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    test<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;All OK!&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>2010-02-04测试结果：<br />
======生成数据======<br />
+&#8212;&#8211;静态数据&#8212;&#8211;+<br />
分配空间中&#8230;&#8230;<br />
空间分配完毕!<br />
分配空间耗时: 0ms<br />
生成数据中&#8230;&#8230;<br />
数据生成完毕!<br />
生成数据耗时: 4180ms<br />
正在将数据写入文件&#8230;&#8230;<br />
数据写入完毕!<br />
写入数据耗时: 2480ms<br />
静态行式存储耗费空间: 495M<br />
静态列式存储耗费空间: 259M<br />
+&#8212;&#8211;动态数据&#8212;&#8211;+<br />
=====内存存取测试=====<br />
+&#8212;-静态表测试中&#8212;-+<br />
*行式存储*<br />
正在测试内存中读取行式静态表&#8230;&#8230;<br />
内存中行式静态表读取测试完毕!<br />
读取耗时:10 ms<br />
正在测试内存中列式静态表读取&#8230;&#8230;<br />
内存中列式静态存储表读取测试完毕!<br />
读取耗时:0 ms<br />
*列式存储*<br />
正在测试磁盘中读取行式静态表&#8230;&#8230;<br />
磁盘中行式静态表读取测试完毕!<br />
读取耗时:190 ms<br />
正在测试磁盘中列式静态表读取&#8230;&#8230;<br />
磁盘中列式静态存储表读取测试完毕!<br />
读取耗时:210 ms<br />
共匹配:69650 行<br />
All OK!</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年02月2日 -- <a href="http://www.penglixun.com/tech/database/data_warehouse_concept.html" title="数据仓库相关概念">数据仓库相关概念</a> (0)</li><li>2010年10月30日 -- <a href="http://www.penglixun.com/tech/database/static_compile_mysql_with_tcmalloc.html" title="静态编译TCMalloc到MySQL">静态编译TCMalloc到MySQL</a> (6)</li><li>2010年06月22日 -- <a href="http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_cache_buffer_lock.html" title="数据库算法与数据结构——Cache&#038;Buffer&#038;Lock">数据库算法与数据结构——Cache&#038;Buffer&#038;Lock</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/column-oriented_dbms_analyse.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

