บันทึกสั้นๆ หลังใช้งาน Windows Azure Storage Table

ตอนนี้ใช้ Windows Azure Storage Table อยู่กับบางบางตัว ซึ่งหลังจากที่ใช้งานมา 3-4 วันที่ผ่านมา เอาสิ่งที่ได้มาแบ่งบันกันเล็กน้อย

  • มันเป็น NoSQL database เรื่อง schema โยนทิ้งไปเลย คิดใหม่ทำใหม่หมด คล้ายๆ Excel มากกว่าด้วยซ้ำ
  • มี Data type ไม่เยอะ ทำงานง่ายพอสมควร
  • รองรับข้อมูลที่ใส่ลงไปไม่เกิน 100 TB ต่อฐานข้อมูล
  • สื่อสารกันผ่าน HTTP / HTTPS มี SDK API ให้หลายๆ ภาษาทั้ง .NET Framework, Java, PHP, Node.js, Python ฯลฯ หรือจะติดต่อผ่าน CURL อะไรพวกนี้ก็ได้ แล้วแต่ความถึกแต่ละคน (แต่ผ่าน SDK มันจะง่ายกว่าเยอะมาก)
  • ใน 1 Table สามารถกำหนด entity (row/record ใน RDBMS) ให้มี properties (field/column ใน RDBMS) หลากหลายได้ ไม่จำเป็นต้องเป็น entity ที่มี properties เหมือนๆ กัน
  • entity แต่ละตัวที่ใส่ลงไปได้มีข้อมูลไม่มากเกินกว่า 1MB ต่อ entity
  • properties ตั้งได้ไม่เกิน 252 ตัวต่อ 1 entity
  • properties ที่จำเป็นต้องส่งเข้าไปหรือใช้งานมี 3 ตัวคือ partition key, row key และ timestamp ซึ่ง partition key, row key เราต้องกำหนดเอง ส่วน timestamp ไม่ส่งเข้าไปก็ได้ระบบจะใช้เวลาของระบบแทน
  • ค่า partition key และ row key จำเป็นอย่างมากในการ update/delete ต้องออกแบบดีๆ ค่า partition key เปรียบเสมือนกลุ่มข้อมูล (คล้าย Class) ซ้ำได้ ส่วน row key จำซ้่ำไม่ได้ในแต่ละ partition key เปรียบเสมือน primary key ใน RDBMS ต้องใส่ข้อมูลทั้งสองลงไปเสมอ
  • การส่งข้อมูลออกมาจากการ Query นั้นจะส่งมาไม่เกิน 1,000 entities เท่านั้น ถ้าต้องการมากกว่านั้นต้อง request อีกรอบด้วยการใช้ NextPartitionKey และ NextRowKey ร่วมด้วยในการ Query ครั้งต่อไปจึงจะได้ข้อมูลช่วงถัดมาอีก 1,000 entities
  • ไม่สามารถ Sorting หรือแบ่ง Pagination ได้ ถ้าอยากทำต้อง query มาทั้งหมดแล้ว Sorting ในระบบเอาเอง หรือใช้ร่วมกับ RDBMS ตัวอื่นๆ แทน แล้วเก็บเฉพาะ partition key และ row key เพื่ออ้างอิงพ่วงกับข้อมูลที่ต้องการ Sorting จะช่วยได้มาก
  • สามารถค้นหาจาก properties ที่ไม่ใช่ partition key, row key และ timestamp ได้ จะ full table query ก็ทำได้ จากที่ลอง 1 แสน entity ก็ทำงานได้ดี (ข้อมูลประมาณ 50MB) ค้นหาด้วย properties ที่ไม่ใช่ตัวหลักของระบบ และเป็น full table query ไม่เกิน execute time
  • การ import ข้อมูลทำได้หลายแบบ ที่สะดวกที่สุดคือ csv ที่ export จาก Excel หรือฐานข้อมูลตัวอื่นๆ แค่กำหนด first line ให้เป็นชื่อ properties ที่กำลังใส่ลงไปมันจะไป map ตัว properties ในตารางให้เอง แต่  Data type มันจะเป็น String
  • ระยะเวลาในการ execute time มากสุดที่ 5 วินาที
  • ระยะเวลาในการให้ client request ไม่เกิน 30 วินาที

อันนี้คือเท่าที่ลองๆ ใช้มา

SSD กับงาน Database Server

ใช้ SSD Vertex 4 (SATA3 ทำงานบน SATA2) ขนาด 60GB ทั้งหมด 2 ตัวบน Production อยู่ 2 รอบบ ตัวแรกระบบ Frontend ทำงานตลอดเวลา 24 ชั่วโมงโหลดข้อมูลบน Database MySQL ขนาด transaction 30-100 queries/s แบบ ACID Model ตลอด (เป็น transaction เรื่องเงินเลยต้องมี locking ระดับ row ด้วย) แต่พังในเวลาประมาณ 3 เดือน และตอนนี้ SSD ตัวใหม่ก็ยังทำงานได้ดีอยู่ลุ้นๆ จะไปต่อได้แค่ไหน ส่วนอีกตัวทำงานมาแล้ว 6 เดือน ยังไม่มีปัญหาใดๆ ตัวนี้ทำงานที่ 500-600 queries/s แต่เป็น ISAM model ตลอด (ไม่มีการ locking ใดๆ) การทำใช้ SSD มาทำงานและแก้ไขปัญหาเรื่อง IOPS ของ database ช่วยให้งานที่อาจใช้เวลา 1-5 วินาที เสร็จสิ้นภายในเวลาหน่วย ms เท่านั้น ซึ่งคุ้มเสี่ยงที่จะใช้

คำถามคือระบบป้องกันทำอย่างไร? เพราะ SSD มีโอกาสเสียง่ายกว่า HHD อยู่แล้ว ซึ่งแก้ปัญหาด้วยการทำระบบด้านหลังอีกชุด โดยรัน VM ควบคู่ทั้งสองระบบ ซึ่งทำ Realtime backup แบบ Replication ที่ทำงานแบบ Event base ตลอดเวลาเพื่อคอย Backup ไว้อีกชุดและมีชุด VM อีกตัวทำหน้าที่ Daily backup แบบ Full Database อีก 1 ชุดสามารถรองรับการ downtime ได้ 99.9% per year ได้สบาย

โดยระบบเคย down เพราะ SSD พังและนำกลับมาอยู่ใน State ‘uptime’ ได้ในเวลาประมาณ 30 นาที ด้วยการกู้จาก Realtime backup มาใส่ในระบบที่ยังทำงานปรกติอีกระบบไปก่อน แล้วเข้าไปเปลี่ยน SSD ตัวใหม่เสร็จสิ้นใน 6 ชัวโมง (จากที่บอกไปด้านบน) อันนี้คือการแก้ไขปัญหานี้

ส่วนการแนวการแก้ไขปัญหาต่อไปในช่วงปีนี้ คือแผนการทำ HA ตัว Database Server เพิ่มเติม แต่ยัง LAB เรื่อง MySQL Cluster ว่าจะเอามาใช้อะไรได้บ้างและมีความเร็วเพียงพอหรือไม่ที่จะทำแบบนี้ หรือทำ RAID SSD ก็น่าสนใจเช่นกันคงต้อง LAB ต่อไปอีกสักพัก

MySQL Tunning (slideshare)

มา entry นี้เอา slide ที่ผมกะว่าจะเอาไปพูดในงาน BarCampBangkok ที่ผ่านมา เอามาลงใน Slideshare แล้วกันครับ คือเป็น slide เดียวกับที่ผมเอาไป training ในบริษัทเก่าผม ตอนผมเป็น DBA ครับ

กลับมา Blog Blog แล้วครับ

หายไปนานกว่า 2 อาทิตย์กว่าได้ จริง ๆ ช่วงที่ผ่านมา เที่ยวไปทั่ว แต่มาช่วง 2-3 วันนี้เพิ่งได้อยู่กับที่ซะที

โดยส่วนตัวเพิ่งซื้อ Notebook ตัวใหม่มาไม่นาน ใช้มาได้สัก 1 เดือนครึ่งแล้ว ถ้าใครเข้าไปอ่านใน MySpace ที่เมนูด้านบนก็จะเห็นว่าตอนนี้เปลี่ยนเครื่องแล้ว ตอนนี้ใช้ ThinkPad Z61t อยู่ โดยรวมถือว่า ok เลย ให้ชื่อมันเป็น HoffmanV2 (อย่างกับไอ้มดแดง ฮ่า …. ) อยากได้ Thinkpad จอ Wide มานานแล้ว เพราะว่าใช้ IDE หลายตัวที่มี Tools ที่กินเนื้อที่ด้านข้่างจอมาก ตัวนี้ได้ 14.1 Wide มีขนาด Resolution ที่ 1,440 x 900 ถือว่าดีมาก

ตัวถังด้านนอกเป็น ABS Plastic และด้านในเป็นโครง Magnesium alloy เพิ่มความแข็งแรงดีมากเลย คือเครื่องมันบางอยู่แล้ว พับจอแล้วหนาประมาณ 1 นิ้วได้ แล้วเป็นฝา Titanium ด้วย น้ำหนักก็ 2.1kg เท่านั้น ก็เบากว่าตัวเก่าครึ่งโลได้ อ่อ เรื่องฝา Titanium เนี่ยถ้าใครมีอาการลอกจากการที่ตัวเคลือบกันลื่นหรือบางคนเรียกว่าตัวกันลอยลอก ซื้อถามช่างแล้วน่าจะเกิดจากการ QC มาไม่ดีของ Cover ที่ใช้สารเคลือบที่ไม่ทนต่อสารเคมีต่าง ๆ  ก็สามารถนำไปเปลี่ยนได้ที่ ศ. IBM ตรงรถไฟฟ้าสถานีอารีย์ได้เลยครับ  ไม่เสียค่าใช้จ่ายในการเปลี่ยน (แต่เสียค่าเดินทาง) ตอนนี้รับเปลี่ยนอยู่ครับ เพราะว่าตัวที่ติดมากับเครื่องบางเครื่องจะมีปัญหานี้อยู่ ตอนนี้ผมใช้ตัวฝาตัวใหม่ที่แก้ปัญหาเรื่องฝา Titanium ลอกแล้วถือว่า ok เลยครับผม

ส่วนอื่น ๆ ก็ยังคงความเป็น ThinkPad เหมือนเดิม อีกอย่างคือได้แบตแบบ 7 Cell มาซึ่งมันยื่น ๆ ออกจากตัวเครื่อง คือถ้าเอาไว้ใช้งานแบบนาน ๆ ก็ ok นะ ใช้ได้ประมาณ 3 ชั่วโมงครึ่ง แต่อยากได้แบบ 4 Cell มากกว่าตอนนี้เพราะว่ามันพอดีกับเครื่องถือง่ายกว่า แต่ว่าตอนนี้หาซื้อไม่ได้ เพราะว่าแบตตอนนี้ถือเป็นวัตถุระเบิดไปแล้ว -_-‘  การนำเข้าเลยลำบากครับ แบตรุ่นใหม่ ๆ ที่นำเข้าเลยติดด่านนำเข้า ช่วงนี้เลยนำเข้าไม่ได้ ใครแบตเสียหรือส่งเคลมเรื่องแบตก็ตรวจสอบกันหน่อยนะครับ ว่ามีของหรือเปล่า

ส่วนเรื่องการประมวลผล Core 2 Duo 1.6GHz นี่เร็วกว่า Pentuim M 1.3GHz ตัวเก่า ประมาณ 4-5 เท่าได้เลย ทดสอบด้วยการแปลงไฟล์ภาพยนต์จากแผ่น DVD หลาย ๆ เรื่องที่ตัวเองมีตัวเก่าใช้เวลา 5-6 ชั่วโมง แต่ตัวใหม่นี่ เฉลี่ยที่ 1 ชั่วโมงนิดๆ เท่านั้น แถมตอนแปลงไฟล์ภาพยนต์ก็ยังทำงานอย่างอื่นไปได้อย่างราบรื่น เพราะตัวโปรแกรมแปลงไฟล์นั้นมันรองรับแบบ MultiThread ตอนแปลงไฟล์มันเลยใช้ Core CPU ทั้งสอง Core ที่โหลดประมาณ 50 – 70% ตลอด เลยมีพอในการใช้งานได้เรื่อย ๆ (ถือเป็นข้อดีของ CPU แบบ Dual Core) ก็แน่หล่ะ สองหัวดีกว่าหัวเดียว ฮ่า … อีกอย่างคือเพิ่ม RAM มาเป็น 1.5GB แล้ว แต่จริง ๆ ไปงาน Commart อยากได้อีกแถมเป็น 2GB แต่รอก่อนแล้วกัน ช่วงนี้เงินไม่ค่อยมีเอาไว้มีแล้วค่อยซื้อแล้วกัน ถึงแม้ว่าช่วงนี้ RAM จะถูกจัด ๆ ก็ตามทีก็เหอะ ตอนนี้ก็มีความสุขดีกับ HoffmanV2 ;)

แล้วช่วงสิ้นเดือนที่แล้วก็ไปเชียงใหม่ไปเที่ยวแล้วไปเคลียร์ปัญหานิดหน่อยแค่ 2 วันแล้วก็กลับไปพิษณุโลกต่อไป ไปเคลียร์งานนิดหน่อย แล้วก็กลับนครสวรรค์ แล้วก็ไปๆ กลับๆ พิษณุโลก เพราะต้องไปเอาใบรับรองการจบการศึกษาและ Transcript สรุปเกรดจบก็ได้ 2.86 ถือว่า ok แต่ก็นะ นั่งปรับปรุง Resume ให้กระชับขึ้น เพราะต้องเอาไว้ใช้งานในอนาคตแน่นอน เฮ้อ …… สนุกสนานครับ

ช่วงนี้ปรับพื้นด้าน Database ใหม่หลายส่วนที่ยังอ่อนอยู่ เพราะได้งานในตำแหน่ง DBA (Database Administrator) มา จริง ๆ รับตำแหน่งส่วน Software Developer Consult อีก ก็น่าจะพอสมควรกับงานที่ได้รับมา เริ่มงานก็วันที่ 1 เดือนหน้า ตอนนี้ของฝึกฝีมือก่อน ;)

มีคนถามมาเยอะเมื่อไหร่ PHP Framework จะได้เริ่ม Release เสียที ต้่องบอกเลยว่าทำการ ปรับโครงสร้างใหม่หมดเลย พอดีว่าจากตอนแรกจะเอาให้มันคล้าย ๆ กับ RoR มาที่สุด แต่ไปๆ มาๆ ไม่เอาดีกว่า ทำให้เหมือนมันก็ทำได้ แล้วทำไปทำไม CakePHP มันก็เหมือนกัน เลยมองว่าไปซ้อนทับตลาดกัน ตอนนี้เลยปรับเปลี่ยนเล็กน้อย โดยเพิ่มแนวคิดแบบ Zend Framework และแนวคิดแบบ .Net Framework เข้ามาผสมด้วยคือตัว Framework ทั้งสองแบบมันเป็น Component-based ส่วน RoR และ CakePHP มันเป็น Automate + MVC-based ใครเคยเขียนพวก .NET Framework อย่าง VB.NET หรือ C#.NET คงนึกภาพออก ประมาณว่าคุณอยากใช้อะไรก็เอา Component มาใส่ ตัว Tools มันหาให้ แต่คุณเลือกเองว่าจะใช้อะไร มันไม่ automated ให้ทั้งหมด แล้วมาปรับแต่งตามงานที่ต้องการแทน แล้วก็โครงสร้างระบบก็ต้อง Design เอง หลายคนที่มีการวางแผนในการพัฒนาระบบที่ดี และต้องการอิสระจะชอบแบบนี้ แต่ว่าถ้าใครออกแบบและวางแผนไม่ดี ซอฟต์แวร์ที่สร้างมันห่วยลงไปในทันที เค้าเลยมีการสร้าง Pattern และ Framework มาครอบมันอีกทีให้มันมีตัวชี้นำว่าควรจะทำอะไร เพื่อทำให้ซอฟต์แวร์ของเรามีรูปแบบ และโครงสร้างที่ชัดเจนและไม่เละ ซึ่งถ้าใครอยากทำอะไรที่ง่าย ๆ และมีแนวทางมาให้บ้างในการพัฒนาซอฟต์แวร์ก็จะชอบ Framework ที่มี Pattern มาให้แล้ว ก็อย่าง RoR หรือ CakePHP ที่เป็น MVC Pattern ซึ่งตัวโครงสร้างและระบบที่ใส่มาให้นั้นก็เพียงพอในงานพื้นฐานและระดับกลาง ส่วนถ้าต้องการขั้นสูงก็ต้องเขียนเพิ่มและ plug เข้าไปในระบบ ที่เรียกว่าการทำ plugin หรือ addon เพิ่ม แต่ส่วนใหญ่มักจะไม่ค่อยได้ใช้เท่าไหร่ ตอนนี้เลยปรับโครงสร้างใหม่ให้รับแนวคิดทั้งสองส่วนเข้ามาด้วยกัน พยายามให้สามารถรองรับกับ Zend Framework Conponent ด้วย น่าจะทำให้สามารถนำ Component ดีๆ จาก Zend มาใส่ได้ พยายามจะให้มัน enable ตัว Component ง่าย ๆ อาจจะใช้ XML เป็นตัว config เพราะคิดต่อไปอีกว่าพอมันเป็น XML แล้ว กะจะทำตัว Desktop App สำหรับดึงตัว XML มา config บน Windows UI ได้เลย คงเหมาะกับคนที่ไม่ชอบไปมึนงง กับ tag XML เท่าไหร่ แหม ช่วงนี้ idea พุ่งจริง ๆ เรา ฮ่า ….. แล้วที่ทำตอนนี้เลยคือตัว DB Adapter ใน PHP ที่จะทำเป็น ORM (Object Relational Mapping) แบบเดียวกับ ActiveRecord ใน RoR ตอนนี้มีหลายตัวใน PHP ที่น่าใช้ แต่ส่วนใหญ่รองรับ PHP5 ทั้งนั้น เลยกะว่าจะ Port มาลง PHP4 ด้วย ไม่รู้จะรอดหรือเปล่าเนี่ย แต่ตอนนี้เอาประมาณนี้ก่อนแล้วกันนะ ;)

คอมไพล์เลอ ต้องมังกร & โอเอส ต้องไดโนเสาร์ หนังสือที่อ้างอิงและศึกษาได้ดี

ทำไม !! คอมไพล์เลอ ต้องมังกร และ โอเอส ต้องไดโนเสาร์

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

Operating System Concepts


by Abraham Silberschatz, Peter Baer Galvin, and Greg Gagne


ถือเป็นหนังสือที่เอาไว้ศึกษาหลักการ Operating System ได้ดีมาก ๆ เลยทีเดียว ที่ผมเรียนตอนปี 3 ก็ใช้เล่มนี้สอนเป็นหลัก แต่เนื้อหามันเยอะมาก เลยเรียนไม่หมดเล่ม ด้วยความอยากรู้เลยไปซื้อที่ CU Book ที่ม. ตอนนั้นมี Wiley Asia Sutdent Edition ขายพอดีราคาเลยถูกกว่าเล่มที่วางขายทั่วไปพอสมควร (เล่มในรูปซื้อมาประมาณ 600 – 700 ไม่เกินนี้ จำราคาไม่ได้นานแล้วอ่ะ -_-‘) เอาไว้ศึกษาพวก thead, memory management แล้วก็พวก deadlock ต่าง ๆ จริง ๆ อ่านเล่มนี้ทำให้เราเขียนโปรแกรมให้มีประสิทธิภาพสูงได้เลยหล่ะ ได้แนวคิดเยอะมาก ๆ จริง ๆ คนที่เขียนพวกซอฟต์แวร์ที่ใช้ thead หรือพวก control session ต่าง ๆ สมควรอ่านอย่างยิ่งเลย เล่มที่ได้มานี่ 7th Edition ถือน่าจะใหม่เกือบที่สุดแล้วในตอนนี้ (เห็นใน amazon มี with Java ด้วย อันนี้น่าจะใหม่กว่านิดหน่อย) แต่เนื้อหาหลัก ๆ ถือว่าควบถ้วนครับ ซึ่งเล่มถ้าจะอ่านต้องมีพื้นในด้าน Hardware พอสมควร แนะนำให้เปิดหนังสือเล่มนี้อ่านพร้อม ๆ กับพวกวิชา Introductrory to Computer หรือ Computer Organization and Architecture ไปด้วยจะดีมาก ๆ


Compilers: Principles, Techniques, and Tools


by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman


เล่มนี้ถือว่าหายากมากในไทย แถมเป็นเล่มที่ Classic ของคนเรียน Computer Science (ออกตั้งแต่ปี ค.ศ. 1985-1986) เห็นว่าเดือนนี้ (สิงหาคม 2006) จะออก Edtion ที่สองแล้ว แต่ว่าเล่มนี้นี่ ผมก็ไม่รู้ทำไม ที่มหาวิทยาลัยก็ไม่มี ในหอสมุดก็เพิ่งจะเอามาลงเมื่อปลายปี 2548 นี้เอง จริง ๆ ดูราคาแล้วก็แพงมหาโหดมาก ราคาจาก US -> Thai นี่เกือบ ๆ 4,000 บาทได้ เลยต้องยืมของหอสมุดมาถ่ายเอกสารเอา เพราะว่าหาซื้อไม่ได้ แถมแพงอีก ยิ่งแล้วใหญ่เลย (ถ่ายยังราคาเกือบ ๆ 500 บาทได้) โดยภายในหนังสือสอนแนวคิดก่อน และก่อนจะอ่านเล่มนี้จริง ๆ ต้องมีพื้นหลายอย่างมาก่อนแล้วทั้ง Computationnal Thoery หรือพวก Regular Expression wi POSIX/Perl ไม่งั้น อ่านลำบากมาก เพราะด้านในนี้แทบจะหา code โปรแกรมน้อยมาก ส่วนใหญ่จะออกแนวสัญลักษณ์ Computationnal Thoery เยอะ แถมต้องแม่น Data Structure และ Programming Language พอสมควรอีก ถ้าใครคิดจะอ่านเล่มนี้ต้องหาหนังสือเล่มอื่น ๆ อ่านประกอบไปด้วยไม่งั้นนึกภาพตามไม่ออกจริง ๆ ขนาดเราว่าเราแม่น ๆ หลายวิชาแล้วนะ ยังอ่านแล้วอ่านอีก เพราะว่าอ่านยากจริง ๆ แต่ถ้าอ่านแรกเข้าใจนะ โห … สุด ๆ อ่านแล้วนี่ Optimize Code ที่เราเขียนห่วย ๆ ตอนปี 2-3 ได้สบาย ๆ เลย เหมาสำหรับคนที่ออกแนวชอบ Optimize Code หรือพวกชอบงานแนว ๆ Code Quality
เล่มต่อมาเป็น

Languages and Machines
An Introduction to the Theory of Computer Science (3rd Edition)



by Thomas A. Sudkamp

อันนี้ไม่พูดอะไรมาก ราคาไม่แพงพอ ๆ กับ Operating System (เพราะว่ามันเป็น International Edition มันเลยถูก ;) ) เอาไว้อ่านประกอบ Compilers ด้านบนนั้นแหละ แต่บางอย่างอาจขัดแย้งกันในบางเรื่องกับ Compilers คงต้องเลือก ๆ อ่านสักหน่อย แต่ถือว่าช่วยให้อ่านเจ้า Compilers ได้เยอะ

ปิดท้ายด้วย หนังสือสำหรับคนที่ชอบการออกแบบ Database

Database Management Systems

by Raghu Ramakrishnan and Johannes Gehrke

เล่มนี้เอาไว้เรียนวิชา Database และมันเป็นแหล่งอ้างอิงที่ดีในการทำ Database Tuning ด้วย คงไม่บรรยายอะไรมาก หาอ่านเอาแล้วกัน เล่มนี้ Concept แน่นดีมาก ๆ

ว่าง ๆ จะหาหนังสือดีมาแนะนำอีกนะ ไปก่อนหล่ะ แว็บบบบบบบ