Wednesday, December 30, 2009

การไปเที่ยวได้อะไรมากกว่าที่คิด

มีโอกาสไปเที่ยวเชียงคาน ก่อนที่อะไร ๆ จะเหมือนปาย ได้อะไรมาบ้างมาดูกัน
  1. ไปเชียงคานถ้าให้สนุกต้องไปทาง ลพบุรี-เพชรบูรณ์-เลย-เชียงคาน ท่านจะพบว่า การขับรถบนสันเขาสนุกเพียงใด
  2. เต็นที่ดีควรจะต้องกันน้ำค้างได้ปริมาณมาก ๆ และต้องมีขนาดใหญ่พอนอนได้สำหรับ 2 คน โดยที่เวลาขยับตัวต้องไม่โดนผืนเต็น ไม่อย่างนั้นจะเปียก
  3. ถุงนอนที่ดีข้างในควรเป็นผ้า ไม่ใช่พลาสติก
  4. ถ้าหากกลางคืนหนาวมาก ให้นำรถยนต์ที่ขับไปด้วยจอดไว้ข้าง ๆ ถ้าหากหนาวจนทนไม่ไหว ก็ให้ไปนอนในรถ (อันนี้เจ้าถิ่นบอกมา)
  5. คนอีสานเลย นี่ ใจดีจริง ๆ มีข้าวเย็นให้กินด้วย เขาเรียกว่า "มาซุมกัน"
  6. ถ้าหากคุณต้องซื้อผ้าห่มที่ผลิตมาจากโรงงาน ที่มีกรรมวิธีที่เหมือนกับทำจากมือ handmade แนะนำให้ซื้อ Handmade มันจะขลังและกันหนาวได้ดีกว่า เพราะว่าคุณจะนึกถึงคนขายและคนทำ จนคุณไม่กล้าต่อราคา
  7. ถ้าคุณจะพยายามเก่งทุกอย่าง ให้เปลี่ยนความคิดใหม่ "เก่งอย่างเดียวแบบสุด ๆ" ดีกว่า เพราะว่าจะมีคนอย่างนี้ไม่กี่คนในโลก (แล้วเค้าจะถามหาคุณเอง) ส่วนคนที่เก่งหลาย ๆ อย่างมีเยอะแล้ว เหมือนผ้าห่มที่ซื้อ ที่ขายข้างทาง ร้านจะบอกไม่ได้ว่ากรรมวิธีทำอย่างไร ต้องเอาใจในขนาดไหน แต่พอถามยาย ร้านนิยมไทย น้ำตาแทบแตก นั่นเป็นเหตุผลว่าทำไมผ้าห่มที่นี่ถึงอุ่นตลอดเวลาไม่ว่าจะหน้าร้อนหรือหน้าหนาว
  8. สาธุ!!! อย่าให้เชียงคานในอนาคตเป็นเหมือนปายตอนนี้เลย เมืองไทยจะได้มีที่ที่น่าเที่ยวเพิ่มขึ้น
  9. สุดท้าย... ผมคิดถึงที่นั่น

การใช้งาาน PostgreSQL ในส่วนงานต่าง ๆ OLTP, DW, WEB

คราวก่อนนำเนื้อหามาแปะไว้ (PostgreSQL กับการกำหนดค่าที่น่าสนใจของ WEB, OLPT, DW ) กะว่าจะอธิบายต่อที่ตรงนี้ แต่เท่าที่ดูแล้วคิดว่านำออกมาอธิบายต่างหากดีกว่า

การติดตั้ง PostgreSQL โดย Package ที่สำเร็จรูปนั้น แน่นอนว่าการทำ Package ออกมาจะมีการกำหนดค่ามาเพื่อรองรับ Application ทั่ว ๆ ไป แต่เนื่องจากความเป็นจริง เมื่อมีการนำมาใช้งานแล้ว เราต้องทำการปรับค่าต่าง ๆ เพื่อให้เหมาะสมกับงานที่ต่างกันออกไป

งานที่ต่าง ๆ กันก็ขอแบ่งออกเป็น 3 อย่างดังนี้ก่อน
  1. WEB - Web Transactional
  2. OLTP - Online Transactional Processing
  3. DW - Data Warehouse
งานทั้ง 3 ประเภทนี้ต่างกัน ทำให้การกำหนดค่าต่าง ๆ ของ Database แตกต่างกันด้วย ลองนึกถึงว่าถ้าหากเราต้องการขับรถ ไปยังที่แตกต่างกัน เราจะเลือกรถอย่างไรดี

ในด้าน Database ก็เหมือนกัน ทุกวันนี้หลายคนใช้ Database Configurature เดียว เพื่องานทุกอย่าง อาจเนื่องจากเหตุผลทางด้านการเงิน แต่เมื่อทำงานไปซักพักก็จะเข้าใจว่าทำไม

ก่อนอื่นเราต้องทำความเข้าใจกับ ประเภทของงานทั้ง 3 กันก่อน
"WEB" การเรียกใช้งานส่วนใหญ่เป็นการแสดงผล มีการเรียกการใช้งาน Database บ้าง แต่ส่วนใหญ่จะถูกออกแบบมาเพื่อบริการข้อมูล ไม่ค่อยมีการทำ Transaction
"OLTP" มีการเรียกใช้งานข้อมูลเพื่อประกอบการใช้งาน และมีการบันทึกข้อมูล Transaction กลับไปยัง ฐานข้อมูล มีรายงานที่เกี่ยวกับทางด้าน Tranaction ในแต่ละวัน
"DW" Datawarehouse มีลักษณะเฉพาะ โดยมีจุดประสงค์เพื่อนำข้อมูลที่เก็บไว้มาทำเป็นการวิเคราะห์ และตัดสินใจ และบางครั้งส่งผลที่ได้กลับไปยัง OLTP เพื่อกำหนดวิธีการทำงานต่าง ๆ รายงานส่วนใหญ่ถูกออกแบบมาเพื่อ ทำเป็นข้อมูลเพื่อการตัดสินใจ

เมื่อทราบลักษณะงานต่าง ๆ แล้ว เราก็เริ่มดำเนินการกำหนดค่ากันเลย ซึ่งในส่วนนี้จะมุ่งไปยัง Database เท่านั้น ส่วน Application นั้น ก็ขึ้นอยู่กับประเภทของงาน


CPU
ปัจจุบันเท่าที่ประสบมา จำนวน CPU 4-8 cores ก็เพียงพอกับงานที่เกี่ยวกับ Database แล้ว และแต่ละ CPU ก็มีความเร็วที่ค่อนข้างมากแล้วด้วย

MEMORY
หลักง่าย ๆ คือ ถ้าอยากให้เร็วก็ใส่ เยอะ ๆ ปัจจุบันเท่าที่เห็นคือ 16GB

HARDDISK
"many spindles are better" หมายความว่า ถ้าทำ RAID ให้ใช้ HD หลาย ๆ ตัวทำ RAID ใน 1 Volume ในส่วนนี้มีผลต่อ การทำงานของ Database เป็นอย่างมาก เพราะว่า งานส่วนใหญ่ให้ Load Data แล้วประมวลผลใน MEMORY ไม่พอหรอก

NETWORK
หลาย ๆ คนซื้อ Server ที่มี Networks Interface เยอะ ๆ แต่ว่าใช้อันเดียวเอง (เป็นเพราะว่า ไม่เคยเจอ Traffice เยอะ ๆ อย่างผม)


คราวนี้มาดูการปรับแต่งของ Database กัน

max_connections หมายถึงจำนวน connection ที่สามารถเข้ามาใช้งานได้เมื่อขนาดที่มีการใช้งานมากที่สุด  โดยแต่ละ connection นั้นจะใช้ ทรัพยากร shared_buffer ที่กำหนดไว้ แน่นอนว่า ถ้ากำหนดไม่ดีจะมีอาการที่บอกว่า "out of memory" นะ

max_connections = 200  # small server
  max_connections = 700  # web application database
  max_connections = 40   # data warehousing database
shared_buffer หมายถึงปริมาณของหน่วยความจำที่ต้องใช้งานเพื่อการประมวลผล process ก่อนที่จะมีการใช้ disk เพื่อทำ operation ประมาณว่ามี active operations ได้มากเท่าไหร่

# shared_buffers = ( Available RAM / 4 )
# shared_buffers = 512MB   # basic 2GB web server
# shared_buffers = 8GB     # 64-bit server with 32GB RAM

work_mem หมายถึงปริมาณของหน่วยความจำที่สามารถใช้ในแต่ละ query ได้  ถ้า Query อะไรที่ซับซ้อนก็ต้องเพิ่มค่านี้เลยครับ
# Most web applications should use the formula below, because their 
# queries often require no work_mem. 
# work_mem = ( AvRAM / max_connections ) ROUND DOWN to 2^x
# work_mem = 2MB  # for 2GB server with 700 connections  

# Formula for most BI/DW applications, or others running many complex
# queries:
# work_mem = ( AvRAM / ( 2 * max_connections ) ) ROUND DOWN to 2^x
# work_mem = 128MB   # DW server with 32GB RAM and 40 connections 
ในส่วนตัวแล้ว กว่าจะปรับค่านี้ลงตัวก็ต้องลองหลาย ๆ รอบเหมือนกัน บางทีดูรูปแล้วน่าจะเข้าใจมากขึ้น ref: http://momjian.us/main/presentations.html

Wednesday, December 16, 2009

Opensource Commercial ที่เค้าใช้กันทำเงินกันได้อย่างไร

วันนี้ต้องสมัครสมาชิกอ่าน feed พอดีอ่านไปเจออันนี้ Canonical: take my money ทำให้เข้าใจว่าในที่สุด user ที่ใช้ opensource ต้องการอะไร

You claim that there is little money in the desktop software business and more in services.  Well here is something I would pay money for:
Take the top selling business laptops from Dell, Acer, HP, Lenovo and offer customized distributions for them.
I would pay for that in an instant.  All too often people confuse open source with free of charge.  I’m perfectly capable of making that distinction.  In fact, I use my machines for my work and don’t want to spend days configuring all the devices on them.  As such, I would pay something like 50 USD for a customized (K)Ubuntu or perhaps 150-200 USD if it came with some sort of (e-mail) support contract for a year.
I don’t use Linux / Ubuntu because it costs less, I use it because I prefer it over Windows to do my job.  I would pay that kind of money because I would save time and money in the long run.
Until the major hardware vendors offer decent (worldwide) support for Linux on their machines (out of the box that is), I think this is an idea with potential and I hope at least someone picks it up.  Go ahead, let me spend money on it!

บริการจัดว่าเป็นรายได้หลัก ๆ แต่ที่ลูกค้าอยากได้ต่อไปคือ save time นั้นเอง

Life has no boundaries.
Wattana

ลบ log file ที่เกิน 90 วัน ทุก ๆ วันทำอย่างไร

GNU มันเจ๋งอย่างนี้นี่เอง

อ้างอิง: http://www.faqs.org/qa/qa-10326.html

เนื่องจากปัจจุบันตั้ง CRON ไว้สำหรับทำงานในการเก็บ log ไฟล์ โดยกำหนดให้สร้าง Folder เมื่อถึงวันใหม่ พอระบบทำงานมาได้ซักพักก็พบว่า เจ้าปริมาณของ log ไฟล์ นั้นมีขนาดใหญ่ขึ้นเรื่อย ๆ

ทำอย่างไรให้มันเก็บย้อนหลังได้แค่ 90 วัน (เขาคิดว่าจะรอดปลอดภัย) ในใจแว็บเค้ามาเลยครับ "ก็ให้มันทำการลบ log ไฟล์ที่มันย้อนหลังมากกว่า 90 วันสิ"

เข้าทางของ CRON เลยครับ "ทำอย่างไรจะลบ log ไฟล์ ที่เกิน 90 วัน ทีละวันได้" พออ่านเอกสารแล้วก็พบว่า เจ้า date ใน UNIX นี่ช่วยได้ทีเดียว แต่สิ่งมหัศจรรย์ที่เกิดขึ้นคือ date ของ GNU มันทำอย่างนี้ได้ด้วย

$ date -d "90 day ago" 
พฤ. 17 ก.ย. 2552 05:19:56 ICT
ดูซิ ทำกันได้