0022 | สร้าง subdomain แบบสิ้นคิด

เล่นง่ายมากเลยครับวันนี้
พี่เอก bluegy.com ให้มา config แปลงจาก subfolder เป็น subdomain
สมมติ URL เดิม http://www.icez.net/blog/
ก็ให้มันเข้าจาก http://blog.icez.net/ แทนได้เลย
เราก็นึกก่อนเลย htaccess rewrite เอาก็จบ เสร็จแล้วก็เลยสิ้นคิดมากมาย
นั่ง search หาข้อมูลกันแบบงงๆ เล็กน้อย มั่วเอาจาก wordpress mu
สุดท้ายก็ได้ตัว .htaccess ตัวนี้มาครับ

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . – [L]

RewriteCond %{HTTP_HOST} !www.icez.net
RewriteCond %{HTTP_HOST} !^icez.net

RewriteCond %{HTTP_HOST}<>%{REQUEST_URI} ^([^.]+)\.icez\.net(:80)?<>/([^/]*) [NC]
RewriteCond %1<>%3 !^(.*)<>\1$ [NC]
RewriteRule ^(.*)$ /%1/$1 [L,QSA]

เจอปัญหาอย่างนึงว่า ถ้าสมมติเข้าเว็บ อย่าง http://something.icez.net/
แล้วไม่มี folder ชื่อนี้อยู่ในระบบเนี่ย
มันจะเด้งหน้า Internal Server Error ขึ้นมาเลย

แก้ได้แล้วค้าบบบบ ไม่เจอแล้ว เย้ๆๆๆๆๆๆๆๆๆ
(ถ้าไม่เจอ subdomain จะขึ้นหน้า 404 ธรรมดาแทน)

อ้อ ถ้าใครจะเอาไปทำ อย่าลืมเพิ่ม config apache ลงใน virtual host ด้วยนะครับ

ServerAlias *.icez.net

ตามนี้เลยฮะ (แก้ตัวสีน้ำเงินด้วยน่อ)
แล้วก็อย่าลืมไป add DNS record ด้วยนะจ๊ะ

*.icez.net. IN A 203.146.129.182

.

.

แก้ไขเพิ่มเติมจ้าาาา ด้านบนเลย ^^”

Tags: , ,

0021 | วิธีนับจำนวนแถว (record) ในตาราง

ดองไว้นานเชียะ = =’
ขออภัยด้วยครับ แบบว่าขี้เกียจเขียน เอ้ย งานยุ่งๆ
มหาลัยเปิดเทอมแล้ว ตารางเรียนเห็นแล้วแทบบ้า
เอาวันหยุดของตูคืนมา เอาวันหยุดของตูคืนมา T_T

เข้าประเด็นเลยดีกว่า

ช่วงนี้มีงานประเภทนี้เยอะครับ เห็นแล้วก็เซ็งไอ้คนเขียนเว็บคนเก่าที่ทำระบบมาจริงๆ
คุณพี่เขียนไว้อย่างนี้ครับ….

$sql = mysql_query("SELECT * FROM table");
$records = mysql_num_rows($sql);

ไอ้อันที่จริงมันก็ไม่ผิดอะไรหรอกครับถ้าจะใช้แบบนี้ เพราะ code มันก็ทำงานได้ปกติสุขดีของมัน
แต่… ใครจะรู้มั้ยครับ ว่า mysql มันต้องส่งข้อมูลมากขนาดไหน

สมมติว่า ตารางมีขนาด 1 MB
การ query นี้จะทำให้ mysql ต้องส่งข้อมูลขนาด 1 MB ให้ client ที่ทำการ query
แล้ว client จะเป็นผู้นับจำนวนแถวเอง
ลองคิดดูว่าถ้าตารางเราเกิดมีขนาด 10 MB หรือมีคนเข้าเยอะๆ นะครับ
สมมติ ตารางเดิม ขนาด 1 MB
แต่คนเข้า “แค่” นาทีละ 60 ครั้ง (ตกวินาทีละ 1 ครั้ง)
เท่ากับ Database Server ต้องส่งข้อมูลให้ client ถึงวินาทีละ 1 MB

ถ้าขนาดฐานข้อมูลใหญ่ขึ้น
ถ้าคนเข้าเยอะขึ้น… ลองคิดดูครับว่ามันจะเปลืองทรัพยากรระบบขนาดไหน

วิธีนับจำนวน record จริงๆ ที่ใช้กันทั่วไปในระบบใหญ่ๆ เค้าใช้กันแบบนี้ครับ

$sql = mysql_query("SELECT COUNT(*) FROM table");
$res = mysql_fetch_array($sql);
$records = $res[0];

จำนวนบรรทัดเยอะขึ้น 1 บรรทัด แต่การทำงานลดลงฮวบฮาบผิดกันลิบๆ

* คำสั่ง SELECT COUNT(*) ห้ามเอาไปใช้กับตารางประเภท InnoDB โดยเด็ดขาดนะครับ
มิเช่นนั้น database server อาจน็อคเอาได้ง่ายๆ

Tags: , ,