﻿<?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/%e6%95%b0%e6%8d%ae%e5%ba%93/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>静态编译TCMalloc到MySQL</title>
		<link>http://www.penglixun.com/tech/database/static_compile_mysql_with_tcmalloc.html</link>
		<comments>http://www.penglixun.com/tech/database/static_compile_mysql_with_tcmalloc.html#comments</comments>
		<pubDate>Sat, 30 Oct 2010 14:59:20 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[libtcmalloc]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[tcmalloc]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=1172</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/static_compile_mysql_with_tcmalloc.html Linux下的malloc函数性能问... ]]></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/static_compile_mysql_with_tcmalloc.html </p>
<p></span>Linux下的malloc函数性能问题，想必大部分在Linux下写C的人都深有感受，纷纷利用内存池来改进内存分配效率。<br />
Google开源的tcmalloc则改进了malloc的一些效率问题，在大量malloc和free时，操作系统的内存曲线明显比Linux下malloc函数要平稳，在大并发情况下，提升程序稳定性和性能。<br />
一般网上都是把tcmalloc动态库加到mysqld_safe中启动，但是我们的MySQL都是静态编译的，这时候动态加载是否生效呢？所以还是静态编译入MySQL好。</p>
<p>编译tcmalloc先要编译libunwind：</p>
<blockquote><p>
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz<br />
tar zxvf libunwind-0.99.tar.gz</p>
<p>CHOST=”x86_64-pc-linux-gnu” \<br />
CFLAGS=” -O3 -fPIC \<br />
-fomit-frame-pointer \<br />
-pipe \<br />
-march=nocona \<br />
-mfpmath=sse \<br />
-m128bit-long-double \<br />
-mmmx \<br />
-msse \<br />
-msse2 \<br />
-maccumulate-outgoing-args \<br />
-m64 \<br />
-ftree-loop-linear \<br />
-fprefetch-loop-arrays \<br />
-freg-struct-return \<br />
-fgcse-sm \<br />
-fgcse-las \<br />
-frename-registers \<br />
-fforce-addr \<br />
-fivopts \<br />
-ftree-vectorize \<br />
-ftracer \<br />
-frename-registers \<br />
-minline-all-stringops \<br />
-fbranch-target-load-optimize2&#8243; \<br />
CXXFLAGS=”${CFLAGS}” \<br />
./configure &#038;&#038; make &#038;&#038; make install
</p></blockquote>
<p>然后编译tcmalloc：</p>
<blockquote><p>
tar zxvf google-perftools-1.6.tar.gz</p>
<p>CHOST=”x86_64-pc-linux-gnu” \<br />
CFLAGS=” -O3 \<br />
-fomit-frame-pointer \<br />
-pipe \<br />
-march=nocona \<br />
-mfpmath=sse \<br />
-m128bit-long-double \<br />
-mmmx \<br />
-msse \<br />
-msse2 \<br />
-maccumulate-outgoing-args \<br />
-m64 \<br />
-ftree-loop-linear \<br />
-fprefetch-loop-arrays \<br />
-freg-struct-return \<br />
-fgcse-sm \<br />
-fgcse-las \<br />
-frename-registers \<br />
-fforce-addr \<br />
-fivopts \<br />
-ftree-vectorize \<br />
-ftracer \<br />
-frename-registers \<br />
-minline-all-stringops \<br />
-fbranch-target-load-optimize2&#8243; \<br />
CXXFLAGS=”${CFLAGS}” \<br />
./configure &#038;&#038; make &#038;&#038; make install
</p></blockquote>
<p>记得要把libtammloc加入系统路径，否则编译MySQL时找不到：</p>
<blockquote><p>
echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf<br />
/sbin/ldconfig
</p></blockquote>
<p>最后就是编译MySQL了：</p>
<blockquote><p>
CXX=gcc \<br />
CHOST=”x86_64-pc-linux-gnu” \<br />
CFLAGS=” -O3 \<br />
-fomit-frame-pointer \<br />
-pipe \<br />
-march=nocona \<br />
-mfpmath=sse \<br />
-m128bit-long-double \<br />
-mmmx \<br />
-msse \<br />
-msse2 \<br />
-maccumulate-outgoing-args \<br />
-m64 \<br />
-ftree-loop-linear \<br />
-fprefetch-loop-arrays \<br />
-freg-struct-return \<br />
-fgcse-sm \<br />
-fgcse-las \<br />
-frename-registers \<br />
-fforce-addr \<br />
-fivopts \<br />
-ftree-vectorize \<br />
-ftracer \<br />
-frename-registers \<br />
-minline-all-stringops \<br />
-felide-constructors \<br />
-fno-exceptions \<br />
-fno-rtti \<br />
-fbranch-target-load-optimize2&#8243; \<br />
CXXFLAGS=”${CFLAGS}” \<br />
./configure &#8211;prefix=/usr/alibaba/install/mysql-ent-custom-5.1.49sp1 \<br />
&#8211;with-server-suffix=-alibaba-edition \<br />
&#8211;with-mysqld-user=mysql \<br />
&#8211;with-plugins=partition,blackhole,csv,heap,innobase,myisam,myisammrg \<br />
&#8211;with-charset=utf8 \<br />
&#8211;with-collation=utf8_general_ci \<br />
&#8211;with-extra-charsets=gbk,gb2312,utf8,ascii \<br />
&#8211;with-big-tables \<br />
&#8211;with-fast-mutexes \<br />
&#8211;with-zlib-dir=bundled \<br />
&#8211;enable-assembler \<br />
&#8211;enable-profiling \<br />
&#8211;enable-local-infile \<br />
&#8211;enable-thread-safe-client \<br />
&#8211;with-readline \<br />
&#8211;with-pthread \<br />
&#8211;with-embedded-server \<br />
&#8211;with-client-ldflags=-all-static \<br />
&#8211;with-mysqld-ldflags=-all-static \<br />
<strong>&#8211;with-mysqld-ldflags=-ltcmalloc \</strong><br />
&#8211;without-query-cache \<br />
&#8211;without-geometry \<br />
&#8211;without-debug \<br />
&#8211;without-ndb-debug<br />
make &#038;&#038; make install
</p></blockquote>
<p>经过试用，大并发下内存分配和释放曲线都比Linux原生的平稳。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年09月29日 -- <a href="http://www.penglixun.com/tech/database/opt_mysql_using_tcmalloc.html" title="使用tcmalloc优化MySQL">使用tcmalloc优化MySQL</a> (0)</li><li>2009年12月8日 -- <a href="http://www.penglixun.com/tech/database/database_schema_design_traning_2009_12.html" title="今天的数据库设计培训">今天的数据库设计培训</a> (4)</li><li>2012年01月23日 -- <a href="http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html" title="一个InnoDB性能超过Oracle的调优Case">一个InnoDB性能超过Oracle的调优Case</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/static_compile_mysql_with_tcmalloc.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>数据库算法与数据结构——Cache&amp;Buffer&amp;Lock</title>
		<link>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_cache_buffer_lock.html</link>
		<comments>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_cache_buffer_lock.html#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:40:06 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[Buffer]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Lock]]></category>
		<category><![CDATA[数据结构]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=1137</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_cache_buffer_lock.html Database.Ca... ]]></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/database_algorithm_and_data_structure_cache_buffer_lock.html </p>
<p></span>
<div style="width:425px" id="__ss_4574492"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/plinux/databasecachebufferlock" title="Database.Cache&amp;Buffer&amp;Lock">Database.Cache&amp;Buffer&amp;Lock</a></strong><object id="__sse4574492" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=03-cachebufferlock-100622092931-phpapp02&#038;stripped_title=databasecachebufferlock" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4574492" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=03-cachebufferlock-100622092931-phpapp02&#038;stripped_title=databasecachebufferlock" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/plinux">Lixun Peng</a>.</div>
</div><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年12月14日 -- <a href="http://www.penglixun.com/tech/system/buffer_and_cache_diff.html" title="Buffer与Cache">Buffer与Cache</a> (1)</li><li>2009年10月29日 -- <a href="http://www.penglixun.com/tech/system/the_diffrents_of_page_cache_and_buffer_cache.html" title="Page Cache和Buffer Cache的区别">Page Cache和Buffer Cache的区别</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></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_cache_buffer_lock.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>数据库算法与数据结构系列——排序相关</title>
		<link>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_sort.html</link>
		<comments>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_sort.html#comments</comments>
		<pubDate>Sun, 09 May 2010 17:05:42 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Data Structure]]></category>
		<category><![CDATA[Sort]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=1108</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_sort.html DB_Algorithm_and_D... ]]></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/database_algorithm_and_data_structure_about_sort.html </p>
<p></span>
<div style="width:425px" id="__ss_4028185"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/plinux/dbalgorithmanddatastructureaboutsort" title="DB_Algorithm_and_Data_Structure_About_Sort ">DB_Algorithm_and_Data_Structure_About_Sort </a></strong><object id="__sse4028185" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=02-100509115355-phpapp02&#038;stripped_title=dbalgorithmanddatastructureaboutsort" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4028185" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=02-100509115355-phpapp02&#038;stripped_title=dbalgorithmanddatastructureaboutsort" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/plinux">Lixun Peng</a>.</div>
</div><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年04月10日 -- <a href="http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_btree.html" title="数据库算法与数据结构系列——B树相关">数据库算法与数据结构系列——B树相关</a> (6)</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年07月5日 -- <a href="http://www.penglixun.com/tech/program/algorithm_power.html" title="李开复——算法的力量">李开复——算法的力量</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_sort.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL的规则系统</title>
		<link>http://www.penglixun.com/tech/database/postgresql_rule_system.html</link>
		<comments>http://www.penglixun.com/tech/database/postgresql_rule_system.html#comments</comments>
		<pubDate>Sun, 11 Apr 2010 08:39:09 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Rule]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=1100</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/postgresql_rule_system.html PostgreSQL提供了一种叫做规则（Rule... ]]></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/postgresql_rule_system.html </p>
<p></span>PostgreSQL提供了一种叫做规则（Rule）的机制，来实现一些与触发器不同的更加自定义的功能。规则系统介于查询编译器和执行优化器之间，根据规则及修改查询。</p>
<p>基本语法：</p>

<div class="wp_codebox"><table><tr id="p11005"><td class="code" id="p1100code5"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> RULE 规则名 <span style="color: #993333; font-weight: bold;">AS</span>
    <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#123;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">|</span> <span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #66cc66;">|</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #66cc66;">|</span> <span style="color: #993333; font-weight: bold;">DELETE</span><span style="color: #66cc66;">&#125;</span>
    <span style="color: #993333; font-weight: bold;">TO</span> 表名 <span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">WHERE</span> 规则条件<span style="color: #66cc66;">&#93;</span>
    DO <span style="color: #66cc66;">&#91;</span>INSTEAD<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#123;</span>NOTHING <span style="color: #66cc66;">|</span> 命令 <span style="color: #66cc66;">|</span> <span style="color: #66cc66;">&#40;</span>命令<span style="color: #66cc66;">,</span> 命令<span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>PostgreSQL中的视图实际上就是通过RULE来实现的。</p>
<p>例如建立一个视图:</p>

<div class="wp_codebox"><table><tr id="p11006"><td class="code" id="p1100code6"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">VIEW</span> view_1 <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> table_1;</pre></td></tr></table></div>

<p>PostgreSQL实际将这个语句翻译为规则：</p>

<div class="wp_codebox"><table><tr id="p11007"><td class="code" id="p1100code7"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> table_view_1 <span style="color: #66cc66;">&#40;</span>涉及的列名<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> RULE <span style="color: #993333; font-weight: bold;">return</span> <span style="color: #993333; font-weight: bold;">AS</span> 
    <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #993333; font-weight: bold;">TO</span> table_view_1 DO INSTEAD 
    <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> table_1;</pre></td></tr></table></div>

<p>这样在查询view_1视图时，PostgreSQL实际上把它转换为对隐含的表table_view_1的查询。</p>
<p>在仅仅需要查询的时候，CREATE VIEW是更合适的语法，但是这这样建立的视图是不能做修改操作的，但是通过规则是可以做到的。</p>
<p>例如我们要更新view_1视图：</p>

<div class="wp_codebox"><table><tr id="p11008"><td class="code" id="p1100code8"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> table_view_1 <span style="color: #66cc66;">&#40;</span>涉及的列名<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> RULE update_view_1 <span style="color: #993333; font-weight: bold;">AS</span> 
    <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #993333; font-weight: bold;">TO</span> table_view_1
    DO <span style="color: #993333; font-weight: bold;">UPDATE</span> table_1 <span style="color: #993333; font-weight: bold;">SET</span> col_1 <span style="color: #66cc66;">=</span> new<span style="color: #66cc66;">.</span>col_1
       <span style="color: #993333; font-weight: bold;">WHERE</span> col_2 <span style="color: #66cc66;">=</span> new<span style="color: #66cc66;">.</span>col_2;</pre></td></tr></table></div>

<p>有了这样的规则，我们执行UPDATE view_1 SET col_1=x WHERE　col_2=y;的时候，实际上就更新了table_1，这样就实现了更新视图。对于多表的视图，也可以这样操作。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年12月27日 -- <a href="http://www.penglixun.com/tech/database/mysql-vs-postgresql-part-1-table-organization.html" title="PostgreSQL和MySQL的对比，第1部分：表组织">PostgreSQL和MySQL的对比，第1部分：表组织</a> (1)</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/postgresql_rule_system.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数据库算法与数据结构系列——B树相关</title>
		<link>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_btree.html</link>
		<comments>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_btree.html#comments</comments>
		<pubDate>Sat, 10 Apr 2010 10:16:37 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[BTree]]></category>
		<category><![CDATA[B树]]></category>
		<category><![CDATA[Data Structure]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=1099</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_btree.html DB_Algorithm_and_... ]]></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/database_algorithm_and_data_structure_about_btree.html </p>
<p></span>
<div style="width:425px" id="__ss_3681519"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/plinux/b-3681519" title="DB_Algorithm_and_Data_Structure_About_BTree">DB_Algorithm_and_Data_Structure_About_BTree</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=01-b-100410043613-phpapp02&#038;stripped_title=b-3681519" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=01-b-100410043613-phpapp02&#038;stripped_title=b-3681519" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/plinux">Lixun Peng</a>.</div>
</div>
<p>后续还会有排序相关，缓存相关，锁相关等内容。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年05月10日 -- <a href="http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_sort.html" title="数据库算法与数据结构系列——排序相关">数据库算法与数据结构系列——排序相关</a> (0)</li><li>2010年06月14日 -- <a href="http://www.penglixun.com/tech/program/b_plus_tree_program.html" title="B+树实现程序">B+树实现程序</a> (2)</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></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_btree.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>数据库的拆分与合并</title>
		<link>http://www.penglixun.com/tech/database/split_and_merge_database.html</link>
		<comments>http://www.penglixun.com/tech/database/split_and_merge_database.html#comments</comments>
		<pubDate>Tue, 09 Mar 2010 15:24:15 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[合并]]></category>
		<category><![CDATA[拆分]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/?p=1044</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/split_and_merge_database.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/split_and_merge_database.html </p>
<p></span>数据库每天都承受着数据量的增长，慢慢的我们发现，对数据库得访问变得非常慢了，这个时候，不外乎两种做法：一是增加单机的配置，升CPU升内存升硬盘；二是“脑裂”，把数据库拆成多份分开存放。<br />
第二个思路必然是最终的方案，因为无论如何单机的承受能力是有限的，业务量的增长必然最终还是要走第二条路。<br />
其实拆分，并不是一个难事，按主键水平拆分，按列垂直拆分，操作上都难，最难的问题是发生在合并的时候，尤其是需要排序的时候（数据库的GROUP/DISTINCT也是先排序做的），合并会变得很麻烦。<br />
一个很糟糕的办法是，设置一台排序专用的机器，访问数据库通过这台机器，发现要排序了就在本地排序，把结果转发给客户端。并发量一大，这台排序用的机器就悲剧了。<br />
第二个方法是，我们希望我们从各个分库中拿出的数据，本身就是按我们所要的方式排序的，数据路由只要组装数据即可，不需要再次排序。<br />
这个如何实现呢，来举个例子，假设我们有个社区系统，有一张用户表U(U_ID,Info,Date)三个字段，分别是主键、信息、注册时间。有一张关系表R(U_ID_1,U_ID_2)，表示U_ID_1和U_ID_2是朋友。我们经常有这样的需求，想知道某个人有哪些朋友。<br />
假设A和B是朋友，我们就在R表插入2条记录R(A,B),(B,A)，为什么要两条呢，数据冗余啦！不错，就是要冗余，冗余可以让后面的工作很Easy。<br />
现在数据量大的惊人，要拆表！<br />
假设业务需求如下：<br />
1. 用户的U.Info查询很少，但是这个部分很长。<br />
2. 经常用U.Date经常被用来排序。<br />
3. 经常要知道某个人有哪些好友。<br />
4. 凡是显示用户都按注册先后排序。<br />
<span id="more-1044"></span></p>
<p>那么怎么拆捏，首先第一个需求，Info查询少，实际中这部分可能包含VARCHAR、TEXT等文本字段，最好需要把它们拆分出去，单独成表，可以提高效率，因为它们不常用。U被拆分为U(U_ID,Date)，U_Info(U_ID,Info)，U_Date(U_ID,Date)。为什么这样拆分？Date不是冗余了嘛，还是为了效率，制造冗余。<br />
然后表怎么拆分呢，当然水平拆分，按ID？那要按Date排序的时候，就悲剧了，所以可以这么分：<br />
U表按Date分区，U_ID建立索引；U_Info/U_Date表按U_ID分区。<br />
这样分区什么好处？为了第2和4个需求，知道了要显示的用户ID列表，到U_Date去拿Date，然后到U表去访问，因为有拆分，所以到所需的时间范围所在的实例去读出新的ID序列，这样拿到的ID就是有序的，原来的ID可以抛弃了，用新的ID序列去拿可能需要的Info，这样取出的数据就是有序的。<br />
然后R表怎么拆呢，很简单，按U_ID_1或者U_ID_2拆都可以，为什么？因为制造了冗余，两边都是对称的，从哪边取都能获得一个人的全部好友，所以就没关系了。<br />
这样还是有一点不方便，拆分可能扩容，怎么办，不能每次都改程序吧？这好办建立1个分区路由表，记录下所有的分区信息，这样查询前先查分区表，再去相应的实例上取数据。</p>
<p>于是得到Schema的设计如下图：<br />
<a href="http://www.flickr.com/photos/penglixun/4420199158/" title="Flickr 上 P.Linux 的 数据库拆分"><img src="http://farm3.static.flickr.com/2738/4420199158_71bff80c69_o.png" width="598" height="453" alt="数据库拆分" /></a></p>
<p>当需要查询A用户的全部好友并且显示列表，再获取第一个好友的详细信息，我们就这么做：<br />
1. 从Route路由表查找A用户所在实例名：SELECT instance FROM Route WHERE Start_ID >= A AND End_ID <=A AND Table = 'R'。<br />
2. 拿到了Instance，就连接到相应的实例去：SELECT U_ID_2 FROM R WHERE U_ID_1 = 'A'。<br />
3. 根据拿到的U_ID，再查所在的Instance，：ELECT instance FROM Route WHERE Start_ID >= u_id_2 AND End_ID <=u_id_2 AND Table = 'U_Date'。<br />
4. 根据拿到的Instance，连接上去，去查U.Date：SELECT Date FROM R WHERE U_ID in (u_id_2)。<br />
5. 有了U.Date，就可以到U去重新查询排序好的ID：SELECT U_ID FROM U WHERE Date in (date)；<br />
6. 然后拿列表中的第一个ID，去取U.Info，查Instance：SELECT instance FROM Route WHERE Start_ID >= u_id AND End_ID <=u_id AND Table = &#8216;U_Info&#8217;。<br />
7. 根据拿到的Instance，连上数据库去取Info：SELECT Info FROM U_Info WHERE U_ID = u_id；<br />
所有任务完成，没有任何的排序产生。</p>
<p>这样大费周折值得吗，我觉得值得，当数据量大的惊人的时候，不可能在中间节点排序，只能是取出的数据就要有序，那么这种拆分思想，就是可以避免排序的。<br />
有了思路，我会自己做一个小实验验证我的方法可行性和效率。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><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><li>2010年05月10日 -- <a href="http://www.penglixun.com/tech/database/database_algorithm_and_data_structure_about_sort.html" title="数据库算法与数据结构系列——排序相关">数据库算法与数据结构系列——排序相关</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/split_and_merge_database.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<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="p94410"><td class="code" id="p944code10"><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>
		<item>
		<title>今天的数据库设计培训</title>
		<link>http://www.penglixun.com/tech/database/database_schema_design_traning_2009_12.html</link>
		<comments>http://www.penglixun.com/tech/database/database_schema_design_traning_2009_12.html#comments</comments>
		<pubDate>Tue, 08 Dec 2009 06:07:03 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[培训]]></category>

		<guid isPermaLink="false">http://blog.penglixun.com/?p=593</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/database_schema_design_traning_2009_12.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/database_schema_design_traning_2009_12.html </p>
<p></span>系统由每一个细节组成，我喜欢这句话。<br />
欢迎大牛拍砖，指出错误和不妥之处。</p>
Note: There is a file embedded within this post, please visit this post to download the file.<h2  class="related_post_title">类似的文章</h2><ul class="related_post"><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>2012年01月23日 -- <a href="http://www.penglixun.com/tech/database/case_about_innodb_faster_than_oracle.html" title="一个InnoDB性能超过Oracle的调优Case">一个InnoDB性能超过Oracle的调优Case</a> (1)</li><li>2011年12月23日 -- <a href="http://www.penglixun.com/tech/database/server_kill_idle_transaction.html" title="在Server层实现Kill Idle Transaction">在Server层实现Kill Idle Transaction</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/database_schema_design_traning_2009_12.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>关于VS2008与一些数据源配置的问题</title>
		<link>http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html</link>
		<comments>http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html#comments</comments>
		<pubDate>Thu, 20 Aug 2009 08:30:42 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[OleDB]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[VS]]></category>
		<category><![CDATA[数据源]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=310</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html Oracle Developer Tools For .Net (... ]]></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/vs2008_data_source_config_problem.html </p>
<p></span>Oracle Developer Tools For .Net (ODT.NET) 和 <acronym title="Structured Query Language">SQL</acronym> Server 的数据源一直有些诡异的问题困扰我很久，这几天下了狠心把它们搞定，最终搞定了，并且发现问题的原因是非常简单的。 <span id="more-310"></span></p>
<p>首先是ODT.NET的问题，装好ODT以后，在VS2008中配置数据源，总是提示找不到可用的.NET应用程序，这不扯淡么，刚装好，并且在程序中using Oracle.Client是正确的，可以连接数据库的。</p>
<p>网上查了一些资料，全是扯淡，最后只能上OTN了，用灵格斯悲剧的看着老外用英文讨论，终于有个老外貌似解决了，他说是C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG下的machine.config文件问题，因为</p>
<p><span style="COLOR: #ff0000">&lt;add name=”Oracle Data Provider for .NET” invariant=”Oracle.DataAccess.Client” description=”Oracle Data Provider for .NET” type=”Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=<span style="BACKGROUND-COLOR: #888888; COLOR: #ffff00">2.111.6.0</span>, Culture=neutral, PublicKeyToken=89b483f429c47342&#8243; /&gt;</span><br />
这一列的问题。灰色标出来的就是问题所在，因为装ODT.NET先得装Oracle Client，但是Oracle Client中也有个Provider，版本是2.111.6.0，装了ODT.NET之后，ODAC升级到2.111.6.20了，于是只要把灰色部门改成2.111.6.20，一切都好了，在这个文件中出现的所有关于Oracle Provider的都可以把2.111.6.0改成2.111.6.20，因为全部都升级了。</p>
<p>同时，C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG中的machine.config文件也最好改一下，我是X64系统，所以改Framework64目录就行了，如果是X86系统那就是改Framework目录，不过最好都要修改，这样万无一失。</p>
<p>我改过之后，VS跑起来了。</p>
<p><a href="http://www.flickr.com/photos/penglixun/4410683594/" title="Flickr 上 P.Linux 的 VS2008 ODT.NET"><img src="http://farm5.static.flickr.com/4066/4410683594_2271d4acca_o.jpg" width="580" height="265" alt="VS2008 ODT.NET" /></a></p>
<p>然后是<acronym title="Structured Query Language">SQL</acronym> Server数据源的问题，连接总提示<acronym title="Structured Query Language">SQL</acronym> Server没有打开远程连接，怎么可能？我明明打开了，在服务器上都可以连接。</p>
<p>后来突然意识到，在服务器上登录<acronym title="Structured Query Language">SQL</acronym> Server数据库引擎时，发现服务器名里面是“VM-WIN2003\VM_WIN2003_MSSQL”，然后在VS中配置数据源时，自动搜索总是显示的服务器名是“VM-WIN2003”，感觉不对，重新写成“VM-WIN2003\VM_WIN2003_MSSQL”，终于在数据库列表中显示出了数据库中的数据库。</p>
<p>原来是个这么简单的问题！</p>
<p><a href="http://www.flickr.com/photos/penglixun/4409916067/" title="Flickr 上 P.Linux 的 VS2008 ODT.NET"><img src="http://farm3.static.flickr.com/2739/4409916067_327a0938f1_o.jpg" width="580" height="591" alt="VS2008 ODT.NET" /></a></p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月24日 -- <a href="http://www.penglixun.com/tech/database/cluster_and_data_warehouse.html" title="数据库中的一些概念——集群技术及数据仓库">数据库中的一些概念——集群技术及数据仓库</a> (0)</li><li>2009年07月9日 -- <a href="http://www.penglixun.com/tech/database/oracle_recent_records.html" title="Oracle 最近的一些记录">Oracle 最近的一些记录</a> (0)</li><li>2009年04月12日 -- <a href="http://www.penglixun.com/tech/database/ebay_database_arch_analyze.html" title="eBay数据库构架方案分析">eBay数据库构架方案分析</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数据库中的一些概念——集群技术及数据仓库</title>
		<link>http://www.penglixun.com/tech/database/cluster_and_data_warehouse.html</link>
		<comments>http://www.penglixun.com/tech/database/cluster_and_data_warehouse.html#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:56:47 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[OLAP]]></category>
		<category><![CDATA[OLDP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[Shared]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=296</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/cluster_and_data_warehouse.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/cluster_and_data_warehouse.html </p>
<p></span>最近学习数据库集群技术，遇到一些新的概念，于是总结一些这些新概念。<br />
<span id="more-296"></span></p>
<h2 style="text-align: center;">数据库与数据仓库的区别</h2>
<p>　　简而言之，数据库是面向事务的设计，数据仓库是面向主题设计的。<br />
　　数据库一般存储在线交易数据，数据仓库存储的一般是历史数据。<br />
　　数据库设计是尽量避免冗余，一般采用符合范式的规则来设计，数据仓库在设计是有意引入冗余，采用反范式的方式来设计。<br />
　　数据库是为捕获数据而设计，数据仓库是为分析数据而设计，它的两个基本的元素是维表和事实表。维是看问题的角度，比如时间，部门，维表放的就是这些东西的定义，事实表里放着要查询的数据，同时有维的ID。<br />
　　单从概念上讲，有些晦涩。任何技术都是为应用服务的，结合应用可以很容易地理解。以银行业务为例。数据库是事务系统的数据平台，客户在银行做的每笔交易都会写入数据库，被记录下来，这里，可以简单地理解为用数据库记帐。数据仓库是分析系统的数据平台，它从事务系统获取数据，并做汇总、加工，为决策者提供决策的依据。比如，某银行某分行一个月发生多少交易，该分行当前存款余额是多少。如果存款又多，消费交易又多，那么该地区就有必要设立ATM了。<br />
　　显然，银行的交易量是巨大的，通常以百万甚至千万次来计算。事务系统是实时的，这就要求时效性，客户存一笔钱需要几十秒是无法忍受的，这就要求数据库只能存储很短一段时间的数据。而分析系统是事后的，它要提供关注时间段内所有的有效数据。这些数据是海量的，汇总计算起来也要慢一些，但是，只要能够提供有效的分析数据就达到目的了。<br />
　　数据仓库，是在数据库已经大量存在的情况下，为了进一步挖掘数据资源、为了决策需要而产生的，它决不是所谓的“大型数据库”。那么，数据仓库与传统数据库比较，有哪些不同呢?让我们先看看W.H.Inmon关于数据仓库的定义:面向主题的、集成的、与时间相关且不可修改的数据集合。<br />
　　“面向主题的”:传统数据库主要是为应用程序进行数据处理，未必按照同一主题存储数据;数据仓库侧重于数据分析工作，是按照主题存储的。这一点，类似于传统农贸市场与超市的区别—市场里面，白菜、萝卜、香菜会在一个摊位上，如果它们是一个小贩卖的;而超市里，白菜、萝卜、香菜则各自一块。也就是说，市场里的菜(数据)是按照小贩(应用程序)归堆(存储)的，超市里面则是按照菜的类型(同主题)归堆的。<br />
　　“与时间相关”:数据库保存信息的时候，并不强调一定有时间信息。数据仓库则不同，出于决策的需要，数据仓库中的数据都要标明时间属性。决策中，时间属性很重要。同样都是累计购买过九车产品的顾客，一位是最近三个月购买九车，一位是最近一年从未买过，这对于决策者意义是不同的。<br />
　　“不可修改”:数据仓库中的数据并不是最新的，而是来源于其它数据源。数据仓库反映的是历史信息，并不是很多数据库处理的那种日常事务数据(有的数据库例如电信计费数据库甚至处理实时信息)。因此，数据仓库中的数据是极少或根本不修改的;当然，向数据仓库添加数据是允许的。<br />
　　数据仓库的出现，并不是要取代数据库。目前，大部分数据仓库还是用关系数据库管理系统来管理的。可以说，数据库、数据仓库相辅相成、各有千秋。</p>
<p>　　补充一下，数据仓库的方案建设的目的，是为前端查询和分析作为基础，由于有较大的冗余，所以需要的存储也较大。为了更好地为前端应用服务，数据仓库必须有如下几点优点，否则是失败的数据仓库方案。<br />
　　1.效率足够高。客户要求的分析数据一般分为日、周、月、季、年等，可以看出，日为周期的数据要求的效率最高，要求24小时甚至12小时内，客户能看到昨天的数据分析。由于有的企业每日的数据量很大，设计不好的数据仓库经常会出问题，延迟1-3日才能给出数据，显然不行的。<br />
　　2.数据质量。客户要看各种信息，肯定要准确的数据，但由于数据仓库流程至少分为3步，2次ETL，复杂的架构会更多层次，那么由于数据源有脏数据或者代码不严谨，都可以导致数据失真，客户看到错误的信息就可能导致分析出错误的决策，造成损失，而不是效益。<br />
　　3.扩展性。之所以有的大型数据仓库系统架构设计复杂，是因为考虑到了未来3-5年的扩展性，这样的话，客户不用太快花钱去重建数据仓库系统，就能很稳定运行。主要体现在数据建模的合理性，数据仓库方案中多出一些中间层，使海量数据流有足够的缓冲，不至于数据量大很多，就运行不起来了。</p>
<h2 style="TEXT-ALIGN: center">OLTP与OLAP</h2>
<p>　　人们对数据的处理需求可以分为两种类型，操作型处理（OLTP）和分析型处理（OLAP），传统的数据库主要是面向OLTP，注重数据的计算、记录的插入、删除、与修改，以及简单的查询和统计。它的主要任务是进行事务处理，所关注的是事务处理的及时性、完整性和正确性，而在数据的分析处理方面存在着严重的不足，主要表现在以下一些方面。<br />
　　首先是集成性的缺乏。业务数据库系统的条块与部门分割，导致数据分布的分散化与无序化。业务数据库缺乏统一的定义与规划，导致数据的定义存在歧义；其次是主题不明确，建立数据库的目的就是为了满足事务处理的需要，库和表的定义与设计完全以此为基础而进行，对于数据分析而言，这些库和表无疑缺少明确的主题。又是需要分析的数据会分散的存储在不同的表和库甚至不同的数据库服务器中，想要对这些数据进行有效的分析是十分困难的。然后是分析和处理的效率低下，设计基于传统数据库的应用系统的核心准则，是要确保事务得到及时、准确的处理。因此，在业务数据库系统的构建过程中，除了库和表的精心设计之外，索引的建立、存储过程的优化等工作，也均以此为中心展开，这样虽然充分提高了事务处理的效率，但是数据分析处理的效率却无法得到保证。<br />
　　传统数据库由于自身条件的限制，无法担当作为大规模数据综合分析平台的重任，企业的决策迫切需要有一种新的理论与技术来提供支持，这就是数据仓库技术。<br />
　　数据仓库就是面向主题的、集成的、随时间变化的、非易失的数据集合，用于支持管理层的决策过程，“面向主题、集成、随时间变化和非易失”是它的主要特点。<br />
　　面向主题是数据仓库中数据组织的最基本原则。数据仓库中的所谓“主题”，是一个逻辑概念。在信息管理的层次上，主题就是从管理的角度出发，对数据进行综合分析而抽取的，需要做进一步分析的对象，数据仓库的构造过程首先就是确定主题的过程。数据仓库的设计者必须明确该数据仓库所支持的决策内容，即数据仓库的用途，并将决策内容归纳为若干个具体的易于利用数据进行组织加以分析的主题。<br />
　　数据仓库中数据的集成性是指，在构建数据仓库的过程中，多个外部数据源内格式不同、定义各异的数据，按照既定的策略经过抽取、清洗、转换等一系列处理。最终构成一个有机的整体。传统业务处理程序的侧重点在于迅速、正确地处理所有业务，记录业务内容和处理结果，而不是对决策提供支持。数据仓库直接使用传统业务处理的结果，进行数据分析。<br />
　　数据仓库中数据的非易失性，包括两个方面的含义，其一是指数据仓库内容的更新、追加等操作是不频繁的，一般基于一定的周期或条件阈值进行；其二是指，数据在导入数据仓库后，虽然也有删除更新等操作，但决定这种操作的阈值条件是较难满足的，这种情况的发生是非常罕见的。<br />
　　数据的时变性，是指数据仓库的内容随时间的变化不断得到补充、更新。其实质就是建立业务数据与时间的对应关系，即以时间为坐标轴，对既定时间点的业务数据生成“快照”，各个时间点的快照连接起来，就构成了数据仓库内容的动态连续变化图，为决策者提供有效的依据。<br />
　　从数据库到数据仓库，完成了数据挖掘的最重要一步，为数据挖掘接下来的步骤的顺利进行大好了基础。数据挖掘的各项操作都是在数据仓库的基础上进行的。数据仓库的构建是一门大学问。</p>
<p><a href="http://www.flickr.com/photos/penglixun/3971139957/" title="Flickr 上 P.Linux 的 Shared的三种方式"><img src="http://farm3.static.flickr.com/2556/3971139957_1bf7af2e21_o.jpg" width="500" height="191" alt="Shared的三种方式" /></a></p>
<p>        其实这也是很难说，目前数据库厂商中仅有oracle 提供share data模式群集(RAC模式)，而其它数据库厂商的群集均是share nothing的模式，即群集中仅有一个节点处于活动状态，其它节点处于备用状态。Oracle的HA(OFS)其实就是就是采用share- nothing的一种群集模式，对于share-nothing和share-date (share-disk) 两种模式的差别，目前的确是有多种版本的说法。不过，采用share-nothing对于机器的利用率是相当低(如果只采用 active/standby模式)，但如果采用active/active模式，则又会担心在一个节点出现故障时，另外一个节点是否能够承担原来两个节 点所承担的系统负载。对于share-data模式，大家目前比较关心的随着节点的增加，其内部通讯带来的系统开销(即cache同步等)，则又是一个令 人担心的问题，特别是在OLTP系统上，所以，也有人建议，RAC还是用在data warehouse上比较好，而大型OLTP则还是不优先采用RAC，因为OLTP系统带来的内部通讯开销比较令人恐怖。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2010年01月9日 -- <a href="http://www.penglixun.com/tech/database/oel_install_iscsi_rac_record.html" title="在OEL5.4上安装Oracle 10g R2 x64 RAC的一些记录">在OEL5.4上安装Oracle 10g R2 x64 RAC的一些记录</a> (1)</li><li>2009年10月13日 -- <a href="http://www.penglixun.com/tech/database/libpthread_problem_in_install_rac.html" title="装RAC中libpthread.so.0的问题">装RAC中libpthread.so.0的问题</a> (0)</li><li>2009年10月11日 -- <a href="http://www.penglixun.com/tech/database/my_oracle_rac_ha_cluster.html" title="我组建的Oracle RAC高可用集群">我组建的Oracle RAC高可用集群</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/cluster_and_data_warehouse.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle 最近的一些记录</title>
		<link>http://www.penglixun.com/tech/database/oracle_recent_records.html</link>
		<comments>http://www.penglixun.com/tech/database/oracle_recent_records.html#comments</comments>
		<pubDate>Thu, 09 Jul 2009 01:44:28 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[EXP]]></category>
		<category><![CDATA[IMP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[备份]]></category>
		<category><![CDATA[导入]]></category>
		<category><![CDATA[导出]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=268</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/oracle_recent_records.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/oracle_recent_records.html </p>
<p></span>最近遇到一个比较诡异的问题，一个数据库DROP任何东西的时候都出错，大致错误是“<acronym title="Structured Query Language">SQL</acronym>递归在第一层错误，视图、表不存在”。<br />
<span id="more-268"></span><br />
我网上搜了下，有人说是DUAL里面记录不止一条造成了，把DUAL清空再插入一条记录就OK，如下</p>

<div class="wp_codebox"><table><tr id="p26817"><td class="code" id="p268code17"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> DUAL;
<span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> DUAL;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> DUAL <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'X'</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>我亲自上机尝试，发现这种方法在我们这里并不生效。</p>
<p>经过TRACE，</p>

<div class="wp_codebox"><table><tr id="p26818"><td class="code" id="p268code18"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> SESSION <span style="color: #993333; font-weight: bold;">SET</span> sql_trace <span style="color: #66cc66;">=</span> true;</pre></td></tr></table></div>

<p>我发现是有一张系统表不存在，但是网上找不到这张表的结构，于是我这个悲剧小菜鸟只能选择重装数据库导入数据。</p>
<p>准备今天再详细的跟踪一下DROP语句的解析，看能不能找出其他原因。</p>

<div class="wp_codebox"><table><tr id="p26819"><td class="code" id="p268code19"><pre class="sql" style="font-family:monospace;">SQL<span style="color: #66cc66;">&gt;</span>ALTER SESSION <span style="color: #993333; font-weight: bold;">SET</span> sql_trace<span style="color: #66cc66;">=</span>true;
SQL<span style="color: #66cc66;">&gt;</span>ALTER SESSION <span style="color: #993333; font-weight: bold;">SET</span> EVENTS <span style="color: #ff0000;">'10046 trace name context forever,level 12'</span>;
SQL<span style="color: #66cc66;">&gt;</span>DROP <span style="color: #993333; font-weight: bold;">TABLE</span> p CASCADE CONSTRAINT;
SQL<span style="color: #66cc66;">&gt;</span>ALTER SESSION <span style="color: #993333; font-weight: bold;">SET</span> EVENTS <span style="color: #ff0000;">'10046 trace name context off'</span>;
c:\<span style="color: #66cc66;">&gt;</span>tkprof $oracle_home\admin\testdb\udump\oracledb_ora_3340<span style="color: #66cc66;">.</span>trc  c:\m3_droptable<span style="color: #66cc66;">.</span>txt</pre></td></tr></table></div>

<p>传说中是可能是MDSYS用户的表不能删除导致的，只要删除MDSYS就可以了。</p>

<div class="wp_codebox"><table><tr id="p26820"><td class="code" id="p268code20"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DROP</span> USER mdsys CASCADE;</pre></td></tr></table></div>

<p>也可能是角色引起的，删除角色。</p>

<div class="wp_codebox"><table><tr id="p26821"><td class="code" id="p268code21"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> SESSION <span style="color: #993333; font-weight: bold;">SET</span> EVENTS <span style="color: #ff0000;">'25475 trace name context forever, level 2'</span>;
execute DBMS_RULE_ADM<span style="color: #66cc66;">.</span>DROP_RULE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'.AQ$WF_DEFERRED_QUEUE_M$1'</span><span style="color: #66cc66;">,</span>TRUE<span style="color: #66cc66;">&#41;</span>;
commit;
execute DBMS_RULE_ADM<span style="color: #66cc66;">.</span>DROP_RULE_SET<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'AQ$WF_DEFERRED_QUEUE_M$1'</span><span style="color: #66cc66;">&#41;</span>;
commit;</pre></td></tr></table></div>

<p>实在不行只能先导出数据库了。<br />
exp m3/m3 owner=m3;</p>
<p>然后导入的时候为了保证导入到自己表空间下，要先设置下用户。</p>

<div class="wp_codebox"><table><tr id="p26822"><td class="code" id="p268code22"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">REVOKE</span> UNLIMITED TABLESPACE <span style="color: #993333; font-weight: bold;">FROM</span> m3;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 <span style="color: #993333; font-weight: bold;">DEFAULT</span> TABLESPACE users;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 QUOTA UNLIMITED <span style="color: #993333; font-weight: bold;">ON</span> users;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 QUOTA <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">ON</span> system;</pre></td></tr></table></div>

<p>imp m3/m3 fromuser=m3 touser=3;</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月26日 -- <a href="http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html" title="对Oracle导出文件错误和DMP文件结构的分析">对Oracle导出文件错误和DMP文件结构的分析</a> (0)</li><li>2009年07月22日 -- <a href="http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html" title="今天为XXX导数据的记录">今天为XXX导数据的记录</a> (0)</li><li>2009年08月20日 -- <a href="http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html" title="关于VS2008与一些数据源配置的问题">关于VS2008与一些数据源配置的问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/oracle_recent_records.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eBay数据库构架方案分析</title>
		<link>http://www.penglixun.com/tech/database/ebay_database_arch_analyze.html</link>
		<comments>http://www.penglixun.com/tech/database/ebay_database_arch_analyze.html#comments</comments>
		<pubDate>Sun, 12 Apr 2009 14:30:47 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[eBay]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Quest]]></category>
		<category><![CDATA[Sun]]></category>
		<category><![CDATA[方案]]></category>
		<category><![CDATA[构架]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=189</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/ebay_database_arch_analyze.html (荣耀属于Fenng和F5) 一、 eBay的... ]]></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/ebay_database_arch_analyze.html </p>
<p></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"> </span></p>
<p class="MsoNormal" style="text-align: center; margin: 0cm 0cm 0pt;">(荣耀属于Fenng和F5)</p>
<p class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt;"><strong><span style="mso-bidi-font-family: 宋体;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">一、</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">eBay</span></span></strong><strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">的数据量</span></span><sup><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">[</span><a name="_ftnref1"></a><span style="font-family: Calibri; font-size: small;">]</span></span></sup></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">作为电子商务领头羊的</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">公司，数据量究竟有多大？</span><span lang="EN-US"><span style="font-family: Calibri;">eWeek</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的报道中，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的存储主管</span><span lang="EN-US"><span style="font-family: Calibri;">Paul Strong</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">对数据量做了一些介绍，这些数据可以作为参考。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt; mso-list: l0 level1 lfo2;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">站点处理能力</span></span></strong></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">平均<strong><span style="color: #548dd4;">每天</span></strong>的</span><span lang="EN-US"><span style="font-family: Calibri;">PV</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">超过</span><strong><span style="color: #548dd4;" lang="EN-US"><span style="font-family: Calibri;">10</span></span></strong><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">亿</span></strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">每秒</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">钟交易大约</span><strong><span style="color: #548dd4;" lang="EN-US"><span style="font-family: Calibri;">1700</span></span></strong><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">美元</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的商品</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">每分</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">钟卖出一辆<strong><span style="color: #548dd4;">车</span></strong></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">每秒</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">钟卖出一件汽车<strong><span style="color: #548dd4;">饰品</span></strong>或者<strong><span style="color: #548dd4;">配件</span></strong></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">E.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">每两分</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">钟卖出一件<strong><span style="color: #548dd4;">钻石</span></strong>首饰</span><span style="font-family: Calibri;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">F.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><strong><span style="color: #548dd4;" lang="EN-US"><span style="font-family: Calibri;">6</span></span></strong><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">亿</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">商品，</span><strong><span style="color: #548dd4;" lang="EN-US"><span style="font-family: Calibri;">2</span></span></strong><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">亿</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">多注册用户</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l7 level1 lfo3;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">G.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">超过</span><strong><span style="color: #548dd4;" lang="EN-US"><span style="font-family: Calibri;">130</span></span></strong><strong><span style="font-family: 宋体; color: #548dd4; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">万</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">人把在</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">上做生意看作是生活的一部分</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> <span id="more-189"></span></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 41.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">在这样高的压力下，可靠性达到了</span><span lang="EN-US"><span style="font-family: Calibri;">99.94%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，也就是说每年只有</span><span lang="EN-US"><span style="font-family: Calibri;">5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个小时多一点的时间服务不可用。从业界消息来看，核心业务的可用性要比这个还要高。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 41.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据存储工程组控制着</span><span lang="EN-US"><span style="font-family: Calibri;"> eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的</span><span lang="EN-US"><span style="font-family: Calibri;">2PB (1Petabyte=1000Terabytes) </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">可用空间。这是一个什么概念，对比一下</span><span lang="EN-US"><span style="font-family: Calibri;"> Google </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的存储就知道了。每周就要分配</span><span lang="EN-US"><span style="font-family: Calibri;"> 10T </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据出去，稍微算一下，一分钟大约使用</span><span lang="EN-US"><span style="font-family: Calibri;"> 1G </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的数据空间。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt; mso-list: l0 level1 lfo2;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">计算能力</span></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">使用一套传统的网格计算系统。该系统的一些特征数据：</span><span style="font-family: Calibri;"> <strong> </strong></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l10 level1 lfo4;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">170 </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">台</span><span lang="EN-US"><span style="font-family: Calibri;"> Win2000/Win2003 </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">服务器；、</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l10 level1 lfo4;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">170 </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">台</span><span lang="EN-US"><span style="font-family: Calibri;"> Linux (RHES3) </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">服务器；、</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l10 level1 lfo4;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">三个</span><span lang="EN-US"><span style="font-family: Calibri;"> Solaris </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">服务器：</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">为</span><span lang="EN-US"><span style="font-family: Calibri;">QA</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">构建与部署</span><span lang="EN-US"><span style="font-family: Calibri;"> eBay.com</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">；、</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">编译优化</span><span lang="EN-US"><span style="font-family: Calibri;"> Java / C++ </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">以及其他</span><span lang="EN-US"><span style="font-family: Calibri;"> Web </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">元素；、</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l10 level1 lfo4;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Build</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">整个站点的时间：</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">过去是</span><span lang="EN-US"><span style="font-family: Calibri;">10</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个小时，现在是</span><span lang="EN-US"><span style="font-family: Calibri;">30</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">分钟；、</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l10 level1 lfo4;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">E.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">在过去的</span><span lang="EN-US"><span style="font-family: Calibri;">2</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年半，有</span><span lang="EN-US"><span style="font-family: Calibri;">200</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">万次</span><span lang="EN-US"><span style="font-family: Calibri;">Build</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，很可怕的数字</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt; mso-list: l0 level1 lfo2;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">存储硬件与软件</span></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">每个供货商都必须通过严格的测试才有被选中的可能，这些厂家或产品如下：</span><span style="font-family: Calibri;"> <strong> </strong></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">交换机：</span><span lang="EN-US"><span style="font-family: Calibri;">Brocade<strong> </strong></span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">网管软件：</span><span lang="EN-US"><span style="font-family: Calibri;">IBM Tivoli<strong> </strong></span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">NAS</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">：</span><span lang="EN-US"><span style="font-family: Calibri;">Netapp</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">（占总数据量的</span><span lang="EN-US"><span style="font-family: Calibri;">5%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，</span><span lang="EN-US"><span style="font-family: Calibri;">2P*0.05</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，大约</span><span lang="EN-US"><span style="font-family: Calibri;">100T</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">阵列存储：</span><span lang="EN-US"><span style="font-family: Calibri;">HDS </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">（</span><span lang="EN-US"><span style="font-family: Calibri;">95%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，</span><span lang="EN-US"><span style="font-family: Calibri;">EMC</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">在</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">是出局者）</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">E.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">负载均衡与</span><span lang="EN-US"><span style="font-family: Calibri;">Failover</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">：</span><span lang="EN-US"><span style="font-family: Calibri;">Resonate<strong> </strong></span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">F.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">搜索功能：</span><span lang="EN-US"><span style="font-family: Calibri;">Thunderstone indexing system<strong> </strong></span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">G.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库软件：</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，大多数</span><span lang="EN-US"><span style="font-family: Calibri;">DB</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">都有</span><span lang="EN-US"><span style="font-family: Calibri;">4</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">份拷贝</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">H.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库服务器：</span><span lang="EN-US"><span style="font-family: Calibri;">Sun E10000<strong> </strong></span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l11 level1 lfo5;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">I.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据备份：</span><span lang="EN-US"><span style="font-family: Calibri;">Share Plex</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，购买的全球</span><span lang="EN-US"><span style="font-family: Calibri;">Licence</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">用于数据复制</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt; mso-list: l0 level1 lfo2;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">4.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">架构</span></span></strong></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l4 level1 lfo6;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">高分布式</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l4 level1 lfo6;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">拍卖站点是基于</span><span lang="EN-US"><span style="font-family: Calibri;">Java</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的，搜索的架构是用</span><span lang="EN-US"><span style="font-family: Calibri;">C++</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">写的</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l4 level1 lfo6;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">数百名工程师进行开发，所有的工作都在同样的代码环境下进行</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt; mso-list: l0 level1 lfo2;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">5.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">其他信息</span></span></strong></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l5 level1 lfo7;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">集中化存储应用程序日志</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l5 level1 lfo7;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">全局计费：实时的与第三方应用集成（</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的</span><span lang="EN-US"><span style="font-family: Calibri;">PayPal</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l5 level1 lfo7;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">业务事件流：使用统一的高效可靠消息队列，并且使用</span><span lang="EN-US"><span style="font-family: Calibri;">Cookie-cutter</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">模式用于优化用户体验</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt;"><strong><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></strong></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l3 level1 lfo1;"><strong><span style="mso-bidi-font-family: 宋体;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">二、</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><span style="font-size: small;"><strong><span lang="EN-US"><span style="font-family: Calibri;">eBay </span></span></strong><strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的应用服务器规模</span></strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">从</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的一份白皮书《</span><span lang="EN-US"><span style="font-family: Calibri;">The eBay Global Platform and Oracle 10g JDBC</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">》</span></span><strong><sup><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">[</span><a name="_ftnref2"></a><span style="font-family: Calibri; font-size: small;">]</span></span></sup></strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">中可以了解到，在</span><span lang="EN-US"><span style="font-family: Calibri;">2004</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年的时候，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的应用服务器采用了</span><span lang="EN-US"><span style="font-family: Calibri;">IBM Web Sphere</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，部署在</span><span lang="EN-US"><span style="font-family: Calibri;">WinNT</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">上，硬件是</span><span lang="EN-US"><span style="font-family: Calibri;">Intel</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">双</span><span lang="EN-US"><span style="font-family: Calibri;">CPU</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">奔腾服务器。服务器数量是</span><span lang="EN-US"><span style="font-family: Calibri;">2400</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">台。在第一部分中可以知道，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的是集中式处理</span><span lang="EN-US"><span style="font-family: Calibri;">Log</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的，每天会有</span><span lang="EN-US"><span style="font-family: Calibri;">2T</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的</span><span lang="EN-US"><span style="font-family: Calibri;">Log</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据产生，现在只会更多。这些应用服务器分成不同的组，通过一个统一的</span><span lang="EN-US"><span style="font-family: Calibri;">DAL(Database Access Layer)</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">逻辑层访问</span><span lang="EN-US"><span style="font-family: Calibri;">135</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个数据库节点。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">这篇白皮书已经发布了两年，相信在这两年的时间里，服务器规模又会扩大了许多。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的</span><span lang="EN-US"><span style="font-family: Calibri;">SOA</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">架构</span><span lang="EN-US"><span style="font-family: Calibri;">V3</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">示意图如下：</span></span></p>
<p><a title="Flickr 上 P.Linux 的 eBay SOA v3架构" href="http://www.flickr.com/photos/penglixun/4412644751/"><img src="http://farm3.static.flickr.com/2795/4412644751_710c815bdc_o.jpg" alt="eBay SOA v3架构" width="634" height="703" /></a></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;">
<p class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt;">
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l3 level1 lfo1;"><strong><span style="mso-bidi-font-family: 宋体;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">三、</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">eBay</span></span></strong><strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">的数据库分布扩展架构</span></span><sup><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">[</span><a name="_ftnref3"></a><span style="font-family: Calibri; font-size: small;">]</span></span></sup></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">对于</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">这样超大规模的站点来说，瓶颈往往最容易在数据库服务器上产生，必定有一部分数据（比如交易记录这样不容易水平分割的数据）容易带来大量的读操作，而不管用什么存储，能承担的</span><span lang="EN-US"><span style="font-family: Calibri;">I/O</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">能力是有限的。所以，如果有效的分散</span><span lang="EN-US"><span style="font-family: Calibri;">I/O</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的承载能力就是一个很有意义的事情。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">大约为如下结构：<br />
<a href="http://www.flickr.com/photos/penglixun/3971138893/" title="Flickr 上 P.Linux 的 Share Plex"><img src="http://farm4.static.flickr.com/3486/3971138893_35ec7c786f_o.jpg" width="474" height="326" alt="Share Plex" /></a><br />
</span></span></p>
<p class="MsoNormal" style="text-align: center; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;">
<p class="MsoNormal" style="text-align: center; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;">
<p class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt;">
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">由</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">公司设计的方案，通过</span><span lang="EN-US"><span style="font-family: Calibri;">Quest</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">公司的</span></span><span lang="EN-US"><span style="font-family: Calibri;"><span style="font-size: small;">Share Plex</span><strong><sup><span style="font-size: small;">[</span><a name="_ftnref4"></a><span style="font-size: small;">]</span></sup></strong></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">近乎实时的复制数据到其他数据库节点，通过特定的模块检查数据库状态，并进行负载均衡，</span><span lang="EN-US"><span style="font-family: Calibri;">I/O </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">成功的做到了分布，读写分离，而且极大的提高了可用性。虽然整个方案技术并无高深之处，但方法巧妙，效果极好。</span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">当然，这个技术架构不算便宜。</span><span lang="EN-US"><span style="font-family: Calibri;">Quest</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的</span><span lang="EN-US"><span style="font-family: Calibri;">Share Plex License</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">很贵，而且对于每个结点来说，都需要数据库</span><span lang="EN-US"><span style="font-family: Calibri;">License</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">与硬件费用。但优点也很多：节省了维护成本，数据库层面的访问也能做到</span><span lang="EN-US"><span style="font-family: Calibri;">SOA</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，高可用性。</span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">国内的一些厂商比较喜欢给客户推存储级别的解决方案。通过存储底层复制来解决数据分布以及灾备问题。这个思路似乎太传统了，对于大型集群多少有点过时。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l3 level1 lfo1;"><strong><span style="mso-bidi-font-family: 宋体;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">四、</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">Share Plex</span></span></strong><strong><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">数据库负载均衡方案</span></span><sup><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">[</span><a name="_ftnref5"></a><span style="font-family: Calibri; font-size: small;">]</span></span></sup></strong></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l12 level1 lfo8;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">需求及挑战</span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">拥有</span><span lang="EN-US"><span style="font-family: Calibri;">30</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">套生产数据库，全部采用</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库：</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l6 level1 lfo9;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">12</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个数据库支持“</span><span lang="EN-US"><span style="font-family: Calibri;">live</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">”项目（</span><span lang="EN-US"><span style="font-family: Calibri;">Sun 480/4500</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l6 level1 lfo9;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">1</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个数据库支持存档项目（</span><span lang="EN-US"><span style="font-family: Calibri;">Sun 4800</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l6 level1 lfo9;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">4</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个数据库支持客户数据（</span><span lang="EN-US"><span style="font-family: Calibri;">Sun 4800</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l6 level1 lfo9;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">2</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个数据库支持</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的反馈系统（</span><span lang="EN-US"><span style="font-family: Calibri;">Sun 480</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l6 level1 lfo9;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">E.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">1</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个数据库支持非正常的</span><span style="font-family: Calibri;"> </span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">“</span><span lang="EN-US"><span style="font-family: Calibri;">cache</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">”数据（</span><span lang="EN-US"><span style="font-family: Calibri;">Sun 4800</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l6 level1 lfo9;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">F.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">10</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">个其他的数据库（大部分</span><span lang="EN-US"><span style="font-family: Calibri;">Sun 480 class</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">同时，采用</span><span lang="EN-US"><span style="font-family: Calibri;">Hitachi SAN</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">建立存储架构，建立了两个远程备份数据库，并实施实时复制数据到远程数据库实现冗灾，同时每</span><span lang="EN-US"><span style="font-family: Calibri;">24</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">小时实施针对数据块的数据备份。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">因此，通过</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库读写的比率分析，可以发现，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">在数据库提供服务时，读和查询的操作达到</span><span lang="EN-US"><span style="font-family: Calibri;">530</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">亿次，而数据库写和更新的操作达到</span><span lang="EN-US"><span style="font-family: Calibri;">2</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">亿次。“读和查询”操作与“写和更新”的比率达到</span><span lang="EN-US"><span style="font-family: Calibri;">265:1</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">。可见查询和数据库读的操作给数据库管理系统带来巨大的压力。而更为严峻的是，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年增长率达到</span><span lang="EN-US"><span style="font-family: Calibri;">50%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，这意味着，来自读和查询的操作压力将持续增大，要保证数据库服务的响应能力和效率，稳定性和安全性，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">必须采用数据库服务器的负载均衡解决方案。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">但是，由于系统庞大，出于投资保护等考虑，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">对数据库服务器的负载均衡解决方案的需求有如下几个特点：</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l1 level1 lfo10;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">不改变</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的数据库体系结构</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l1 level1 lfo10;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">可用性目标达到</span><span lang="EN-US"><span style="font-family: Calibri;">99.9%</span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l1 level1 lfo10;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">需承载</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">每年</span><span lang="EN-US"><span style="font-family: Calibri;">50%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的高成长</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l1 level1 lfo10;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">简单管理等等</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">这意味着在不对系统大动干戈的同时，却革命性地提高其性能，其挑战不言而喻。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l12 level1 lfo8;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">解决方案</span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">针对</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库服务器负载均衡的需求特点，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">考虑了三种解决方案：</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l8 level2 lfo11;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">将数据库垂直分割，划分成多层数据库处理，减轻原来单层数据库处理数据而形成的瓶颈与可用性问题。</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 105pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">问题：这种方案很难部署，而且也没有从根本上解决单点故障问题。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l8 level2 lfo11;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">采用</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle OPS/RAC</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">机群解决方案。</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 105pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">问题：要求给便数据库编程代码，非常难以管理与维护。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l8 level2 lfo11;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">采用</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">与</span><span lang="EN-US"><span style="font-family: Calibri;">SharePlex </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">联合解决方案。</span><strong> </strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 105pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">优点：简单管理，不需要改变整个体系结构。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">在最初，</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">采用</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle OPS/RAC</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">解决问题。但是后来经过充分论证和探讨，最终</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">采用了基于</span><span lang="EN-US"><span style="font-family: Calibri;">F5/SharePlex</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的解决方案。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">解决方案是应用类似</span><span lang="EN-US"><span style="font-family: Calibri;">OPS/RAC</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，但是却相对简单的解决方案，不用改变数据库体系结构，管理和维护简单得多。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">解决方案得主要思路是：通过应用将数据库“读与查询”的操作与”写和更新”的操作导向到分开的</span><span style="font-family: Calibri;"> </span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">“逻辑”</span><span style="font-family: Calibri;"> </span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库，这些数据库服务器都单独配备数据存储，而没有采用共享存储的方式。这样，</span><span lang="EN-US"><span style="font-family: Calibri;">F5 </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">应用交换机动态的将所有的数据库”读与查询”请求导向到查询数据库服务器群中，并智能负载均衡到最佳的数据库服务器上。所有的”写和更新”请求都指向到一个单一的数据库服务器上，由</span><span lang="EN-US"><span style="font-family: Calibri;">Share Plex</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">动态实时将数据记录复制到”读与查询”数据库服务器群的数据库中。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">这样，一方面，数据库服务器群被</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">应用交换机虚拟化和集群，变成了一个“池”；另一方面，“读与查询”的操作，可以根据需要，选择更高效率得数据库服务器，从而使“读与查询”的操作压力得到解决。同时，随着业务的增长，还可以随时根据客户业务的压力在线扩展新的服务器在这个群之中。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">由于根据以上分析，数据库读写的比例超过</span><span lang="EN-US"><span style="font-family: Calibri;">260</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">倍，采用这样的方法，有效解决了数据库性能和高可用性要求。</span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l12 level1 lfo8;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">方案特点</span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">解决方案具有以下特点：</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l2 level2 lfo12;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">运用分离读和写操作，使读和写操作进入分别的逻辑数据库</span><span style="font-family: Calibri;"> </span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">而不是共享磁盘</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l2 level2 lfo12;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库服务器均衡可以使所有的读操作交叉分配到</span><span lang="EN-US"><span style="font-family: Calibri;">Available Hosts</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，所有的写操作都指定到单一的</span><span lang="EN-US"><span style="font-family: Calibri;">DOR(Database-Of-Record) </span></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l2 level2 lfo12;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">应用类似</span><span lang="EN-US"><span style="font-family: Calibri;">OPS/RAC</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，但是却相对简单的的解决方案</span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 105pt; mso-list: l2 level2 lfo12;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">发挥</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">产品灵敏的量测性和显著的增强可用性。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">采用</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">的</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">负载均衡器后，对于</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">应用系统有独到的优势：</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l9 level1 lfo13;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">A.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">高可用性：</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">动态分配每一个流量请求到后台的四台</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle 9i Database</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库服务器，并动态检查各个服务器的健康状态，将下一个请求分配给最有效率的服务器，任何服务起死机时，</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">即刻将流量请求分配给其他的三台服务器，从而达到</span><span lang="EN-US"><span style="font-family: Calibri;">99.999%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">系统有效性。特别是针对</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle 9i </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库服务器，</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">公司专门为</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle 9i</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库开发了专用的健康检查模块，通过调用</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">专有的扩展应用校验（</span><span lang="EN-US"><span style="font-family: Calibri;">EAV</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">）进程，</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">能够随时得到</span><span lang="EN-US"><span style="font-family: Calibri;">Oracle 9i</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库的应用层服务能力而不是其他的负载均衡设备所采用的</span><span lang="EN-US"><span style="font-family: Calibri;">ICMP/TCP</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">层进行健康检查。</span><span style="font-family: Calibri;"> <strong> </strong></span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l9 level1 lfo13;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">B.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">高安全性：</span><span style="font-family: Calibri;"> <span lang="EN-US">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">支持地址翻译技术和安全地址翻译，这样一来客户不可能知道真正提供服务的服务器的</span><span lang="EN-US"><span style="font-family: Calibri;"><acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">地址与端口，从而保护数据库服务器不受到诸如</span><span lang="EN-US"><span style="font-family: Calibri;">SYN Flood</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">、</span><span lang="EN-US"><span style="font-family: Calibri;">DOS</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">及</span><span lang="EN-US"><span style="font-family: Calibri;">DDOS</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">进攻。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l9 level1 lfo13;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">C.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">高效率：采用</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym> </span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">负载均衡之后。</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">可以智能寻找最佳状态的数据库服务器从而保证客户得到响应最快的数据库服务器以提供最佳的查询数据库服务。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l9 level1 lfo13;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">D.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">高可扩展性：</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">可以支持动态增加或删除其负载均衡的数据库服务器群组的任何数量的服务器</span><span lang="EN-US"><span style="font-family: Calibri;">,</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">而不需要对前端或后台做任何改变从而使得系统扩展轻松方便、透明。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 104.95pt; mso-list: l9 level1 lfo13;"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">E.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">高可管理性：</span><span lang="EN-US"><span style="font-family: Calibri;">BIG-<acronym title="Internet Protocol">IP</acronym></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">有专门的管理软件可以实时监控整个数据库服务器群组的流量状态</span><span lang="EN-US"><span style="font-family: Calibri;">,</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">并分析发展趋势帮助客户及时根据流量增长增加服务器。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 63pt; mso-list: l12 level1 lfo8;"><strong><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">4.</span><span style="font: 7pt &amp;amp;amp;"> </span></span></span></strong><strong><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">客户价值</span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">解决方案具有低成本、低维修，以及保护投资，高效率的特点，并方便在线拓展，面向未来。在</span><span lang="EN-US"><span style="font-family: Calibri;">2001</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年第二季度，</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">公司与</span><span lang="EN-US"><span style="font-family: Calibri;">Quest</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">公司合作成功帮助客户实现了以上解决方案，初期布署了两台”读与查询”数据库服务器和一台”写和更新”数据库服务器。在</span><span lang="EN-US"><span style="font-family: Calibri;">2001</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年第三季度成功通过了</span><span lang="EN-US"><span style="font-family: Calibri;">99.9%</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">高可用性。并真正实现了在线高可扩展性，在</span><span lang="EN-US"><span style="font-family: Calibri;">2002</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年增加另外两台读与查询”数据库服务器，并于</span><span lang="EN-US"><span style="font-family: Calibri;">2002</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">年第三季度增加部署了冗灾备份的功能。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">提供的</span><span lang="EN-US"><span style="font-family: Calibri;">eBay</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">数据库服务器负载均衡解决方案对行业也具有相当的借鉴意义。电子商务应用同样有着数据库查询的压力，如果能够有效将查询的压力分解到单独的服务器群来处理，将有效提高电子商务的应用效率。</span><span style="font-family: Calibri;"> </span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">对于电子商务类应用系统数据库扩展解决方案，只需要在</span><span lang="EN-US"><span style="font-family: Calibri;">Web Portal</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">上将数据库请求分成两个不同模块，问题便迎刃而解。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 62.95pt; mso-char-indent-count: 2.0;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">对于公众服务行业类的数据库服务器的负载均衡，如银行，电信，税务等系统，每月和每季度的都会有报表生成汇总，这些报表既包括用户的月结单数据信息，也需要产生总体业务的业绩报告。这样就必须对数据库系统进行检索和查询。如果这些业务工作与实际生产环境是一个数据库的情况下，将造成系统的巨大压力。采用</span><span lang="EN-US"><span style="font-family: Calibri;">F5</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">类似方法，同样能够有效达到高可用性预告可扩展性能的需要。</span><strong> </strong></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 2.0;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<div style="mso-element: footnote-list;">
<hr size="1" /></div>
<div id="ftn1" style="mso-element: footnote;">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><a name="_ftn1"></a><span lang="EN-US"><span style="font-family: Calibri;"><span style="font-size: small;">[</span><span class="MsoFootnoteReference"><span style="mso-special-character: footnote;"><span class="MsoFootnoteReference"><span style="font-family: &amp;amp;amp; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US">[1]</span></span></span></span><span style="font-size: small;">] </span></span></span><span style="font-family: &amp;amp;amp; color: #333333; font-size: 9.5pt;" lang="EN-US"><a href="http://www.eweek.com/article2/0,1895,2047252,00.asp"><span style="color: #0082ff;">Web 2.0: How High-Volume eBay Manages Its Storage</span></a></span></p>
</div>
<div id="ftn2" style="mso-element: footnote;">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><a name="_ftn2"></a><span lang="EN-US"><span style="font-family: Calibri;"><span style="font-size: small;">[</span><span class="MsoFootnoteReference"><span style="mso-special-character: footnote;"><span class="MsoFootnoteReference"><span style="font-family: &amp;amp;amp; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US">[2]</span></span></span></span><span style="font-size: small;">] Oracle</span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="font-size: small;">白皮书《</span></span><span style="font-family: &amp;amp;amp; color: #333333; font-size: 9.5pt;" lang="EN-US"><a href="http://download-west.oracle.com/oowsf2004/1235_wp.pdf"><span style="color: #0082ff;">The eBay Global Platform and Oracle 10g JDBC</span></a></span><span style="font-family: 宋体; color: #333333; font-size: 9.5pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma;">》</span></p>
</div>
<div id="ftn3" style="mso-element: footnote;">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><a name="_ftn3"></a><span lang="EN-US"><span style="font-family: Calibri;"><span style="font-size: small;">[</span><span class="MsoFootnoteReference"><span style="mso-special-character: footnote;"><span class="MsoFootnoteReference"><span style="font-family: &amp;amp;amp; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US">[3]</span></span></span></span><span style="font-size: small;">] </span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">阿里巴巴旗下支付宝</span><span lang="EN-US"><span style="font-family: Calibri;"><acronym title="Database Administrator">DBA</acronym>, ACE</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">，<a href="http://www.dbanotes.net" target="_blank">冯大辉</a></span></span></p>
</div>
<div id="ftn4" style="mso-element: footnote;">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><a name="_ftn4"></a><span lang="EN-US"><span style="font-family: Calibri;"><span style="font-size: small;">[</span><span class="MsoFootnoteReference"><span style="mso-special-character: footnote;"><span class="MsoFootnoteReference"><span style="font-family: &amp;amp;amp; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US">[4]</span></span></span></span><span style="font-size: small;">] Quest</span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">白皮书《</span><span lang="EN-US"><a href="http://www.questsoftware.com.cn/china/SharePlex.pdf"><span style="font-family: Calibri; color: #0082ff;">SharePlex For Oracle</span></a></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;">》</span></span></p>
</div>
<div id="ftn5" style="mso-element: footnote;">
<p class="MsoFootnoteText" style="margin: 0cm 0cm 0pt;"><a name="_ftn5"></a><span lang="EN-US"><span style="font-family: Calibri;"><span style="font-size: x-small;">[</span><span class="MsoFootnoteReference"><span style="mso-special-character: footnote;"><span class="MsoFootnoteReference"><span style="font-family: &amp;amp;amp; font-size: 9pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US">[5]</span></span></span></span><span style="font-size: x-small;">] </span></span><a href="http://www.f5.com.cn/"><span style="font-size: x-small;"><span style="color: #0082ff;"><span style="font-family: Calibri;">F5</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;" lang="EN-US"><span lang="EN-US">公司</span></span></span></span></a></span></p>
</div><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年08月20日 -- <a href="http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html" title="关于VS2008与一些数据源配置的问题">关于VS2008与一些数据源配置的问题</a> (0)</li><li>2009年07月24日 -- <a href="http://www.penglixun.com/tech/database/cluster_and_data_warehouse.html" title="数据库中的一些概念——集群技术及数据仓库">数据库中的一些概念——集群技术及数据仓库</a> (0)</li><li>2009年07月9日 -- <a href="http://www.penglixun.com/tech/database/oracle_recent_records.html" title="Oracle 最近的一些记录">Oracle 最近的一些记录</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/ebay_database_arch_analyze.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

