<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/rss.xsl" type="text/xsl" media="screen"?>
<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:ppp="http://blog.sohu.com/rss/module/ppp/"
	>

	<channel>
		<title>Data &#38;#38; Architecture DBA</title>
		<link>http://zhaolinjnu.blog.sohu.com/</link>
		<description><![CDATA[Welcome to my world]]></description>
		<pubDate>Fri, 18 Jul 2008 16:29:05 +0800</pubDate>
		<generator>搜狐博客</generator>
		<ppp:ebi>438b535792</ppp:ebi>
		<image>
			<title>http://blog.sohu.com</title>
			<url>http://js.pp.sohu.com/ppp/blog/images/common/logo_150_60.gif</url>
			<link>http://blog.sohu.com/</link>
			<width>100</width>
			<height>43</height>
			<description>搜狐博客</description>
		</image>
		<item>
			<title>MYSQL中的varchar类型</title>
			<link>http://zhaolinjnu.blog.sohu.com/94899970.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/94899970.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Fri, 18 Jul 2008 16:29:05 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/94899970.html</guid>
			<description><![CDATA[<p><font color="#000000">我们在应用中常常使用的varchar类型，在mysql中的varchar类型占用的空间比在ORACLE中的varchar2类型占用的空间要多很多,下面举一个示例：</font></p>
<p><font color="#000000">mysql&gt; select count(*) from t1;<br />+----------+<br />| count(*) |<br />+----------+<br />|&nbsp; 8388608 | <br />+----------+<br />1 row in set (8.89 sec)</font></p>
<p><font color="#000000">mysql&gt; show create table t1;<br />+-------+-------------------------------------<br />| Table | Create Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />+-------+-------------------------------------<br />| t1&nbsp;&nbsp;&nbsp; | CREATE TABLE `t1` (<br />&nbsp; `nick` varchar(32) DEFAULT NULL,<br />&nbsp; `gmt_create` datetime DEFAULT NULL<br />) ENGINE=InnoDB DEFAULT CHARSET=utf8 | <br />+-------+-------------------------------------<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">--MYSQL innodb占用空间324M<br />[root@testapp74 test]# ls -lh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />total 325M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />-rw-rw----&nbsp; 1 mysql mysql&nbsp;&nbsp; 61 Jul 18 13:32 db.opt<br />-rw-rw----&nbsp; 1 mysql mysql 8.5K Jul 18 13:46 t1.frm<br />-rw-rw----&nbsp; 1 mysql mysql 324M Jul 18 13:48 t1.ibd</font></p>
<p><br /><font color="#000000">--ORACLE中插入的数据与mysql相同，占用的空间只有142M<br />create table T1<br />(<br />&nbsp; NICK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(32),<br />&nbsp; GMT_CREATE DATE<br />);</font></p>
<p><br /><font color="#000000">SQL&gt; select count(*) from t1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; COUNT(*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />----------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; 8388608&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />SQL&gt; select segment_name,bytes/1024/1024 from user_segments where segment_name='T1';</font></p>
<p><font color="#000000">SEGMENT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTES/1024/1024<br />------------------------------ ---------------<br />T1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 142</font></p>
<p><font color="#000000">--上面可能会有时间类型的干扰,我们把时间字段删除<br />mysql&gt; alter table t1 drop column gmt_create;&nbsp;&nbsp;&nbsp; <br />Query OK, 8388609 rows affected (1 min 38.40 sec)<br />Records: 8388609&nbsp; Duplicates: 0&nbsp; Warnings: 0 </font></p>
<p><font color="#000000">[root@testapp74 test]# ls -lh<br />total 253M<br />-rw-rw----&nbsp; 1 mysql mysql&nbsp;&nbsp; 61 Jul 18 13:32 db.opt<br />-rw-rw----&nbsp; 1 mysql mysql 8.4K Jul 18 15:34 t1.frm<br />-rw-rw----&nbsp; 1 mysql mysql 252M Jul 18 15:36 t1.ibd</font></p>
<p><font color="#000000">--oracle,为了保证公平性(mysql每次ddl操作都会重构表,有一个copy的动作)，在drop完列后，并对表进行move<br />SQL&gt; alter table t1 drop column gmt_create;</font></p>
<p><font color="#000000">Table altered.</font></p>
<p><font color="#000000">SQL&gt; col segment_name for a30<br />SQL&gt; select segment_name,bytes/1024/1024 from user_segments where segment_name='T1';</font></p>
<p><font color="#000000">SEGMENT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTES/1024/1024<br />------------------------------ ---------------<br />T1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 142</font></p>
<p><font color="#000000">SQL&gt; alter table t1 move;</font></p>
<p><font color="#000000">Table altered.</font></p>
<p><font color="#000000">SQL&gt; select segment_name,bytes/1024/1024 from user_segments where segment_name='T1';</font></p>
<p><font color="#000000">SEGMENT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTES/1024/1024<br />------------------------------ ---------------<br />T1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 101</font></p>
<p><font color="#000000">--在此种实验情况下，我们可以看出,mysql所占用的空间是ORACLE所占用空间的两倍</font></p>
<p><br /><font color="#000000">&nbsp;&nbsp;&nbsp; <br />--看来varchar类型的字段,在列字段实际插入的字符长度之外，mysql在处理时还会多申请一些空间，可能这个主要是为了以后的更新作准备.<br />--这里还有另外一种现象，当插入的列值超过长度时,mysql并不返回应用端错误,而是&quot;help&quot;你truncate超过长度的字符串,然后再插入进去<br />--这个特性,如果在应用端没有做字符串长度检查，则可能会把我们的数据被截取了,而我们还不知道.<br />mysql&gt; show create table t1;<br />+-------+-----------------------------------<br />| Table | Create Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />+-------+-----------------------------------<br />| t1&nbsp;&nbsp;&nbsp; | CREATE TABLE `t1` (<br />&nbsp; `nick` varchar(32) DEFAULT NULL,<br />&nbsp; `gmt_create` datetime DEFAULT NULL<br />) ENGINE=InnoDB DEFAULT CHARSET=utf8 | <br />+-------+-----------------------------------<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into t1 values(rpad('a',50,'b'),now());<br />Query OK, 1 row affected, 1 warning (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; select rpad('a',50,'b');<br />+----------------------------------------------------+<br />| rpad('a',50,'b')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+----------------------------------------------------+<br />| abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb | <br />+----------------------------------------------------+<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; select length(rpad('a',50,'b'));<br />+--------------------------+<br />| length(rpad('a',50,'b')) |<br />+--------------------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50 | <br />+--------------------------+<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; select * from t1 where nick like 'abbbbbbbbbb%';<br />+----------------------------------+---------------------+<br />| nick&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | gmt_create&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+----------------------------------+---------------------+<br />| abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb | 2008-07-18 15:21:06 | <br />+----------------------------------+---------------------+<br />1 row in set (11.23 sec)</font></p>
<p><font color="#000000">mysql&gt; select length(nick),nick,gmt_create from t1 where nick like 'abbbbbbbbbb%';<br />+--------------+----------------------------------+---------------------+<br />| length(nick) | nick&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | gmt_create&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+--------------+----------------------------------+---------------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32 | abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb | 2008-07-18 15:21:06 | <br />+--------------+----------------------------------+---------------------+<br />1 row in set (11.21 sec) </font></p>
<p><br /><font color="#000000">知道的更多，我们才知道怎么更好的使用mysql.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>]]></description>
		</item>
		    
		
		<item>
			<title>自己写了一个小搜索引擎</title>
			<link>http://zhaolinjnu.blog.sohu.com/94811025.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/94811025.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Thu, 17 Jul 2008 16:26:03 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/94811025.html</guid>
			<description><![CDATA[<p><font color="#000000">&nbsp;&nbsp;&nbsp; 前一段时间，做了一个简单的搜索引擎。实现了一些简单的功能，比如说将数据从mysql database dump into memory.并可以根据标题关键字，or 用户id进行搜索.但与真正的搜索引擎(google,baidu)是有许多区别的，首先，数据已经在数据库里面了，不需要通过网络爬虫去抓网页(大学时，曾实现过一个网络爬虫).其次，没有创建倒排表，即创建搜索引擎的索引结构.还有重要的一点，不支持分布式。不过，做此东西，纯粹为了娱乐:)</font></p>
<p><font color="#000000">[mysql@my12 ~]$ ./search_dc</font></p>
<p><font color="#000000">Dump poster data end.Dump rows=4069</font></p>
<p><font color="#000000">Danchen Simple Search Engine<br />************************************************************<br />1.Search by User_id<br />2.Search by Title Key Word<br />3.Exit(0)<br />2</font></p>
<p><font color="#000000">--选择2，对标题进行搜索<br />2.Search by Title Key Word<br />Please input title key word , if you want to exit,please input exit<br />**********************************************************<br />小上衣<br />The Result of Searching as follows:<br />id=4077&nbsp;&nbsp;&nbsp; title=可爱MM雪纺小上衣&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />Search Key Word 小上衣 Search Result 1 Rows.</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">2.Search by Title Key Word<br />Please input title key word , if you want to exit,please input exit<br />**********************************************************<br />男人<br />The Result of Searching as follows:<br />id=45&nbsp;&nbsp;&nbsp; title=6款超短裙最受男人喜欢&nbsp;&nbsp;&nbsp;&nbsp; user_id=12074736<br />id=299&nbsp;&nbsp;&nbsp; title=2008新风向：男人要装 男装要色&nbsp;&nbsp;&nbsp;&nbsp; user_id=23889981<br />id=905&nbsp;&nbsp;&nbsp; title=全球男人最爱看的十大杂志&nbsp;&nbsp;&nbsp;&nbsp; user_id=286922<br />id=1302&nbsp;&nbsp;&nbsp; title=美国怀孕&amp;ldquo;男人&amp;rdquo;比提在家中割草&nbsp;&nbsp;&nbsp;&nbsp; user_id=2223<br />id=1516&nbsp;&nbsp;&nbsp; title=商务男人的时尚装备：蓝牙耳机&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />id=1616&nbsp;&nbsp;&nbsp; title=全美最性感男人贾斯汀&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />id=2092&nbsp;&nbsp;&nbsp; title=男人必备的36件单品&nbsp;&nbsp;&nbsp;&nbsp; user_id=2580<br />id=2295&nbsp;&nbsp;&nbsp; title=当男人和T恤爱上大海&nbsp;&nbsp;&nbsp;&nbsp; user_id=2580<br />id=2379&nbsp;&nbsp;&nbsp; title=男人装奥运史诗大片&nbsp;&nbsp;&nbsp;&nbsp; user_id=25794038<br />id=2796&nbsp;&nbsp;&nbsp; title=提升男人品位的10款配件&nbsp;&nbsp;&nbsp;&nbsp; user_id=286922<br />id=3242&nbsp;&nbsp;&nbsp; title=男人最爱清纯可人盘发发型diy&nbsp;&nbsp;&nbsp;&nbsp; user_id=25794038<br />id=3302&nbsp;&nbsp;&nbsp; title=男人最爱的甜美女生&nbsp;&nbsp;&nbsp;&nbsp; user_id=103355428<br />id=3511&nbsp;&nbsp;&nbsp; title=韩国优质男人纯棉T恤&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />id=4155&nbsp;&nbsp;&nbsp; title=男人最喜欢的发型&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />id=4184&nbsp;&nbsp;&nbsp; title=甜美派 男人赚爆100%回头率&nbsp;&nbsp;&nbsp;&nbsp; user_id=59707749<br />Search Key Word 男人 Search Result 15 Rows.</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">2.Search by Title Key Word<br />Please input title key word , if you want to exit,please input exit<br />**********************************************************<br />女人<br />The Result of Searching as follows:<br />id=85&nbsp;&nbsp;&nbsp; title=最能吸引女人的4种客厅&nbsp;&nbsp;&nbsp;&nbsp; user_id=25794038<br />id=183&nbsp;&nbsp;&nbsp; title=卷发卷出女人味 偷学明星卷发&nbsp;&nbsp;&nbsp;&nbsp; user_id=82288845<br />id=316&nbsp;&nbsp;&nbsp; title=45平公主房 小资女人最爱&nbsp;&nbsp;&nbsp;&nbsp; user_id=12074736<br />id=376&nbsp;&nbsp;&nbsp; title=魃惑女人香&nbsp;&nbsp;&nbsp;&nbsp; user_id=1208840<br />id=624&nbsp;&nbsp;&nbsp; title=[单身生活]45平米单身女人的完美空间~&nbsp;&nbsp;&nbsp;&nbsp; user_id=50126582<br />id=704&nbsp;&nbsp;&nbsp; title=3分钟立现慵懒女人味发型&nbsp;&nbsp;&nbsp;&nbsp; user_id=57331651<br />id=793&nbsp;&nbsp;&nbsp; title=盛夏细带凉鞋 甜蜜女人味&nbsp;&nbsp;&nbsp;&nbsp; user_id=103355428<br />id=978&nbsp;&nbsp;&nbsp; title=Verdissima泳装 细致有女人味&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=983&nbsp;&nbsp;&nbsp; title=性感泳装秀 别致女人味（一）&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />...<br />id=2059&nbsp;&nbsp;&nbsp; title=女人要嫁就嫁这种眼神的男人&nbsp;&nbsp;&nbsp;&nbsp; user_id=2580<br />id=2114&nbsp;&nbsp;&nbsp; title=精致文胸 让你做完美女人&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=2305&nbsp;&nbsp;&nbsp; title=武汉小女人的时尚搭配&nbsp;&nbsp;&nbsp;&nbsp; user_id=12074736<br />id=2530&nbsp;&nbsp;&nbsp; title=粉嫩蛋糕连衣裙 穿出十足女人味&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=2587&nbsp;&nbsp;&nbsp; title=时尚起义告诉你 怎样做气质女人？&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=2589&nbsp;&nbsp;&nbsp; title=08夏日 要做精致清新女人！&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=2593&nbsp;&nbsp;&nbsp; title=小可爱热卖包包 尽显女人无限风情！&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=2913&nbsp;&nbsp;&nbsp; title=女人味性感美鞋&nbsp;&nbsp;&nbsp;&nbsp; user_id=103355428<br />id=2987&nbsp;&nbsp;&nbsp; title=长裤也能穿出性感女人味 修长身材&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=3311&nbsp;&nbsp;&nbsp; title=百搭T恤 100%穿出完美女人味！&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=3509&nbsp;&nbsp;&nbsp; title=甜蜜小女人佩饰&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />id=3718&nbsp;&nbsp;&nbsp; title=水晶般晶莹剔透 梦幻女人专属OPPO手机&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=3862&nbsp;&nbsp;&nbsp; title=黄圣依沙滩性感装 教你瞬间提升女人味&nbsp;&nbsp;&nbsp;&nbsp; user_id=152423<br />id=4226&nbsp;&nbsp;&nbsp; title=比女人还漂亮的美艳男明星&nbsp;&nbsp;&nbsp;&nbsp; user_id=59707749<br />Search Key Word 女人 Search Result 36 Rows.</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">2.Search by Title Key Word<br />Please input title key word , if you want to exit,please input exit<br />**********************************************************<br />iphone<br />Search Key Word iphone Search Result 0 Rows.</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">2.Search by Title Key Word<br />Please input title key word , if you want to exit,please input exit<br />**********************************************************<br />love&nbsp;&nbsp;&nbsp; <br />The Result of Searching as follows:<br />id=3530&nbsp;&nbsp;&nbsp; title=日系super lover包款&nbsp;&nbsp;&nbsp;&nbsp; user_id=999336<br />Search Key Word love Search Result 1 Rows.</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><br /><font color="#000000">--选取择根据用户id进行搜索<br />Danchen Simple Search Engine<br />************************************************************<br />1.Search by User_id<br />2.Search by Title Key Word<br />3.Exit(0)<br />1</font></p>
<p><font color="#000000">1.Search by User_id<br />Please input user_id , if you want to exit,please input -1<br />**********************************************************<br />1147907<br />The Result of Searching as follows:<br />id=104&nbsp;&nbsp;&nbsp; title=诺基亚N73&amp;mdash;媛媛的性感可爱自拍片&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=105&nbsp;&nbsp;&nbsp; title=三星D908&amp;mdash;YAMI偶尔耍下小性感&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=106&nbsp;&nbsp;&nbsp; title=夏普903&amp;mdash;淘宝美容大王COCO小姐&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=109&nbsp;&nbsp;&nbsp; title=夏普903&amp;mdash;空姐的自拍&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=116&nbsp;&nbsp;&nbsp; title=Nokia N72&amp;mdash;我不是梁咏琪&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907</font></p>
<p><font color="#000000">...<br />id=1355&nbsp;&nbsp;&nbsp; title=南华大学MM超靓毕业照&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=1356&nbsp;&nbsp;&nbsp; title=如果你是我的传说&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907</font></p>
<p><font color="#000000">...<br />id=4043&nbsp;&nbsp;&nbsp; title=数码也可爱 Hello Kitty图集&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4056&nbsp;&nbsp;&nbsp; title=和MM相处的70小时后果?台电新机美女赏&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4058&nbsp;&nbsp;&nbsp; title=到底有啥不同!?iPhone新旧两代比拼&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4176&nbsp;&nbsp;&nbsp; title=黑白双煞争鸣!苹果iPhone 3G登陆&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4186&nbsp;&nbsp;&nbsp; title=超粉嫩的Hello Kitty手机&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4192&nbsp;&nbsp;&nbsp; title=08新款Hello Kitty手机挂件&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4267&nbsp;&nbsp;&nbsp; title=卡登仕iPhone 3G配件全球同步发售&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4268&nbsp;&nbsp;&nbsp; title=世界顶级摄影师&amp;ldquo;女魔头&amp;rdquo;的惊世摄影&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4300&nbsp;&nbsp;&nbsp; title=高清液晶520万超广角!夏普923SH&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4301&nbsp;&nbsp;&nbsp; title=漂亮MM御用手机!夏普825SH超可爱滑&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4305&nbsp;&nbsp;&nbsp; title=苹果iPhone 3G真机试用!&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />id=4306&nbsp;&nbsp;&nbsp; title=iPhone专用手枪蓝牙耳机&nbsp;&nbsp;&nbsp;&nbsp; user_id=1147907<br />Search Word user_id=1147907 Search Result 157 Rows.</font></p>
<p><font color="#000000">--选择0,退出系统<br />Danchen Simple Search Engine<br />************************************************************<br />1.Search by User_id<br />2.Search by Title Key Word<br />3.Exit(0)<br />0</font></p>
<p><font color="#000000">下面是程序文件，首先是程序主文件<br />#include&lt;stdio.h&gt;<br />#include&lt;string.h&gt;<br />#include &quot;mysql.h&quot;<br />#include &quot;dc_list_table.h&quot;<br />#include &quot;dc_mysql.h&quot;<br />int main()<br />{ <br />&nbsp;&nbsp; //mysql variables&nbsp;&nbsp; <br />&nbsp;&nbsp; MYSQL *p_conn=(MYSQL *)malloc(sizeof(MYSQL));</font></p>
<p><font color="#000000">&nbsp;&nbsp; //search variables<br />&nbsp;&nbsp; int v_user_id;<br />&nbsp;&nbsp; int v_id;<br />&nbsp;&nbsp; char v_title[50];<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; //function menu<br />&nbsp;&nbsp; int v_menu;<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; char *p_exit=&quot;exit&quot;;</font></p>
<p><font color="#000000">&nbsp;&nbsp; ListHead *LH=(ListHead *)malloc(sizeof(ListHead));&nbsp; <br />&nbsp;<br />&nbsp;&nbsp; char *p_sql=&quot;select id,title,user_id from poster&quot;;<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; if(!create_mysql_conn(p_conn)) return -1;</font></p>
<p><font color="#000000">&nbsp;&nbsp; modify_character_set(p_conn,&quot;gbk&quot;);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; Dump_Data(LH,p_conn,p_sql);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; mysql_close(p_conn);<br />&nbsp;&nbsp; </font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; //printf(&quot;\nPrint all datanode information\n&quot;);<br />&nbsp;&nbsp;&nbsp; //Print_ListNode(LH);</font></p>
<p><font color="#000000">&nbsp; printf(&quot;\nDanchen Simple Search Engine\n&quot;);<br />&nbsp; printf(&quot;************************************************************\n&quot;);<br />&nbsp; printf(&quot;1.Search by User_id\n&quot;);<br />&nbsp; printf(&quot;2.Search by Title Key Word\n&quot;);<br />&nbsp; printf(&quot;3.Exit(0)\n&quot;);<br />&nbsp; scanf(&quot;%d&quot;,&amp;v_menu);<br />&nbsp; while(v_menu&gt;=0)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; if(v_menu==1)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; printf(&quot;\n1.Search by User_id\n&quot;);<br />&nbsp;&nbsp;&nbsp; printf(&quot;Please input user_id , if you want to exit,please input -1\n&quot;);<br />&nbsp;&nbsp;&nbsp; printf(&quot;**********************************************************\n&quot;);<br />&nbsp;&nbsp;&nbsp; scanf(&quot;%d&quot;,&amp;v_user_id);<br />&nbsp;&nbsp;&nbsp; while(v_user_id!=-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Search_Data_By_user_id(LH,v_user_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\n1.Search by User_id\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Please input user_id , if you want to exit,please input -1\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;**********************************************************\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf(&quot;%d&quot;,&amp;v_user_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; if(v_menu==2)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; printf(&quot;\n2.Search by Title Key Word\n&quot;);<br />&nbsp;&nbsp;&nbsp; printf(&quot;Please input title key word , if you want to exit,please input exit\n&quot;);<br />&nbsp;&nbsp;&nbsp; printf(&quot;**********************************************************\n&quot;);<br />&nbsp;&nbsp;&nbsp; scanf(&quot;%s&quot;,&amp;v_title);<br />&nbsp;&nbsp;&nbsp; while(strcmp(v_title,p_exit)!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Search_Data_By_title(LH,v_title);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\n2.Search by Title Key Word\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Please input title key word , if you want to exit,please input exit\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;**********************************************************\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf(&quot;%s&quot;,&amp;v_title);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; if(v_menu==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Warning: Please input 0 or 1 or 2\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Danchen Simple Search Engine\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;************************************************************\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;1.Search by User_id\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;2.Search by Title Key Word\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;3.Exit(0)\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp; scanf(&quot;%d&quot;,&amp;v_menu);<br />&nbsp;&nbsp; }//end while</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; //free memory which is got by malloc()<br />&nbsp;&nbsp;&nbsp; Destroy_ListNode(LH);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; free(LH);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; return 0;<br />}</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">dc_mysql.h文件内容，主要是一些函数都放在这里<br />--创建连接<br />int create_mysql_conn(MYSQL *p_conn)<br />{<br />&nbsp;&nbsp; mysql_init(p_conn);<br />&nbsp;&nbsp; if (!mysql_real_connect(p_conn,&quot;192.19.68.11&quot;,&quot;test&quot;,&quot;test&quot;,&quot;poster&quot;,3306,NULL,0))<br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;connection mysql server failed\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;please check\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; else<br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;connection mysql server success\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />&nbsp;&nbsp; }<br />};</font></p>
<p><font color="#000000">--修改字符集<br />void modify_character_set(MYSQL *p_conn,char *csname)<br />{<br />&nbsp;&nbsp;&nbsp; if(mysql_set_character_set(p_conn,csname))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;set character set name failed\n&quot;);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;character_set is %s\n&quot;,mysql_character_set_name(p_conn));<br />&nbsp;&nbsp;&nbsp; }<br />};</font></p>
<p><font color="#000000">--从mysql database里面dump数据到内存<br />void Dump_Data(ListHead *LH,MYSQL *p_conn,char *p_sql)<br />{<br />&nbsp;&nbsp;&nbsp; //dump data from database to memory<br />&nbsp;&nbsp;&nbsp; //use linklist to storage the data<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; MYSQL_RES *rs;<br />&nbsp;&nbsp;&nbsp; MYSQL_ROW row;<br />&nbsp;&nbsp;&nbsp; int i=0;<br />&nbsp;&nbsp;&nbsp; DNode my_datanode; </font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; if(initlist(LH))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;init the linklist is ok\n&quot;);<br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;init the linklist failed\n&quot;);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; mysql_query(p_conn,p_sql);<br />&nbsp;&nbsp;&nbsp; rs=mysql_use_result(p_conn);<br />&nbsp;&nbsp;&nbsp; while(row=mysql_fetch_row(rs))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my_datanode.v_id=atoi(row[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my_datanode.v_title=row[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my_datanode.v_user_id=atoi(row[2]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Add_ListNode(LH,my_datanode))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;add data node success\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;add data node failed\n&quot;);<br />&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp; mysql_free_result(rs);<br />&nbsp;&nbsp;&nbsp; printf(&quot;\nDump poster data end.Dump rows=%d\n&quot;,Print_Dump_Count(LH));<br />};</font></p>
<p><br /><font color="#000000">--dc_list_table.h头文件,定义线性链表结构,dump出来的数据是放在此结构里<br />//list table struct and operation</font></p>
<p><font color="#000000">char *strcopy(char *a)<br />{<br />&nbsp;&nbsp;&nbsp; //copy char b from&nbsp; char a<br />&nbsp;&nbsp;&nbsp; int i;<br />&nbsp;&nbsp;&nbsp; char *b=(char *)malloc(51*sizeof(char));<br />&nbsp;&nbsp;&nbsp; for(i=0;*(a+i)!='\0';i++)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]=a[i];<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; //add the tail for b string<br />&nbsp;&nbsp;&nbsp; b[i]='\0';<br />&nbsp;&nbsp;&nbsp; return b;<br />}</font></p>
<p><font color="#000000">int exist_string(char *p_object_str,char *p_search_str)<br />{<br />&nbsp;&nbsp;&nbsp; int j,k;<br />&nbsp;&nbsp;&nbsp; int loc=-1;<br />&nbsp;&nbsp;&nbsp; int result=0;<br />&nbsp;&nbsp;&nbsp; int v_p_object_str_length;<br />&nbsp;&nbsp;&nbsp; //find the address of the first char exits in p_object_str<br />&nbsp;&nbsp;&nbsp; for(k=0;*(p_object_str+k)!='\0';k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(p_search_str[0]==p_object_str[k])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loc=k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; if(loc==-1) return result;</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; //get the length of p_object_str<br />&nbsp;&nbsp;&nbsp; v_p_object_str_length=strlen(p_object_str);</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; for(j=1;*(p_search_str+j)!='\0';j++)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loc++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(loc&gt;v_p_object_str_length) return result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(p_search_str[j] != p_object_str[loc])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; result=1;<br />&nbsp;&nbsp;&nbsp; return result;<br />};</font></p>
<p><font color="#000000">typedef struct DNode<br />{<br />&nbsp;&nbsp;&nbsp; int v_id;<br />&nbsp;&nbsp;&nbsp; int v_user_id;<br />&nbsp;&nbsp;&nbsp; char *v_title;<br />}DNode;</font></p>
<p><font color="#000000">typedef struct ListNode<br />{<br />&nbsp;&nbsp;&nbsp; DNode v_data;<br />&nbsp;&nbsp;&nbsp; struct ListNode *next;<br />}ListNode;</font></p>
<p><font color="#000000">typedef struct ListHead<br />{<br />&nbsp;&nbsp;&nbsp; struct ListNode *head;<br />&nbsp;&nbsp;&nbsp; struct ListNode *tail;<br />}ListHead;</font></p>
<p><br /><font color="#000000">int initlist(ListHead *LH)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(LH)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LH-&gt;head=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LH-&gt;tail=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />};</font></p>
<p><br /><font color="#000000">int Add_ListNode(ListHead *LH,DNode v_datanode)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp; ListNode *tmp_listnode=(ListNode *)malloc(sizeof(ListNode));<br />&nbsp;&nbsp;&nbsp;&nbsp; if(tmp_listnode)<br />&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp_listnode-&gt;v_data.v_id=v_datanode.v_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp_listnode-&gt;v_data.v_title=strcopy(v_datanode.v_title);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp_listnode-&gt;v_data.v_user_id=v_datanode.v_user_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp_listnode-&gt;next=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; if(LH-&gt;head==NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LH-&gt;head=tmp_listnode;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LH-&gt;tail=tmp_listnode;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //modify the current last listnode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LH-&gt;tail-&gt;next=tmp_listnode;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //modify the control node<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LH-&gt;tail=tmp_listnode;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />};</font></p>
<p><br /><font color="#000000">int Find_ListNode(ListHead *LH,DNode v_datanode)<br />{<br />&nbsp;&nbsp;&nbsp; if(!LH) return 0;<br />&nbsp;&nbsp;&nbsp; if(LH-&gt;tail==NULL) return 0;<br />&nbsp;&nbsp;&nbsp; ListNode *p;<br />&nbsp;&nbsp;&nbsp; DNode v_dn;<br />&nbsp;&nbsp;&nbsp; p=LH-&gt;head;<br />&nbsp;&nbsp;&nbsp; while(p)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_dn=p-&gt;v_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(v_dn.v_id==v_datanode.v_id &amp;&amp; v_dn.v_user_id==v_datanode.v_user_id )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=p-&gt;next; <br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; return 0;<br />};</font></p>
<p><font color="#000000">--根据userid搜索实现函数<br />int Search_Data_By_user_id(ListHead *LH,int v_user_id)<br />{<br />&nbsp;&nbsp;&nbsp; if(!LH) return 0;<br />&nbsp;&nbsp;&nbsp; if(LH-&gt;tail==NULL) return 0;<br />&nbsp;&nbsp;&nbsp; int i;<br />&nbsp;&nbsp;&nbsp; ListNode *p;<br />&nbsp;&nbsp;&nbsp; DNode v_dn;<br />&nbsp;&nbsp;&nbsp; p=LH-&gt;head;<br />&nbsp;&nbsp;&nbsp; i=0;<br />&nbsp;&nbsp;&nbsp; while(p)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_dn=p-&gt;v_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(v_dn.v_user_id==v_user_id)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i==1) printf(&quot;The Result of Searching as follows:\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;id=%d&nbsp;&nbsp;&nbsp; title=%s&nbsp;&nbsp;&nbsp;&nbsp; user_id=%ld\n&quot;,v_dn.v_id,v_dn.v_title,v_dn.v_user_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=p-&gt;next;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Search Word user_id=%d Search Result %d Rows.\n&quot;,v_user_id,i);<br />&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />};</font></p>
<p><font color="#000000">--根据标题搜索实现函数<br />int Search_Data_By_title(ListHead *LH,char *p_title)<br />{<br />&nbsp;&nbsp;&nbsp; if(!LH) return 0;<br />&nbsp;&nbsp;&nbsp; if(LH-&gt;tail==NULL) return 0;<br />&nbsp;&nbsp;&nbsp; int i;<br />&nbsp;&nbsp;&nbsp; ListNode *p;<br />&nbsp;&nbsp;&nbsp; DNode v_dn;<br />&nbsp;&nbsp;&nbsp; p=LH-&gt;head;<br />&nbsp;&nbsp;&nbsp; i=0;<br />&nbsp;&nbsp;&nbsp; while(p)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_dn=p-&gt;v_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(exist_string(v_dn.v_title,p_title))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i==1) printf(&quot;The Result of Searching as follows:\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;id=%d&nbsp;&nbsp;&nbsp; title=%s&nbsp;&nbsp;&nbsp;&nbsp; user_id=%ld\n&quot;,v_dn.v_id,v_dn.v_title,v_dn.v_user_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=p-&gt;next;<br />&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Search Key Word %s Search Result %d Rows.\n&quot;,p_title,i);<br />&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />};</font></p>
<p><font color="#000000">int Print_ListNode(ListHead *LH)<br />{<br />&nbsp;&nbsp;&nbsp; if(!LH) return 0;<br />&nbsp;&nbsp;&nbsp; if(LH-&gt;tail==NULL) return 0;<br />&nbsp;&nbsp;&nbsp; int i;<br />&nbsp;&nbsp;&nbsp; ListNode *p;<br />&nbsp;&nbsp;&nbsp; DNode v_dn;<br />&nbsp;&nbsp;&nbsp; p=LH-&gt;head;<br />&nbsp;&nbsp;&nbsp; i=0;<br />&nbsp;&nbsp;&nbsp; while(p)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_dn=p-&gt;v_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;rownum=%d&nbsp;&nbsp; id=%d&nbsp;&nbsp;&nbsp; title=%s&nbsp;&nbsp;&nbsp;&nbsp; user_id=%ld\n&quot;,i,v_dn.v_id,v_dn.v_title,v_dn.v_user_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=p-&gt;next;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return 1;<br />};</font></p>
<p><font color="#000000">int Print_Dump_Count(ListHead *LH)<br />{<br />&nbsp;&nbsp;&nbsp; if(!LH) return 0;<br />&nbsp;&nbsp;&nbsp; if(LH-&gt;tail==NULL) return 0;<br />&nbsp;&nbsp;&nbsp; int i;<br />&nbsp;&nbsp;&nbsp; ListNode *p;<br />&nbsp;&nbsp;&nbsp; p=LH-&gt;head;<br />&nbsp;&nbsp;&nbsp; i=0;<br />&nbsp;&nbsp;&nbsp; while(p)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=p-&gt;next;<br />&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; return i;<br />};</font></p>
<p><font color="#000000">int Destroy_ListNode(ListHead *LH)<br />{<br />&nbsp;&nbsp;&nbsp; ListNode *p_free,*p_head;<br />&nbsp;&nbsp;&nbsp; if(LH-&gt;head==NULL) return 1;<br />&nbsp;&nbsp;&nbsp; p_free=LH-&gt;head;<br />&nbsp;&nbsp;&nbsp; while(p_free-&gt;next)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_head=p_free-&gt;next;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free(p_free);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_free=p_head;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; return 1;<br />};</font></p>
<p><br /><font color="#000000">上面文件编写好后，执行编译命令,就可以得到最终的可执行文件<br />gcc search_dc.c -I /usr/include/mysql/ -L /usr/lib/mysql/ -lmysqlclient -o search_dc</font></p>]]></description>
		</item>
		    
		
		<item>
			<title>我们需要创新精神</title>
			<link>http://zhaolinjnu.blog.sohu.com/94519351.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/94519351.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Mon, 14 Jul 2008 15:55:51 +0800</pubDate>
			<category>生活</category>
			<guid>http://zhaolinjnu.blog.sohu.com/94519351.html</guid>
			<description><![CDATA[<p><font color="#000000">下面是一篇引文：</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; 17个四甲基对苯醌分子就是它的全部零件。这个世界上最小的计算机有望让一切纳米装置具备智能。人们设想将它装入纳米机械&ldquo;盔甲&rdquo;，注入人的血液，成为与癌细胞战斗的&ldquo;钢铁侠&rdquo;。 </font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; 日本国立材料科学研究所的安尼尔班-班德亚帕德耶博士这样形容四甲基对苯醌：&ldquo;它看上去就像小汽车。&rdquo;他通常会在特殊的电子显微镜下研究这种有机物分子。在镜头下，这辆&ldquo;小汽车&rdquo;拥有六边形苯环组成的&ldquo;车身&rdquo;，有4个圆锥体模样的碳氢&ldquo;车轮&rdquo;联接其上，而整个分子直径小于1纳米，比可见光的波长还要小数百倍。 </font></p>
<p><font color="#000000">班德亚帕德耶希望用17个这样的分子拼凑出一部计算机。 </font></p>
<p><font color="#000000"><strong>只有17个分子的微型大脑 </strong></font></p>
<p><font color="#000000">在日本筑波市的实验室里，班德亚帕德耶每天在重复这样的工作：让这17辆&ldquo;小汽车&rdquo;在黄金基板做成的&ldquo;训练场&rdquo;上排列成一个&ldquo;车队&rdquo;，这一步骤必须在-196℃的真空环境里进行。他将其中一个四甲基对苯醌分子放置在中央，充当控制部门，其他16个分子则环绕它排成一圈。装置完成之后，这个17个分子组成的&ldquo;车队&rdquo;就能在室温条件下正常工作了。 </font></p>
<p><font color="#000000">接着，班德亚帕德耶用一个非常锋利的带电传导针对放置在中心的&ldquo;小汽车&rdquo;进行电脉冲调节。由于中心&ldquo;小汽车&rdquo;与周围的16个&ldquo;小汽车&rdquo;存在微弱的物理关联性，因此，当中心&ldquo;小汽车&rdquo;受到电脉冲调节而&ldquo;挂档&rdquo;，其他的16个&ldquo;小汽车&rdquo;也被发动起来。整个装置像一面蜘蛛网，位于中心的蜘蛛一旦移动，16根蜘蛛丝也会产生不同程度的颤动，这种颤动随着不同强度的电脉冲变化，形成不同的&ldquo;信息&rdquo;。 </font></p>
<p><font color="#000000">这些电脉冲的变化，会被利用来充当计算机运算的逻辑基础。目前家庭中通用的晶体管计算机，仅能利用电脉冲的打开、关闭，构成运算需要的两种逻辑状态：0和1，即俗称&ldquo;二进制&rdquo;。而班德亚帕德耶的&ldquo;分子晶体管&rdquo;则拥有4个碳氢圆锥体结构，本质上就有4个不同的方向，从而拥有四种逻辑状态：0，1，2，3。&ldquo;最亮的是3，而0是最暗的。&rdquo;班德亚帕德耶指着电脑屏幕上的图像上讲解道。从理论上计算：一个电脉冲信号可以得出416个不同结果，也就是近43亿种结果。目前这部纳米计算机的运算速度是普通晶体管计算机的16倍，&ldquo;如果将这个分子装置从二维16分子环状结构扩展至三维的1024分子球状结构，就能同时执行1024个指令，比普通电脑快上1024倍。&rdquo; </font></p>
<p><font color="#000000">班德亚帕德耶承认，这项设计的灵感来源于人类的大脑细胞，大脑细胞呈现树状放射分支形状，每一个分支都可用于与其他分支细胞进行沟通。&ldquo;人类大脑比任何超级计算机都复杂，大脑的平行分支运算法是其中关键。&rdquo;班德亚帕德耶自信地说，&ldquo;我们的研究做到了一个处理器在作出指令时，也必须同时影响其他处理器。这意味着什么？意味着每一个分子都能独立思考并彼此沟通，这将是人类创造的第一个纳米大脑。&rdquo; </font></p>
<p><font color="#000000"><strong>电子计算机&ldquo;黔驴技穷&rdquo;</strong> </font></p>
<p><font color="#000000">班德亚帕德耶不止一次听到人工智能专家的抱怨：在涉及到天气预测、微生物基因扫描和需要处理大量微分子数据的纳米领域，计算机的运算速度已经跟不上形势。19世纪爱尔兰数学家威廉-哈米尔顿曾提出这样一个问题：给出一系列任意的城市，每次只经过一个城市，连接所有城市的最短路径是哪一条？不少数学家曾经试图利用计算机来解答这一问题，但他们很快发现：如果城市有100个，连目前最快的超级计算机也要耗费上亿年的时间去计算。 </font></p>
<p><font color="#000000">每个人都希望发展出运算能力更强的电子计算机。计算机运算速度的快慢，取决于芯片上集成晶体管数目的多少。但随着芯片上线路密度的增加，其复杂性和差错率也将呈指数增长。一旦芯片上线条的宽度达到纳米数量级时，这种情况下材料的物理、化学性能将发生质的变化，导致采用现行工艺的半导体器件不能正常工作。 </font></p>
<p><font color="#000000">这种情况让美国迈特公司的纳米技术专家詹姆斯-埃伦博根教授坚信，班德亚帕德耶博士的成果具有重大的意义：&ldquo;一旦我们掌握了制造这种体积不超过盐粒大的计算机的技术，我们就会从根本上处于一种新的形势。自然界有各种分子，到目前为止，直接利用自然界中的分子来制造计算机，是我所知道的突破计算机运算极限的唯一方式。&rdquo; </font></p>
<p><font color="#000000">&ldquo;人工智能专家们已开始认识到，如果要制造和人脑一样复杂的电脑，模仿生物学是他们的最佳选择。&rdquo;美国马萨诸塞州库日韦尔技术公司的雷?库日韦尔说，&ldquo;因此，电脑公司和大学研究人员都忙着学习生物学速成课程。&rdquo;2003年，以色列魏兹曼研究院耶胡达-夏皮罗教授在试管中研制出具有数学计算功能的分子计算机，这台计算机只有一滴水滴大小，却包含有数目繁多的器件。它用酶做硬件，用DNA分子作为软件，内部包含有1万亿个活的细胞，每秒钟可完成10亿次计算，准确率高达99.8%。但夏皮罗的同事伊塔玛尔-魏兹曼强调，研究的主要意图并不在于突出分子计算机的运算速度：&ldquo;我们希望分子计算机能够实现生物监控设备的作用，譬如，它植入人体内可以监控患者药剂使用状况和生理反应。&rdquo; </font></p>
<p><font color="#000000"><strong>有脑子的纳米机器人 </strong></font></p>
<p><font color="#000000">班德亚帕德耶对分子计算机在医学领域的应用很感兴趣：&ldquo;设想装配这样的分子仪器并植入血液中，或许能够摧毁人体内的癌细胞。&rdquo;2008年4月，美国加利福尼亚大学洛杉矶分校的研究人员在这方面领先了一步，他们造出了可以储藏、输送抗癌药物并在光的作用下释放药物攻击癌细胞的分子装置。该装置由中孔硅纳米粒子制成，其内部细孔涂覆了化学物质偶氮苯，抗癌药物可以装载在这种细孔中。由于偶氮苯具有光致变色特性，在光的作用下具有两种振动形态。研究人员首先让上述装置在黑暗中进入置于玻璃器皿中的人类癌细胞内，然后用光照射使它振动，分子装置细孔中的抗癌药物随之被释放出来攻击癌细胞。 </font></p>
<p><font color="#000000">这套操作装置有个时髦的称呼：&ldquo;纳米机器人&rdquo;。班德亚帕德耶还有更有趣的想法：造一个纳米计算机，然后将&ldquo;主机&rdquo;与分子构成的发动机、推进器、转换装置、电梯、传感器等结合在一起，使它们有机地结合成一个整体。他开始为分子计算机寻找一种与其他装置对接的方法，&ldquo;目前它已经可以与8种混合装置对接，工作起来就像一个微型工厂。我还要把它变成有记忆和行动能力的纳米机器人。&rdquo; </font></p>
<p><font color="#000000">南巴黎大学分子光物理实验室的迪雅尔丹教授认为，这种想法需要满足苛刻的条件：&ldquo;首先是化学领域创造出纳米级的单分子机械机构，其次是找到精确控制单分子的方法，第三是研制出可传递信息的机器人&quot;大脑&quot;装置。&rdquo; </font></p>
<p><font color="#000000">第一个条件已经渐渐成为现实：2007年被法国图卢兹材料设计和结构研究中心与德国柏林大学的科学家们&ldquo;组装&rdquo;出来的纳米机器&ldquo;分子轮&rdquo;，就由两个直径为0.7纳米的三苯甲基分子&ldquo;车轮&rdquo;组成。研究人员借助扫描探针式显微镜(SPM)的电子探针来驱动&ldquo;车轮&rdquo;旋转。 </font></p>
<p><font color="#000000">电子探针位于SPM的终端，科学家像操纵游戏机杠杆一样操纵它与样品表面轻轻接触，根据探针与样品表面极其微弱的排斥力变化，再通过光学或电流原理将其进行放大和分析，测定出样品表面的形貌信息和探针所处的位置，并把它的活动放大上亿倍后在电脑屏幕上显示出来。SPM探针带有电性，因此人们通常顺便用它来控制操作镜头下的单分子，1989年，IBM公司操纵35个氙原子，在镍金属表面拼出&ldquo;IBM&rdquo;三个字母，开了纳米微操作先河。 </font></p>
<p><font color="#000000">班德亚帕德耶同样采用了这种方法，但它并非理想的首选。SPM探针明显比他的分子&ldquo;小汽车&rdquo;要大上许多，用来操纵他的&ldquo;小汽车&rdquo;，就如同现实世界中用树枝来拨弄小蚂蚁的每一条腿一样困难。班德亚帕德耶希望未来可以使用分子代替带电传导针实现对微型纳米电脑的控制。&ldquo;这样第二、第三个条件也能满足了。&rdquo; </font></p>
<p><font color="#000000">尽管总体上看，短时间内制造出科幻中的高智能纳米机器人似乎不大可能，但迪雅尔丹教授的话代表了纳米领域科学家们的乐观：&ldquo;</font><font color="#6600ff">在纳米机器人产生前，人们会一直认为研制它们是不可思议的事，其实好好想一下，不可思议的不是研究本身，而正是人类自己的思想。 <br /></font></p>
<p><font color="#000000">2008.07.14&nbsp;&nbsp;来自：新华网</font></p>
<p><font color="#000000">网址：</font><a href="http://news.csdn.net/n/20080714/117340.html"><font color="#000000">http://news.csdn.net/n/20080714/117340.html</font></a></p>]]></description>
		</item>
		    
		
		<item>
			<title>工作两年</title>
			<link>http://zhaolinjnu.blog.sohu.com/94280500.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/94280500.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Fri, 11 Jul 2008 15:42:40 +0800</pubDate>
			<category>生活</category>
			<guid>http://zhaolinjnu.blog.sohu.com/94280500.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000000">2008年7月3日，按照劳动合同的入职时间，不惊异间，我已经在TAOBAO工作两年了。在这两年的时间，我收获了许多，工作经验，个人成长，爱情，每一样都很珍贵。</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 曾经在年初时把本blog的主题改为Data &amp; Architecture,即数据与体系结构，在这半年的时间里,从收藏夹系统的优化开始，接着是评价系统是优化，再接着是用户中心的优化，最近提出的数据库分布式解决方案，以及实时搜索引擎dump方案改进。去年年底，已经开始采用的数据库交叉体系结构，以及在中低端存储上应用高端存储创建raid组的方法。通过以上许许多多典型的案例，个人觉得，我不是在朝着数据与体系结构目标前进，而是我一直都在这么做，已经形成了一种不知不觉的惯性。</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在报警短信少了，各大核心系统运行正常，可以睡一些安稳觉了。虽然少了这些报警的干扰，但最近老是醒得很早。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>]]></description>
		</item>
		    
		
		<item>
			<title>超过了max_allowed_packet，会怎么样？</title>
			<link>http://zhaolinjnu.blog.sohu.com/93896591.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/93896591.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Mon, 7 Jul 2008 14:36:43 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/93896591.html</guid>
			<description><![CDATA[<p><font color="#000000">max_allowed_packet,故名思义为能够处理的最大通信信息包大小，在客户端或者服务器端都可以设置。当处理BLOG字段时，需要注意此参数的设置。下面是示例过程：</font></p>
<p><font color="#000000">mysql&gt; show variables like '%packet%';<br />+--------------------+-------+<br />| Variable_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Value |<br />+--------------------+-------+<br />| max_allowed_packet | 1024&nbsp; |<br />+--------------------+-------+<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt;<br />mysql&gt;<br />mysql&gt;<br />mysql&gt; use test;<br />Database changed<br />mysql&gt; CREATE TABLE `t4` (<br />&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; `id` int(11) DEFAULT NULL,<br />&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; `message` blob<br />&nbsp;&nbsp;&nbsp; -&gt; ) ENGINE=myisam DEFAULT CHARSET=utf8;<br />Query OK, 0 rows affected (0.09 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into t4 values(1,repeat('aaaabbbbcc',1000));<br />ERROR 1301 (HY000): Result of repeat() was larger than max_allowed_packet (1024)<br />&nbsp;- truncated<br />mysql&gt; select * from t4;<br />Empty set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into t4 values(1,repeat('aaaabbbbcc',10));<br />Query OK, 1 row affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; select length(message) from t4;<br />+-----------------+<br />| length(message) |<br />+-----------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100 |<br />+-----------------+<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into t4 values(2,repeat('a',1024));<br />Query OK, 1 row affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into t4 values(2,repeat('a',1025));<br /><font color="#ff0000">ERROR 1301 (HY000): Result of repeat() was larger than max_allowed_packet (1024)<br />&nbsp;- truncated<br /></font>mysql&gt; select length(message) from t4;<br />+-----------------+<br />| length(message) |<br />+-----------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100 |<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024 |<br />+-----------------+<br />2 rows in set (0.00 sec)<br /></font></p>]]></description>
		</item>
		    
		
		<item>
			<title>MYSQL_innodb的加锁机制实验</title>
			<link>http://zhaolinjnu.blog.sohu.com/93313082.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/93313082.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Tue, 1 Jul 2008 10:12:54 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/93313082.html</guid>
			<description><![CDATA[<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MYSQL innodb在一定程度上实现了行锁的功能，在功能上与ORACLE差不多。但innodb行锁的实现与oracle不相同，innodb的行锁加在索引上，如果没有索引，整张表都会被锁定，下面是实验过程。<br />--session 1</font></p>
<p><font color="#000000">mysql&gt; create table test(id int,nick varchar(32)) engine=innodb ;<br />Query OK, 0 rows affected (0.05 sec)</font></p>
<p><font color="#000000">mysql&gt; <br />mysql&gt; <br />mysql&gt; set autocommit=off;<br />Query OK, 0 rows affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into test values(1,'a');<br />Query OK, 1 row affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into test values(2,'b');&nbsp; <br />Query OK, 1 row affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into test values(3,'c');&nbsp; <br />Query OK, 1 row affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; insert into test values(4,'d');&nbsp; <br />Query OK, 1 row affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; commit;<br />Query OK, 0 rows affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; select * from test;<br />+------+------+<br />| id&nbsp;&nbsp; | nick |<br />+------+------+<br />|&nbsp;&nbsp;&nbsp; 1 | a&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 2 | b&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 3 | c&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 4 | d&nbsp;&nbsp;&nbsp; | <br />+------+------+<br />4 rows in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; <br />mysql&gt; <br />mysql&gt; update test set nick='lock_a' where id=1;<br />Query OK, 1 row affected (0.00 sec)<br />Rows matched: 1&nbsp; Changed: 1&nbsp; Warnings: 0</font></p>
<p><font color="#000000">--session 2<br />mysql&gt; select * from test;<br />+------+------+<br />| id&nbsp;&nbsp; | nick |<br />+------+------+<br />|&nbsp;&nbsp;&nbsp; 1 | a&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 2 | b&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 3 | c&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 4 | d&nbsp;&nbsp;&nbsp; | <br />+------+------+<br />4 rows in set (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; update test set nick='lock_b' where id=2;<br />Query OK, 1 row affected (1 min 29.90 sec)&nbsp;&nbsp; --等待很长的时间，直到session 1提交为止<br />Rows matched: 1&nbsp; Changed: 1&nbsp; Warnings: 0</font></p>
<p><font color="#000000">mysql&gt; commit;<br />Query OK, 0 rows affected (0.00 sec)</font></p>
<p><font color="#000000">mysql&gt; select * from test;<br />+------+--------+<br />| id&nbsp;&nbsp; | nick&nbsp;&nbsp; |<br />+------+--------+<br />|&nbsp;&nbsp;&nbsp; 1 | lock_a | <br />|&nbsp;&nbsp;&nbsp; 2 | lock_b | <br />|&nbsp;&nbsp;&nbsp; 3 | c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />|&nbsp;&nbsp;&nbsp; 4 | d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />+------+--------+<br />4 rows in set (0.00 sec)</font></p>
<p><br /><font color="#000000">如果在test表的id列上创建索引，再观察一下加锁情况<br />--session 1<br />mysql&gt; create unique index uk_test_id on test(id);<br />Query OK, 4 rows affected (0.07 sec)<br />Records: 4&nbsp; Duplicates: 0&nbsp; Warnings: 0</font></p>
<p><font color="#000000">mysql&gt; <br />mysql&gt; update test set nick='lock_aa' where id=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />Query OK, 1 row affected (0.00 sec)<br />Rows matched: 1&nbsp; Changed: 1&nbsp; Warnings: 0</font></p>
<p><font color="#000000">更新后，但并不提交，执行session 2的更新语句，发现立刻执行完<br />--session 2<br />mysql&gt; update test set nick='lock_bb' where id=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />Query OK, 1 row affected (0.00 sec)<br />Rows matched: 1&nbsp; Changed: 1&nbsp; Warnings: 0</font></p>
<p><font color="#000000">--session 1,session 2<br />mysql&gt; commit;<br />Query OK, 0 rows affected (0.00 sec)<br /></font></p>]]></description>
		</item>
		    
		
		<item>
			<title>MYISAM索引文件损坏的修复方法</title>
			<link>http://zhaolinjnu.blog.sohu.com/91489522.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/91489522.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Mon, 7 Jul 2008 13:23:09 +0800</pubDate>
			<guid>http://zhaolinjnu.blog.sohu.com/91489522.html</guid>
			<description><![CDATA[<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; 使用MYISAM存储引擎，当创建一个表时，会出现三个文件：数据文件MYD，索引文件MYI,格式文件frm。当索引文件损坏时或者丢失时，可以用如下的方法进行修复。下面是实验过程。</font></p>
<p><font color="#000000">[mysql@testapp74 notify]$ mv message_ignore.MYI message_ignore.MYI.bak<br />[mysql@testapp74 notify]$ <br />[mysql@testapp74 notify]$ mysqld_safe &amp;<br />[1] 26267<br />[mysql@testapp74 notify]$ 080630 14:19:03 mysqld_safe Logging to '/usr/mysql_data/log/alert.log'.<br />080630 14:19:03 mysqld_safe Starting mysqld daemon with databases from /usr/mysql_data/data</font></p>
<p><font color="#000000">[mysql@testapp74 notify]$ <br />[mysql@testapp74 notify]$ <br />[mysql@testapp74 notify]$ <br />[mysql@testapp74 notify]$ vi /usr/mysql_data/log/alert.log</font></p>
<p><font color="#000000">080630 14:18:14 [Note] /usr/sbin/mysqld: Normal shutdown</font></p>
<p><font color="#000000">080630 14:18:14 [Note] Event Scheduler: Purging the queue. 0 events<br />080630 14:18:16&nbsp; InnoDB: Starting shutdown...<br />080630 14:18:19&nbsp; InnoDB: Shutdown completed; log sequence number 162 783173592<br />080630 14:18:19 [Note] /usr/sbin/mysqld: Shutdown complete</font></p>
<p><font color="#000000">080630 14:18:19 mysqld_safe mysqld from pid file /usr/mysql_data/data/testapp74.pid ended<br />080630 14:19:03 mysqld_safe Starting mysqld daemon with databases from /usr/mysql_data/data<br />080630 14:19:03&nbsp; InnoDB: Started; log sequence number 162 783173592<br />080630 14:19:03 [Note] Event Scheduler: Loaded 0 events<br />080630 14:19:03 [Note] /usr/sbin/mysqld: ready for connections.<br />Version: '5.1.23-rc-community'&nbsp; socket: '/tmp/mysql.sock'&nbsp; port: 3306&nbsp; MySQL Community Edition (GPL)</font></p>
<p><font color="#000000">从上面可以看出，当一个表出现问题，mysql的警告日志并没有任何的错误出现。</font></p>
<p><font color="#000000">[mysql@testapp74 notify]$ mysql -uroot<br />Welcome to the MySQL monitor.&nbsp; Commands end with ; or \g.<br />Your MySQL connection id is 4<br />Server version: 5.1.23-rc-community MySQL Community Edition (GPL)</font></p>
<p><font color="#000000">Type 'help;' or '\h' for help. Type '\c' to clear the buffer.</font></p>
<p><font color="#000000">mysql&gt; use notify<br />Reading table information for completion of table and column names<br />You can turn off this feature to get a quicker startup with -A</font></p>
<p><font color="#000000">Database changed<br />mysql&gt; <br />mysql&gt; <br />mysql&gt; <br />mysql&gt; <br />mysql&gt; select * from message_ignore limit 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --当查询表时，会报错<br />ERROR 1017 (HY000): Can't find file: 'message_ignore' (errno: 2)<br /></font></p>
<p><font color="#000000">mysql&gt; check table message_ignore;<br />+-----------------------+-------+----------+----------------------------------------------+<br />| Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Op&nbsp;&nbsp;&nbsp; | Msg_type | Msg_text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+-----------------------+-------+----------+----------------------------------------------+<br />| notify.message_ignore | check | Error&nbsp;&nbsp;&nbsp; | Can't find file: 'message_ignore' (errno: 2) | <br />| notify.message_ignore | check | error&nbsp;&nbsp;&nbsp; | Corrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />+-----------------------+-------+----------+----------------------------------------------+<br />2 rows in set (0.03 sec)</font></p>
<p><font color="#000000">mysql&gt; <br />mysql&gt; repair table message_ignore;<br />+-----------------------+--------+----------+----------------------------------------------+<br />| Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Op&nbsp;&nbsp;&nbsp;&nbsp; | Msg_type | Msg_text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+-----------------------+--------+----------+----------------------------------------------+<br />| notify.message_ignore | repair | Error&nbsp;&nbsp;&nbsp; | Can't find file: 'message_ignore' (errno: 2) | <br />| notify.message_ignore | repair | error&nbsp;&nbsp;&nbsp; | Corrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />+-----------------------+--------+----------+----------------------------------------------+<br />2 rows in set (0.00 sec)</font></p>
<p><font color="#000000">使用格式化文件frm重新创建索引文件<br />mysql&gt; repair table message_ignore USE_FRM;<br />+-----------------------+--------+----------+----------+<br />| Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Op&nbsp;&nbsp;&nbsp;&nbsp; | Msg_type | Msg_text |<br />+-----------------------+--------+----------+----------+<br />| notify.message_ignore | repair | status&nbsp;&nbsp; | OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />+-----------------------+--------+----------+----------+<br />1 row in set (0.02 sec)</font></p>
<p><font color="#000000">mysql&gt; <br />mysql&gt; check table message_ignore;<br />+-----------------------+-------+----------+----------+<br />| Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Op&nbsp;&nbsp;&nbsp; | Msg_type | Msg_text |<br />+-----------------------+-------+----------+----------+<br />| notify.message_ignore | check | status&nbsp;&nbsp; | OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />+-----------------------+-------+----------+----------+<br />1 row in set (0.02 sec)</font></p>
<p><font color="#000000">修复后，数据可以正常查询</font></p>
<p><font color="#000000">mysql&gt; select * from message_ignore limit 1;<br />Empty set (0.00 sec)<br /></font></p>
<p><font color="#000000">如果是格式化文件frm损坏，可以从slave拷贝过来即可，或者从备份中恢复。</font></p>
<p><font color="#000000">附录，在哪些情况下，myisam存储引擎的表容易损坏：</font></p>
<div>
<div>
<div>
<h4><a name="corrupted-myisam-tables"></a><font color="#000000">14.1.4.1.&nbsp;Corrupted <code>MyISAM</code> Tables</font></h4></div></div></div>
<p><font color="#000000">Even though the <code>MyISAM</code> table format is very reliable (all changes to a table made by an SQL statement are written before the statement returns), you can still get corrupted tables if any of the following events occur: </font></p>
<div>
<ul>
<li>
<p><font color="#000000">The <span><strong>mysqld</strong></span> process is killed in the middle of a write. </font></p>
</li><li>
<p><font color="#000000">An unexpected computer shutdown occurs (for example, the computer is turned off). </font></p>
</li><li>
<p><font color="#000000">Hardware failures. </font></p>
</li><li>
<p><font color="#000000">You are using an external program (such as <span><strong>myisamchk</strong></span>) to modify a table that is being modified by the server at the same time. </font></p>
</li><li>
<p><font color="#000000">A software bug in the MySQL or <code>MyISAM</code> code. </font></p></li></ul></div>]]></description>
		</item>
		    
		
		<item>
			<title>oracle 10g压缩备份效率不错</title>
			<link>http://zhaolinjnu.blog.sohu.com/90539280.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/90539280.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Thu, 19 Jun 2008 17:15:46 +0800</pubDate>
			<category>Oracle</category>
			<guid>http://zhaolinjnu.blog.sohu.com/90539280.html</guid>
			<description><![CDATA[<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; 采用oracle 10g的压缩备份方式，将会大大缩小备份集的大小，在本实例的测试中，压缩比为5:1左右，结果是比较不错的。下面将以常规备份与压缩备份两种备份方式，备份同一个数据库的结果：</font></p>
<p><font color="#000000">常规备份方式：</font></p>
<p><font color="#000000">RMAN&gt; backup database<br />2&gt; format 'd:\test_db_%U_%s.bak';</font></p>
<p><font color="#000000">启动 backup 于 19-6月 -08<br />使用通道 ORA_DISK_1<br />通道 ORA_DISK_1: 启动全部数据文件备份集<br />通道 ORA_DISK_1: 正在指定备份集中的数据文件<br />输入数据文件 fno=00001 name=C:\ORADATA\TEST\SYSTEM01.DBF<br />输入数据文件 fno=00003 name=C:\ORADATA\TEST\SYSAUX01.DBF<br />输入数据文件 fno=00002 name=C:\ORADATA\TEST\UNDOTBS01.DBF<br />输入数据文件 fno=00004 name=C:\ORADATA\TEST\USERS01.DBF<br />通道 ORA_DISK_1: 正在启动段 1 于 19-6月 -08<br />通道 ORA_DISK_1: 已完成段 1 于 19-6月 -08<br />段句柄=D:\TEST_DB_07JJB5ML_1_1_7.BAK 标记=TAG20080619T164405 注释=NONE<br />通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:25<br />通道 ORA_DISK_1: 启动全部数据文件备份集<br />通道 ORA_DISK_1: 正在指定备份集中的数据文件<br />备份集中包括当前控制文件<br />在备份集中包含当前的 SPFILE<br />通道 ORA_DISK_1: 正在启动段 1 于 19-6月 -08<br />通道 ORA_DISK_1: 已完成段 1 于 19-6月 -08<br />段句柄=D:\TEST_DB_08JJB5PA_1_1_8.BAK 标记=TAG20080619T164405 注释=NONE<br />通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04<br />完成 backup 于 19-6月 -08</font></p>
<p><font color="#000000">生成的备份集大小为581M左右</font></p>
<p><font color="#000000">采用压缩备份方式：</font></p>
<p><font color="#000000">RMAN&gt; backup as compressed backupset database<br />2&gt; format 'D:\test_db_com_%U_%s.bak';</font></p>
<p><font color="#000000">启动 backup 于 19-6月 -08<br />使用通道 ORA_DISK_1<br />通道 ORA_DISK_1: 启动压缩的全部数据文件备份集<br />通道 ORA_DISK_1: 正在指定备份集中的数据文件<br />输入数据文件 fno=00001 name=C:\ORADATA\TEST\SYSTEM01.DBF<br />输入数据文件 fno=00003 name=C:\ORADATA\TEST\SYSAUX01.DBF<br />输入数据文件 fno=00002 name=C:\ORADATA\TEST\UNDOTBS01.DBF<br />输入数据文件 fno=00004 name=C:\ORADATA\TEST\USERS01.DBF<br />通道 ORA_DISK_1: 正在启动段 1 于 19-6月 -08<br />通道 ORA_DISK_1: 已完成段 1 于 19-6月 -08<br />段句柄=D:\TEST_DB_COM_0BJJB6O2_1_1_11.BAK 标记=TAG20080619T170154 注释=NONE<br />通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:45<br />通道 ORA_DISK_1: 启动压缩的全部数据文件备份集<br />通道 ORA_DISK_1: 正在指定备份集中的数据文件<br />备份集中包括当前控制文件<br />在备份集中包含当前的 SPFILE<br />通道 ORA_DISK_1: 正在启动段 1 于 19-6月 -08<br />通道 ORA_DISK_1: 已完成段 1 于 19-6月 -08<br />段句柄=D:\TEST_DB_COM_0CJJB6PF_1_1_12.BAK 标记=TAG20080619T170154 注释=NONE<br />通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03<br />完成 backup 于 19-6月 -08</font></p>
<p><font color="#000000">生成的备份集大小为106M</font></p>
<p><font color="#000000">如果是数据仓库的数据库，采用压缩备份方式应该是一个不错的选择。节省的空间将是惊人的。</font></p>]]></description>
		</item>
		    
		
		<item>
			<title>火热的DBA招聘</title>
			<link>http://zhaolinjnu.blog.sohu.com/86512488.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/86512488.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Fri, 9 May 2008 16:31:50 +0800</pubDate>
			<category>招聘</category>
			<guid>http://zhaolinjnu.blog.sohu.com/86512488.html</guid>
			<description><![CDATA[<p><font color="#000000">当前公司还几个DBA名额，主要分为两个方向：产品DBA 和 运维DBA</font></p>
<p><font color="#000000">产品DBA主要负责项目与日常需求，此岗位的要求如下:</font></p>
<ul>
<li><font color="#000000">良好的系统思维能力，以及洞察力；</font></li>
<li><font color="#000000">良好的学习能力与沟通能力；</font></li>
<li><font color="#000000">熟悉ORACLE的运行机制；</font></li>
<li><font color="#000000">编写过一定数量的程序代码,编写过高质量的程序代码者优先；</font></li>
<li><font color="#000000">有OCP证书者优先</font></li></ul>
<p><font color="#000000">运维DBA要求如下：</font></p>
<ul>
<li><font color="#000000">熟悉ORACLE DATAGUARD；</font></li>
<li><font color="#000000">熟悉ORACLE备份与恢复；</font></li>
<li><font color="#000000">熟悉ORACLE的运行机制；</font></li>
<li><font color="#000000">会编写shell/perl脚本；</font></li>
<li><font color="#000000">熟悉AIX，linux操作系统</font></li>
<li><font color="#000000">做事仔细认真；</font></li>
<li><font color="#000000">良好的学习能力与沟通能力；</font></li></ul>
<p><font color="#000000">另外，还我们还在继续招聘MySQL DBA,要求如下：</font></p>
<ul>
<li><font color="#000000">精通/熟悉MySQL数据库的运行机制和体系架构</font></li>
<li><font color="#000000">精通/熟悉MySQL数据库的管理，经验丰富者优先</font></li>
<li><font color="#000000">精通/熟悉MySQL复制，熟悉MySQL Cluster</font></li>
<li><font color="#000000">精通/熟悉SQL</font></li>
<li><font color="#000000">熟悉linux操作系统的使用</font></li>
<li><font color="#000000">熟悉shell&amp;perl编程</font></li></ul>
<p><font color="#000000">简历发送至zhaolinjnu(at)163.com, 我们期待您的简历。</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">&nbsp;</font></p>
<p><font color="#000000">&nbsp;</font></p>]]></description>
		</item>
		    
		
		<item>
			<title>优化SQL的另类思考</title>
			<link>http://zhaolinjnu.blog.sohu.com/86137968.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/86137968.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Thu, 1 May 2008 09:19:21 +0800</pubDate>
			<category>Oracle</category>
			<guid>http://zhaolinjnu.blog.sohu.com/86137968.html</guid>
			<description><![CDATA[<p><font color="#000000">今天给大家介绍一个SQL优化案例，这是statpack中逻辑读排名第一的SQL.当前创建的索引建在(username,ends,approve_status,promoted_status)上。<br />&nbsp;</font></p>
<p><font color="#000000">Buffer Gets&nbsp;&nbsp;&nbsp; Executions&nbsp; Gets per Exec&nbsp; %Total Time (s)&nbsp; Time (s) Hash Value<br />------------- ------------ -------------- ------ -------- --------- ----------<br />116,608,373&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 164,083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 710.7&nbsp;&nbsp; 40.6&nbsp; 7027.07&nbsp; 11922.30 3701069644<br />Module: java@test.cm2 (TNS V1-V3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select count(*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from test<br />&nbsp;&nbsp; where&nbsp; username = :1&nbsp;&nbsp;&nbsp; --这是一个高势列，<br />&nbsp;&nbsp; and&nbsp;&nbsp;&nbsp; ends&gt;sysdate <br />&nbsp;&nbsp; and approve_status in (0,1,-9) <br />&nbsp;&nbsp; and id &lt;&gt; :2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --这是主键<br />&nbsp;&nbsp; and promoted_status = 1<br /></font></p>
<p><font color="#000000">如果大家见到这样的SQL语句会怎么样优化？通常的做法，是在当前索引中冗余id字段，以避免回表。但这样要去调整这张大表的索引.</font></p>
<p><font color="#000000">在看到上面的SQL后，询问开发能否明确的知道id=:2并且满足其它条件的这样的记录是否一定存在。开发经过查证后，最后的答复是无法肯定.既然在应用层无法确定，那也要想个办法来解决大量回表的问题。在经过仔细观察后，我将上面这条SQL语句转换成下面两条SQL以及最后一步应用逻辑来实现：</font></p>
<p><font color="#000000">第一条SQL：<br />Select/*+ index(a, PK_test_ID) */ count(*)&nbsp;&nbsp; from test a<br />&nbsp;&nbsp; where id=:1 and&nbsp; ends&gt;sysdate and approve_status in (0,1,-9)&nbsp; and promoted_status = 1 and username=:2<br /><br />第二条SQL：<br />select count(*)&nbsp;&nbsp;&nbsp; from test<br />&nbsp;&nbsp; where&nbsp; username = :1 and&nbsp;&nbsp;&nbsp;&nbsp; ends&gt;sysdate and approve_status in (0,1,-9) and&nbsp;&nbsp;&nbsp;&nbsp; and promoted_status = 1<br /></font></p>
<p><font color="#000000">第三步，将两个结果相减即可实现业务</font></p>
<p><font color="#000000">我们在做SQL优化时，如何把一条SQL根据需要等价转化成多条，需要考虑当前的应用逻辑，以及当前数据库中索引的情况，优化便会事半功倍。如何跳出ORACLE去思考问题，希望这个优化案例能对大家有所启示。<br /></font></p>]]></description>
		</item>
		    
		
	</channel>
</rss>
