<?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>icez network &#187; mysql</title>
	<atom:link href="http://www.icez.net/blog/tags/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.icez.net/blog</link>
	<description>Technical Blog by icez network</description>
	<lastBuildDate>Mon, 30 Jan 2012 17:31:37 +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>0061 &#124; PHP simple object cache</title>
		<link>http://www.icez.net/blog/111/php-simple-object-cache</link>
		<comments>http://www.icez.net/blog/111/php-simple-object-cache#comments</comments>
		<pubDate>Tue, 02 Jun 2009 16:32:51 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PHP Coding]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=111</guid>
		<description><![CDATA[ระบบ cache มาอีกแล้ว เอ๊อกๆ คราวนี้เป็น object cache ครับ ไม่ใช่ cache ทั้งหน้าแบบคราวก่อน &#60;?php $_cachetime = 3600; $_cacheroot = '/path/to/cache/'; function cacheget&#40;$key&#41; &#123; global $_cachetime, $_cacheroot; $_cachename = sprintf&#40;'%x', crc32&#40;$key&#41;&#41;; $_cachefolder = $_cacheroot.substr&#40;$_cachename,0,2&#41;.'/'; $_cachefile = $_cachefolder.$_cachename; if &#40;file_exists&#40;$_cachefile&#41; &#38;&#38; &#40;filemtime&#40;$_cachefile&#41; &#62; time&#40;&#41; - $_cachetime &#124;&#124; &#40;file_exists&#40;$_cachefile.'.lock'&#41; &#38;&#38; time&#40;&#41; - filemtime&#40;$_cachefile.'.lock'&#41; &#60; 120&#41;&#41;&#41; &#123; return unserialize&#40;file_get_contents&#40;$_cachefile&#41;&#41;; &#125; return [...]]]></description>
			<content:encoded><![CDATA[<p>ระบบ cache มาอีกแล้ว เอ๊อกๆ<br />
คราวนี้เป็น object cache ครับ ไม่ใช่ cache ทั้งหน้าแบบคราวก่อน</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$_cachetime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_cacheroot</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/path/to/cache/'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> cacheget<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$_cachetime</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_cacheroot</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%x'</span><span style="color: #339933;">,</span> <span style="color: #990000;">crc32</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachefolder</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cacheroot</span><span style="color: #339933;">.</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachefile</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">.</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$_cachetime</span> <span style="color: #339933;">||</span> 
		<span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.lock'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.lock'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">120</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">unserialize</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">function</span> cachelock<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$_cacheroot</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%x</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">crc32</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachefolder</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cacheroot</span><span style="color: #339933;">.</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachefile</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">.</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">umask</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefolder</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">,</span><span style="color: #208080;">0777</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #990000;">touch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.lock'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">function</span> cacheset<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$_cacheroot</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%x'</span><span style="color: #339933;">,</span> <span style="color: #990000;">crc32</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachefolder</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cacheroot</span><span style="color: #339933;">.</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_cachefile</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">.</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">umask</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefolder</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">,</span><span style="color: #208080;">0777</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_h</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_h</span><span style="color: #339933;">,</span> <span style="color: #990000;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_h</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.lock'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>วิธีติดตั้ง: </p>
<p>include ไฟล์ไปบนสุดเลย แก้ตัวแปร $_cacheroot กับ $_cachetime ด้วยนะครับ<br />
chmod 777 folder ตามที่ตั้งใน $_cacheroot ไว้ด้วย</p>
<p>วิธีเรียกใช้:</p>
<p>สมมติว่า cache คำสั่ง sql นะครับ<br />
ถ้าปกติใช้อย่างนี้</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT * FROM table'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>ก็แก้เป็นประมาณนี้</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT * FROM table'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$rows</span> <span style="color: #339933;">=</span> cacheget<span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        cachelock<span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$rows</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                <span style="color: #000088;">$rows</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #339933;">;</span>
        cacheset<span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rows</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rows</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/111/php-simple-object-cache/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>0060 &#124; PHP Dynamic page static HTML generator</title>
		<link>http://www.icez.net/blog/102/php-dynamic-page-static-html-generator</link>
		<comments>http://www.icez.net/blog/102/php-dynamic-page-static-html-generator#comments</comments>
		<pubDate>Mon, 25 May 2009 16:59:30 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[PHP Coding]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=102</guid>
		<description><![CDATA[ชื่อยาวเป็นวา code อะไรวะ (วันหลังมา search จะเจอมั้ยเนี่ยตู 555) code นี้แปะด้านบนสุดของไฟล์ (จะใส่ใน auto prepend เลยก็ยังไหว) &#60;?php $_cachetime = 43200; $_info = parse_url&#40;$_SERVER&#91;&#34;REQUEST_URI&#34;&#93;&#41;; if &#40;!isset&#40;$_info&#91;'query'&#93;&#41;&#41; $_info&#91;'query'&#93; = ''; $_path = end&#40;explode&#40;'/', $_info&#91;'path'&#93;&#41;&#41;; $_info&#91;'query'&#93; = str_replace&#40;'&#38;nocache', '', $_info&#91;'query'&#93;&#41;; $_info&#91;'query'&#93; = str_replace&#40;'nocache&#38;', '', $_info&#91;'query'&#93;&#41;; $_info&#91;'query'&#93; = str_replace&#40;'nocache', '', $_info&#91;'query'&#93;&#41;; $_cachename = sprintf&#40;&#34;%x&#34;, crc32&#40;$_path.&#34;?&#34;.$_info&#91;'query'&#93;&#41;&#41;; $_cachefolder = '/path/to/cache/'.substr&#40;$_cachename,0,2&#41;.'/'; $_cachefile = $_cachefolder.$_cachename; if [...]]]></description>
			<content:encoded><![CDATA[<p>ชื่อยาวเป็นวา code อะไรวะ (วันหลังมา search จะเจอมั้ยเนี่ยตู 555)</p>
<p>code นี้แปะด้านบนสุดของไฟล์ (จะใส่ใน auto prepend เลยก็ยังไหว)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$_cachetime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">43200</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_info</span> <span style="color: #339933;">=</span> <span style="color: #990000;">parse_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REQUEST_URI&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_path</span> <span style="color: #339933;">=</span> <span style="color: #990000;">end</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'path'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;nocache'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nocache&amp;'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nocache'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_cachename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%x</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">crc32</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_path</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;?&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_cachefolder</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/path/to/cache/'</span><span style="color: #339933;">.</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_cachefile</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">.</span><span style="color: #000088;">$_cachename</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REQUEST_URI&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'/'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REQUEST_METHOD&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'GET'</span> <span style="color: #339933;">&amp;&amp;</span>
    <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;nocache&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span>
    <span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$_cachetime</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">readfile</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">function</span> fetch_cache<span style="color: #009900;">&#40;</span><span style="color: #000088;">$_buffer</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$_cachefile</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">umask</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefolder</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                <span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefolder</span><span style="color: #339933;">,</span><span style="color: #208080;">0777</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_h</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_cachefile</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_h</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_buffer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_h</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$_buffer</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">ob_start</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fetch_cache'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>code นี้ใส่ด้านท้าย (ใน auto append ก็ได้นะครับ)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">ob_end_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>* แก้ไขเพิ่ม 2009/05/28</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/102/php-dynamic-page-static-html-generator/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>0031 &#124; MySQL: my.cnf</title>
		<link>http://www.icez.net/blog/38/mysql-mycnf</link>
		<comments>http://www.icez.net/blog/38/mysql-mycnf#comments</comments>
		<pubDate>Tue, 02 Sep 2008 07:31:06 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=38</guid>
		<description><![CDATA[เอามาเก็บไว้ฮะ สำหรับแรม 4gb ฐานข้อมูลขนาด 1 gb [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 set-variable=local-infile=0 skip-character-set-client-handshake skip-name-resolve skip-bdb max_connections = 600 key_buffer = 512M myisam_sort_buffer_size = 32M join_buffer_size = 1M read_buffer_size = 2M sort_buffer_size = 4M table_cache = [...]]]></description>
			<content:encoded><![CDATA[<p>เอามาเก็บไว้ฮะ สำหรับแรม 4gb ฐานข้อมูลขนาด 1 gb</p>
<blockquote>
<pre>[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
set-variable=local-infile=0
skip-character-set-client-handshake
skip-name-resolve
skip-bdb
max_connections = 600
key_buffer = 512M
myisam_sort_buffer_size = 32M
join_buffer_size = 1M
read_buffer_size = 2M
sort_buffer_size = 4M
table_cache = 1536
thread_cache = 8
thread_concurrency = 4
thread_cache_size = 256
wait_timeout = 600
connect_timeout = 10
max_tmp_tables = 256
tmp_table_size = 64M
max_allowed_packet = 16M
max_connect_errors = 10
query_cache_limit = 1M
query_cache_size = 32M
query_cache_type = 1
query_prealloc_size = 16384
query_alloc_block_size = 16384
log_slow_queries
log_queries_not_using_indexes

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open_files_limit = 8192</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/38/mysql-mycnf/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>0021 &#124; วิธีนับจำนวนแถว (record) ในตาราง</title>
		<link>http://www.icez.net/blog/25/%e0%b8%a7%e0%b8%b4%e0%b8%98%e0%b8%b5%e0%b8%99%e0%b8%b1%e0%b8%9a%e0%b8%88%e0%b8%b3%e0%b8%99%e0%b8%a7%e0%b8%99%e0%b9%81%e0%b8%96%e0%b8%a7-record-%e0%b9%83%e0%b8%99%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2</link>
		<comments>http://www.icez.net/blog/25/%e0%b8%a7%e0%b8%b4%e0%b8%98%e0%b8%b5%e0%b8%99%e0%b8%b1%e0%b8%9a%e0%b8%88%e0%b8%b3%e0%b8%99%e0%b8%a7%e0%b8%99%e0%b9%81%e0%b8%96%e0%b8%a7-record-%e0%b9%83%e0%b8%99%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2#comments</comments>
		<pubDate>Sun, 15 Jun 2008 08:02:57 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PHP Coding]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=25</guid>
		<description><![CDATA[ดองไว้นานเชียะ = =&#8217; ขออภัยด้วยครับ แบบว่าขี้เกียจเขียน เอ้ย งานยุ่งๆ มหาลัยเปิดเทอมแล้ว ตารางเรียนเห็นแล้วแทบบ้า เอาวันหยุดของตูคืนมา เอาวันหยุดของตูคืนมา T_T เข้าประเด็นเลยดีกว่า ช่วงนี้มีงานประเภทนี้เยอะครับ เห็นแล้วก็เซ็งไอ้คนเขียนเว็บคนเก่าที่ทำระบบมาจริงๆ คุณพี่เขียนไว้อย่างนี้ครับ&#8230;. $sql = mysql_query&#40;&#34;SELECT * FROM table&#34;&#41;; $records = mysql_num_rows&#40;$sql&#41;; ไอ้อันที่จริงมันก็ไม่ผิดอะไรหรอกครับถ้าจะใช้แบบนี้ เพราะ code มันก็ทำงานได้ปกติสุขดีของมัน แต่&#8230; ใครจะรู้มั้ยครับ ว่า mysql มันต้องส่งข้อมูลมากขนาดไหน สมมติว่า ตารางมีขนาด 1 MB การ query นี้จะทำให้ mysql ต้องส่งข้อมูลขนาด 1 MB ให้ client ที่ทำการ query แล้ว client จะเป็นผู้นับจำนวนแถวเอง ลองคิดดูว่าถ้าตารางเราเกิดมีขนาด 10 MB [...]]]></description>
			<content:encoded><![CDATA[<p>ดองไว้นานเชียะ = =&#8217;<br />
ขออภัยด้วยครับ แบบว่าขี้เกียจเขียน เอ้ย งานยุ่งๆ<br />
มหาลัยเปิดเทอมแล้ว ตารางเรียนเห็นแล้วแทบบ้า<br />
เอาวันหยุดของตูคืนมา เอาวันหยุดของตูคืนมา T_T</p>
<p>เข้าประเด็นเลยดีกว่า</p>
<p>ช่วงนี้มีงานประเภทนี้เยอะครับ เห็นแล้วก็เซ็งไอ้คนเขียนเว็บคนเก่าที่ทำระบบมาจริงๆ<br />
คุณพี่เขียนไว้อย่างนี้ครับ&#8230;.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT * FROM table&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$records</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_num_rows</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>ไอ้อันที่จริงมันก็ไม่ผิดอะไรหรอกครับถ้าจะใช้แบบนี้ เพราะ code มันก็ทำงานได้ปกติสุขดีของมัน<br />
แต่&#8230; ใครจะรู้มั้ยครับ ว่า mysql มันต้องส่งข้อมูลมากขนาดไหน</p>
<p>สมมติว่า ตารางมีขนาด 1 MB<br />
การ query นี้จะทำให้ mysql ต้องส่งข้อมูลขนาด 1 MB ให้ client ที่ทำการ query<br />
แล้ว client จะเป็นผู้นับจำนวนแถวเอง<br />
ลองคิดดูว่าถ้าตารางเราเกิดมีขนาด 10 MB หรือมีคนเข้าเยอะๆ นะครับ<br />
สมมติ ตารางเดิม ขนาด 1 MB<br />
แต่คนเข้า &#8220;แค่&#8221; นาทีละ 60 ครั้ง (ตกวินาทีละ 1 ครั้ง)<br />
เท่ากับ Database Server ต้องส่งข้อมูลให้ client ถึงวินาทีละ 1 MB<br />
&#8230;<br />
ถ้าขนาดฐานข้อมูลใหญ่ขึ้น<br />
ถ้าคนเข้าเยอะขึ้น&#8230; ลองคิดดูครับว่ามันจะเปลืองทรัพยากรระบบขนาดไหน</p>
<p>วิธีนับจำนวน record จริงๆ ที่ใช้กันทั่วไปในระบบใหญ่ๆ เค้าใช้กันแบบนี้ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT COUNT(*) FROM table&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$records</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$res</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>จำนวนบรรทัดเยอะขึ้น 1 บรรทัด แต่การทำงานลดลงฮวบฮาบผิดกันลิบๆ</p>
<p>* คำสั่ง SELECT COUNT(*) ห้ามเอาไปใช้กับตารางประเภท InnoDB โดยเด็ดขาดนะครับ<br />
มิเช่นนั้น database server อาจน็อคเอาได้ง่ายๆ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/25/%e0%b8%a7%e0%b8%b4%e0%b8%98%e0%b8%b5%e0%b8%99%e0%b8%b1%e0%b8%9a%e0%b8%88%e0%b8%b3%e0%b8%99%e0%b8%a7%e0%b8%99%e0%b9%81%e0%b8%96%e0%b8%a7-record-%e0%b9%83%e0%b8%99%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>0019 &#124; สารบัญนั้นสำคัญไฉน&#8230; (ว่าด้วย MySQL Index)</title>
		<link>http://www.icez.net/blog/23/%e0%b8%aa%e0%b8%b2%e0%b8%a3%e0%b8%9a%e0%b8%b1%e0%b8%8d%e0%b8%99%e0%b8%b1%e0%b9%89%e0%b8%99%e0%b8%aa%e0%b8%b3%e0%b8%84%e0%b8%b1%e0%b8%8d%e0%b9%84%e0%b8%89%e0%b8%99</link>
		<comments>http://www.icez.net/blog/23/%e0%b8%aa%e0%b8%b2%e0%b8%a3%e0%b8%9a%e0%b8%b1%e0%b8%8d%e0%b8%99%e0%b8%b1%e0%b9%89%e0%b8%99%e0%b8%aa%e0%b8%b3%e0%b8%84%e0%b8%b1%e0%b8%8d%e0%b9%84%e0%b8%89%e0%b8%99#comments</comments>
		<pubDate>Wed, 28 May 2008 11:48:28 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=23</guid>
		<description><![CDATA[ดองไว้ตั้งนานแล้วครับ entry นี้ เคยเกริ่นๆ ไว้ตั้งนานแล้วด้วยแหละ เรื่องนี้ถือเป็นเรื่องใหญ่มากๆ ครับในการออกแบบฐานข้อมูลบน MySQL เนื่องด้วยมันจะมีผลต่อความเร็วในการค้นหาข้อมูลมาก ถึงมากที่สุด เคสที่ยังใช้งานน้อยๆ เช่นมีการเรียกใช้แค่ นาทีละไม่ถึงสามสิบครั้ง อะไรอย่างนี้อาจจะไม่ค่อยเห็นผลเท่าไหร่ แต่พอมีการใช้งานเยอะๆ ดูสิครับ&#8230; ไม่อยากบรรยายถึงความเละสุดอนาถเลยแหละ ทีนี้ จะดูยังไงว่าเราควรจะสร้างฐานข้อมูลยังไง ออกแบบยังไงให้มีประสิทธิภาพ ตรงนี้ต้องดูการเรียกใช้งานของเราครับ เช่น&#8230; อ้อ ลืมไป ยกตัวอย่างไม่ได้ ต้องสร้างตารางก่อน CREATE TABLE users &#40; id INT NOT NULL DEFAULT '0' AUTO_INCREMENT, username VARCHAR&#40;24&#41; NOT NULL DEFAULT '', password VARCHAR&#40;32&#41; NOT NULL DEFAULT '', email VARCHAR&#40;64&#41; NOT NULL DEFAULT '', [...]]]></description>
			<content:encoded><![CDATA[<p>ดองไว้ตั้งนานแล้วครับ entry นี้<br />
เคยเกริ่นๆ ไว้ตั้งนานแล้วด้วยแหละ</p>
<p>เรื่องนี้ถือเป็นเรื่องใหญ่มากๆ ครับในการออกแบบฐานข้อมูลบน MySQL<br />
เนื่องด้วยมันจะมีผลต่อความเร็วในการค้นหาข้อมูลมาก ถึงมากที่สุด<br />
เคสที่ยังใช้งานน้อยๆ เช่นมีการเรียกใช้แค่ นาทีละไม่ถึงสามสิบครั้ง อะไรอย่างนี้อาจจะไม่ค่อยเห็นผลเท่าไหร่<br />
แต่พอมีการใช้งานเยอะๆ ดูสิครับ&#8230; ไม่อยากบรรยายถึงความเละสุดอนาถเลยแหละ</p>
<p>ทีนี้ จะดูยังไงว่าเราควรจะสร้างฐานข้อมูลยังไง ออกแบบยังไงให้มีประสิทธิภาพ<br />
ตรงนี้ต้องดูการเรียกใช้งานของเราครับ เช่น&#8230;</p>
<p>อ้อ ลืมไป ยกตัวอย่างไม่ได้ ต้องสร้างตารางก่อน</p>
<blockquote>

<div class="wp_syntax"><div class="code"><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> users <span style="color: #66cc66;">&#40;</span>
    id <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #ff0000;">'0'</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #66cc66;">,</span>
    username <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">24</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">,</span>
    password <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">,</span>
    email <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">,</span>
    <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span> Engine<span style="color: #66cc66;">=</span>MyISAM;</pre></div></div>

</blockquote>
<p>ในการนี้เราจะได้ตาราง users มี 4 field คือ id, username, password และ email<br />
ทีนี้ สมมติเราต้องการดึงค่า email ออกมาจากตาราง โดยหาจาก username ก็ต้อง query แบบนี้</p>
<blockquote>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> email <span style="color: #993333; font-weight: bold;">FROM</span> users <span style="color: #993333; font-weight: bold;">WHERE</span> username <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'xxxxxxx'</span>;</pre></div></div>

</blockquote>
<p>เงื่อนไขการค้นหาก็จะเป็น ค้นหาจาก ตาราง users โดยดูใน field username ที่มีค่าเท่ากับ &#8216;xxxxxxx&#8217;</p>
<p>กรณีที่เรายังไม่ได้ทำ Index ให้ตารางนี้&#8230;<br />
MySQL จะเปิดตารางขึ้นมา(จาก harddisk) จากนั้นก็เริ่มตั้งแต่ record แรกสุด<br />
เรียกข้อมูลใน field username ออกมาเทียบค่า ถ้าไม่ใช่ก็หาต่อไปเรื่อยๆ จนกว่าจะเจอ<br />
ซึ่งกรณีเลวร้ายที่สุด คือค้นหาไม่เจอเลย จะทำให้ MySQL ต้องทำการอ่านข้อมูลจากตารางเยอะมาก<br />
กลายเป็นว่า ต้องอ่านข้อมูลทั้งตารางเพื่อหาว่า user นี้อยู่ที่ record ไหน</p>
<p>สมมติพอทำ Index ปุ๊ป MySQL ก็จะเข้ามาอ่าน Index ที่มีอยู่<br />
ซึ่งโดยปกติ index จะพยายามเก็บในแรมครับ แต่ก็มี file ที่เก็บบน harddisk เหมือนกัน<br />
แล้วก็เทียบค่าไปเรื่อยๆ แต่แรมมันเร็วกว่า hdd เยอะครับ&#8230;<br />
จากนั้น พอเจอแล้ว เจ้า index นี่ก็จะเป็นตัวบอกว่า ข้อมูลนี้อยู่ที่ตำแหน่งตรงไหนของแฟ้ม<br />
ก็เลยทำให้ MySQL กระโดดไปเอาข้อมูลมาได้เลยครับ</p>
<p>คำสั่งเพิ่ม index ให้ตารางที่มีอยู่แล้วใช้อย่างนี้ครับ</p>
<blockquote>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> users <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> <span style="color: #66cc66;">&#40;</span>username<span style="color: #66cc66;">&#41;</span></pre></div></div>

</blockquote>
<p>.</p>
<p>เดี๋ยวจะมาอธิบายการตรวจสอบ query อีกที ง่วงมากเลยตอนนี้ T_T</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/23/%e0%b8%aa%e0%b8%b2%e0%b8%a3%e0%b8%9a%e0%b8%b1%e0%b8%8d%e0%b8%99%e0%b8%b1%e0%b9%89%e0%b8%99%e0%b8%aa%e0%b8%b3%e0%b8%84%e0%b8%b1%e0%b8%8d%e0%b9%84%e0%b8%89%e0%b8%99/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>0014 &#124; MySQL Replicate</title>
		<link>http://www.icez.net/blog/18/mysql-replicate</link>
		<comments>http://www.icez.net/blog/18/mysql-replicate#comments</comments>
		<pubDate>Wed, 14 May 2008 06:40:31 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[load balance]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[postmunlife]]></category>
		<category><![CDATA[replicate]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=18</guid>
		<description><![CDATA[* บทความนี้อ้างอิงและประยุกต์มาจากเว็บไซต์ต่อไปนี้ DNSThailand.com &#8211; เทคนิคการใช้ Replication ระดับสูงใน MySQL CATTelecom.com &#8211; กิตติชน แม้นสมุทร [ejeepss] » Replicate MySQL 5.x สืบเนื่องจาก entry ที่แล้ว ก็เลยลองไปค้นๆ ข้อมูลเพิ่มเติมดูอีกหน่อยว่าเราลืมอะไรไปบ้าง เพราะนึกได้ว่ายังไม่ได้ลองทำ MySQL Replicate เลย (ฮาๆ) ประเด็นคือไม่รู้ว่ามันช้าที่ฐานข้อมูลรึเปล่า เพราะ debug ไม่เจอสาเหตุ ก็เลยต้องลองทำเท่าที่ทำได้ไปก่อน ขั้นต้นก็ต้องมี server 2 เครื่องขึ้นไปครับ โดยสมมติเครื่องแรก ชื่อ web-slave เครื่องที่สอง ชื่อ db-master ก่อนอื่นมาที่เครื่อง web-slave สั่งติดตั้ง mysql server ตามนี้ครับ * อ้างอิง Fedora 8 ครอบคลุม Fedora 4 [...]]]></description>
			<content:encoded><![CDATA[<p>* บทความนี้อ้างอิงและประยุกต์มาจากเว็บไซต์ต่อไปนี้<br />
DNSThailand.com &#8211;  				<a href="http://www.dnsthailand.net/index.php?option=com_content&amp;task=view&amp;id=105&amp;Itemid=36">เทคนิคการใช้ Replication ระดับสูงใน MySQL</a><br />
CATTelecom.com &#8211; <a href="http://catadmin.cattelecom.com/km/blog/kittichonm/category/step-by-step/replicate-mysql-5x/" target="_blank">กิตติชน แม้นสมุทร [ejeepss] » Replicate MySQL 5.x</a></p>
<p>สืบเนื่องจาก entry ที่แล้ว<br />
ก็เลยลองไปค้นๆ ข้อมูลเพิ่มเติมดูอีกหน่อยว่าเราลืมอะไรไปบ้าง<br />
เพราะนึกได้ว่ายังไม่ได้ลองทำ MySQL Replicate เลย (ฮาๆ)<br />
ประเด็นคือไม่รู้ว่ามันช้าที่ฐานข้อมูลรึเปล่า เพราะ debug ไม่เจอสาเหตุ<br />
ก็เลยต้องลองทำเท่าที่ทำได้ไปก่อน</p>
<p>ขั้นต้นก็ต้องมี server 2 เครื่องขึ้นไปครับ<br />
โดยสมมติเครื่องแรก ชื่อ web-slave<br />
เครื่องที่สอง ชื่อ db-master</p>
<p>ก่อนอื่นมาที่เครื่อง web-slave สั่งติดตั้ง mysql server ตามนี้ครับ<br />
* อ้างอิง Fedora 8 ครอบคลุม Fedora 4 &#8211; 9, CentOS 5.x รวมถึงสาย Redhat ทั้งหมดครับ</p>
<blockquote><p># yum install mysql-server</p></blockquote>
<p>เสร็จแล้วเปิดแฟ้ม /etc/my.cnf เพิ่มเติมข้อมูลต่อไปนี้ครับ</p>
<blockquote><p>server-id=2<br />
master-host=<span style="color: #<a href="http://search.twitter.com/search?q=%230000ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;0000ff&quot;">0000ff</a>;">10.0.0.2</span><br />
master-port=3306<br />
master-user=<span style="color: #<a href="http://search.twitter.com/search?q=%23ff0000" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff0000&quot;">ff0000</a>;">replicate</span><br />
master-password=<span style="color: #<a href="http://search.twitter.com/search?q=%23ff0000" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff0000&quot;">ff0000</a>;">slavepassword</span><br />
master-connect-retry=30<br />
replicate-wild-do-table= %.%<br />
report-host=<span style="color: #<a href="http://search.twitter.com/search?q=%23008000" rel="nofollow" target="_blank" title="Search Twitter for &quot;008000&quot;">008000</a>;">10.0.0.1</span></p></blockquote>
<p>(มันมาอีกละ สีฟ้าแดงเขียวนี่)<br />
แก้ ip อะไรพวกนี้ให้ถูกนะครับ แล้วแก้ตัวแดงๆ ด้วย ตามที่ตั้งค่า</p>
<p>เครื่องนี้เสร็จและ กลับไปที่เครื่อง db-master ต่อ ก่อนอื่นต้องตั้งค่า username / password ก่อนครับ<br />
โดยเข้าไปใน mysql query console (หรือที่ไหนก็ได้ที่สามารถตั้ง user ได้) แล้วรัน query ต่อไปนี้</p>
<blockquote><p>mysql&gt; GRANT REPLICATION SLAVE ON *.*<br />
TO &#8216;<span style="color: #<a href="http://search.twitter.com/search?q=%23ff0000" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff0000&quot;">ff0000</a>;">replicate</span>&#8216;@&#8217;<span style="color: #<a href="http://search.twitter.com/search?q=%23008000" rel="nofollow" target="_blank" title="Search Twitter for &quot;008000&quot;">008000</a>;">10.0.0.1</span>&#8216; IDENTIFIED BY &#8216;<span style="color: #<a href="http://search.twitter.com/search?q=%23ff0000" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff0000&quot;">ff0000</a>;">slavepassword</span>&#8216;;</p></blockquote>
<p>เสร็จแล้วออกมาสั่ง stop service mysql ได้เลยครับ แล้วก็แก้แฟ้ม /etc/my.cnf อีกนิดหน่อย ตามนี้ครับ</p>
<blockquote><p>log-bin=<span style="color: #<a href="http://search.twitter.com/search?q=%23ff00ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff00ff&quot;">ff00ff</a>;">mysql-bin</span><br />
server-id=1<br />
innodb_flush_log_at_trx_commit=1<br />
sync_binlog=1<br />
expire_logs_days=<span style="color: #<a href="http://search.twitter.com/search?q=%23ff00ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff00ff&quot;">ff00ff</a>;">3</span><br />
max_binlog_size=<span style="color: #<a href="http://search.twitter.com/search?q=%23ff00ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff00ff&quot;">ff00ff</a>;">50M</span></p></blockquote>
<p>ตรงนี้ปรับค่าตามความเหมาะสมนะครับ แล้วแต่ว่าจะเก็บ log กี่วันยังไง<br />
โดยบรรทัดแรกสุดจะเป็น path + ชื่อแฟ้มที่ใช้เก็บ log (สามารถใส่ full path ได้ครับ เช่น /var/log/mysqld/binlog)<br />
แล้วก็ย้ำว่าควรจะใส่ option สองบรรทัดด้านล่าง เพื่อป้องกัน hdd เต็ม (ฮา)<br />
เคยเจอมาแล้วครับ เก็บ log เพลินไปหน่อย เศร้าเลย</p>
<p>ต่อจากนี้ก็ copy ข้อมูลจาก db-master ไปยังเครื่อง web-slave ครับ<br />
ถ้าใน fedora/centos default install ก็อยู่ใน /var/lib/mysql<br />
สั่ง tar ไปทั้ง folder เลยก็ยังไหวครับ (แต่ข้อแม้คือต้องเป็น mysql version เดียวกันนะ)</p>
<p>จากนั้นก็สั่ง service mysqld start ทั้งสองเครื่อง<br />
แล้ว connect เข้า mysql ของเครื่อง db-master สั่ง query ต่อไปนี้ครับ</p>
<blockquote><p>mysql&gt; FLUSH TABLES WITH READ LOCK;</p></blockquote>
<p>แล้วก็ connect เข้า mysql ของเครื่อง web-slave สั่ง query ต่อไปนี้ครับ</p>
<blockquote><p>mysql&gt; START SLAVE;</p></blockquote>
<p>เท่านี้ก็เรียบร้อย ทีนี้ก็รอดูผลงาน&#8230; ถ้าเวิร์กจะเอาไปใส่เว็บ bitthai ด้วย (ฮาๆ)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/18/mysql-replicate/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>0010 &#124; MySQL Memory Engine</title>
		<link>http://www.icez.net/blog/13/mysql-memory-engine</link>
		<comments>http://www.icez.net/blog/13/mysql-memory-engine#comments</comments>
		<pubDate>Fri, 09 May 2008 19:05:35 +0000</pubDate>
		<dc:creator>icez</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimize]]></category>

		<guid isPermaLink="false">http://www.icez.net/blog/?p=13</guid>
		<description><![CDATA[ก่อนอื่นขอรายงานสถานการณ์+บ่นซะก่อน แง่มๆ วันที่ 7 ตอน 22.00 น. ไฟฟ้าใช้ได้ตามปกติแล้วครับ แล้วก็&#8230; aircard กลับมาใช้ได้ตามปกติแล้ว เย้ๆๆ เซ็งแทบตาย ต้องไปจิ้มสายเน็ตเพื่อนใช้อยู่ แล้วมันเร็ว เอ้ย แล้วมันต้องเกรงใจอะ น่าเบื่อที่สุด ทำอะไรไม่สะใจเลย กลับเข้าเรื่องกันดีกว่า วันนี้จะมาว่าด้วย MySQL Memory Engine ครับ Memory Engine เป็นรูปแบบตารางของ MySQL แบบหนึ่ง ซึ่งมีโครงสร้างคล้ายๆ กับ MyISAM บ้าง นิดๆ หน่อยๆ เพียงแต่แทนที่จะเก็บไว้เป็นไฟล์ .MYD ไว้บนเครื่อง ก็เปลี่ยนมาเป็น เก็บลง shared memory ของ master process แทน แน่นอนครับ ผลลัพท์ที่ได้มันก็มาจากความเร็วของ RAM ที่ท่านใช้ ว่ามันจะเร็วได้แค่ไหน ซึ่งปกติ ประสิทธิภาพความเร็วที่ทำได้จะอยู่ราวๆ 50-150 [...]]]></description>
			<content:encoded><![CDATA[<p>ก่อนอื่นขอรายงานสถานการณ์+บ่นซะก่อน แง่มๆ<br />
วันที่ 7 ตอน 22.00 น. ไฟฟ้าใช้ได้ตามปกติแล้วครับ<br />
แล้วก็&#8230; aircard กลับมาใช้ได้ตามปกติแล้ว เย้ๆๆ<br />
เซ็งแทบตาย ต้องไปจิ้มสายเน็ตเพื่อนใช้อยู่ แล้วมันเร็ว<br />
เอ้ย แล้วมันต้องเกรงใจอะ น่าเบื่อที่สุด ทำอะไรไม่สะใจเลย</p>
<p>กลับเข้าเรื่องกันดีกว่า<br />
วันนี้จะมาว่าด้วย MySQL Memory Engine ครับ</p>
<p>Memory Engine เป็นรูปแบบตารางของ MySQL แบบหนึ่ง<br />
ซึ่งมีโครงสร้างคล้ายๆ กับ MyISAM บ้าง นิดๆ หน่อยๆ<br />
เพียงแต่แทนที่จะเก็บไว้เป็นไฟล์ .MYD ไว้บนเครื่อง ก็เปลี่ยนมาเป็น<br />
เก็บลง shared memory ของ master process แทน<br />
แน่นอนครับ ผลลัพท์ที่ได้มันก็มาจากความเร็วของ RAM ที่ท่านใช้<br />
ว่ามันจะเร็วได้แค่ไหน ซึ่งปกติ ประสิทธิภาพความเร็วที่ทำได้จะอยู่ราวๆ <span style="color: #<a href="http://search.twitter.com/search?q=%230000ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;0000ff&quot;">0000ff</a>;">50-150 เท่า</span>ของ MyISAM ครับ</p>
<p>อ๊ะๆ เห็นมันเร็วกันบ้าพลังขนาดนี้นี่ อย่ามาคิดเชียวว่าทำไมไม่เก็บไว้ใน Memory ให้หมด<br />
สาเหตุมันก็เพราะปัจจัยตามนี้ครับ</p>
<ol>
<li>เครื่องมีแรมเท่าไหร่ มันก็เก็บได้ไม่เกิน 1/2 ของแรมนั่นแหละครับ</li>
<li>ใช้ field ประเภท text/blob ทุกชนิดไม่ได้ (ใช้ varchar ได้อยู่นะครับ)</li>
<li>restart mysql ปุ๊ป ข้อมูลหายเรียบ (ก็มันเก็บในแรมนี่)</li>
<li>เปลืองพื้นที่มากกว่า MyISAM เยอะ (ตาราง MyISAM ขนาด 10 MB เวลาแปลงเป็น Memory จะใช้แรมประมาณ 40 MB)</li>
<li>ต้อง allocate memory เป็น block แต่ละ block ขนาดประมาณ 4-8 MB (เอาเป็นว่าหารเลขฐานสองลงตัวอะ)</li>
</ol>
<p>ว่าแต่ร่ายซะเสียเลยแฮะเรา (ฮาๆ)<br />
เอาเป็นว่า เนื่องด้วยเหตุผลข้อ 3 ทำให้เราไม่สามารถเก็บข้อมูลลงใน Memory Engine ได้ถาวรแน่นอนครับ<br />
ดังนั้น ตารางแบบนี้เหมาะสำหรับเก็บค่า &#8220;ชั่วคราว&#8221; มากกว่า<br />
เช่นพวกสถิติ user online, session ของเว็บไซต์ อะไรพวกนี้<br />
ซึ่งวิธีแปลงก็ง่ายๆ ครับ</p>
<blockquote><p>ALTER TABLE <span style="color: #<a href="http://search.twitter.com/search?q=%230000ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;0000ff&quot;">0000ff</a>;">table</span> ENGINE=Memory;</p></blockquote>
<p>แค่นี้เอง สั้นๆ ง่ายๆ ได้ใจความ<br />
รูปแบบการใช้งานที่เหมาะสม (และผมใช้อยู่ปัจจุบัน)คือ ตาราง peers ของเว็บ bittorrent ครับ<br />
reset ไปมันก็เข้าใหม่ได้ ไม่มีปัญหาอะไรมาก แถมตารางนี้ access หนักมาก ถี่ยิบๆ<br />
ก็เลยเหมาะต่อการใช้ Memory Engine ที่สุดเลย</p>
<p>รองลงมาก็คือ download session ของเว็บฝากไฟล์<br />
พวกนี้ปล่อยๆ มันได้ครับ ใช้ไม่่ค่อยเยอะหรอก</p>
<p>ทีนี้ ปัญหาที่จะเจอคือ Error ต่อไปนี้</p>
<blockquote><p>The table &#8216;<span style="color: #<a href="http://search.twitter.com/search?q=%23ff0000" rel="nofollow" target="_blank" title="Search Twitter for &quot;ff0000&quot;">ff0000</a>;">table</span>&#8216; is full</p></blockquote>
<p>ทั้งนี้เนื่องมาจาก MySQL มีการกำหนดขนาดสูงสุดของตารางประเภท Memory ไว้ครับ<br />
ว่า 1 ตารางสามารถจุข้อมูลได้ทั้งหมดกี่ MB ใน variable ที่ชื่อ <span style="color: #<a href="http://search.twitter.com/search?q=%230000ff" rel="nofollow" target="_blank" title="Search Twitter for &quot;0000ff&quot;">0000ff</a>;">max_heap_table_size</span> ครับ<br />
โดยค่าปกติของ MySQL 5.0 คือ 16 MB<br />
อยากให้มันใหญ่ได้เท่าไหร่ก็ใส่ไปโลด /etc/my.cnf ในส่วนของ mysqld สั้นๆ ง่ายๆ ครับ</p>
<p>จบและ คราวหน้าถ้าไม่ลืมจะมาพูดถึง MySQL Indexes ครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icez.net/blog/13/mysql-memory-engine/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.icez.net @ 2012-02-10 17:27:17 -->
