Ruby on Rails (RoR) เป็น full-stack MVC framework หมายความว่ามีครบทุกส่วนสำหรับการจะสร้าง web application สักตัวหนึ่งแบบ MVC (Model-View-Controller)
ในส่วน Model ของ RoR คือ ActiveRecords ซึ่งจะ encapsulate เจ้า RDBMS (Relational Database Management System สักตัวให้เป็น ORDBMS (Object Relational Database Management System)
การใช้งาน ActiveRecords นี่ก็มี tricks มากมายน่าดูเหมือนกัน
ที่มาของ tricks โดยส่วนใหญ่เกิดขึ้นเพราะการทำงานของ ActiveRecords จะเร็วหรือช้าขึ้นอยู่กับ RDBMS ที่อยู่ข้างหลัง
trick ที่ผมใช้ในวันสองวันนี้แล้วทำให้ GotoKnow เร็วขึ้นเยอะคือการทำ “ตรงข้าม” กับคำแนะนำในการใช้ ActiveRecords ครับ
โดยปกติแล้ว เพื่อการ access เร็ว เขาจะแนะนำกันว่า ให้พยายามทำ query ให้เหลือแต่น้อย นั่นคือ query เดียวให้ได้ has_one และ has_many objects มาให้หมดเลย สำหรับ ActiveRecords ก็คือการเพิ่ม :include parameter เข้าไป อาทิเช่น
p = Planet.find(:first, :conditions => [“address => ‘howto’”], :include => [:user, :taggings])
ซึ่งเราจะได้ planet มาพร้อมกับ user เจ้าของเรียบร้อยภายใน query เดียว ประหยัด socket และ waiting time ระหว่างเครื่องแม่ข่าย
แต่ MySQL มีข้อเด่นตรงที่ execute simple queries ได้เร็ว และ execute complex queries ได้ช้า (บางคนว่าช้าขึ้นแบบ exponential ทีเดียว)
ดังนั้น การหาด้วย
p = Planet.find(:first, :conditions => [“address => ‘howto’”])
แล้วค่อยหา user โดยการ access ด้วย p.user ซึ่งจะทำให้เกิดการ access database ไปอีกหนึ่ง query กลับทำงานได้เร็วกว่า
เรื่องนี้สอนให้รู้ว่า ใช้ ActiveRecords ต้องคำนึงถึง RDBMS ที่อยู่ข้างหลังด้วย หากเป็น RDBMS ตัวอื่น ผลลัพธ์อาจเป็นตรงข้ามก็ได้ครับ
หมายเหตุ ถ้าจะหาเพียง planet เดียวดังตัวอย่างที่ผมยกมา ใช้คำสั่งดังต่อไปนี้จะง่ายกว่าครับ
p = Planet.find_by_address(‘howto’)
Optimizing ActiveRecords ที่ติดต่อกับ MySQL ด้วยการใช้ query ที่ง่ายขึ้น
ความเห็น
บทความในวันเดียวกัน
รัชนีพร คนชุม · 4 มิ.ย. 2550
ข้ามสีทันดร · 4 มิ.ย. 2550
ngorbright · 4 มิ.ย. 2550
Panda · 4 มิ.ย. 2550
ดอกแก้ว · 4 มิ.ย. 2550
ยูมิ · 4 มิ.ย. 2550
โรงเรียน เซนต์นิโกลาส · 4 มิ.ย. 2550
ผมอ่านแล้วต้องแบบ bookmark ไว้ด้วย เผื่อจะได้เขียนอะไรที่คนใช้เยอะๆมั่ง :-)
ขอขอบคุณอาจารย์ธวัชชัย...
เรื่องข้อคิดเห็นแบบ pop-up หรือ "โผล่ขึ้นมา"
ได้ยินจากพวก กฟผ. บอกว่า สายใยนำแสงของการไฟฟ้าฯ มีตามแนวสายส่งไฟแรงสูงอยู่แล้ว
โอ้โห... การไฟฟ้าฯ โบนัส 3.5 เดือนเลยหรือครับ เรื่องนี้คนไทยคงไม่มีโอกาสได้รู้กันเท่าไหร่ ที่จริงแล้วถ้าการไฟฟ้าฯ เป็นบริษัทจดทะเบียนในตลาดหลักทรัพย์ก็ดีเหมือนกัน เพราะข้อมูลอย่างนี้จะต้องเปิดเผยและจะมีนักการเงินมาช่วยวิเคราะห์กันเยอะเลย
ขอบคถณ ดร.ธวัชชัย ครับ มาแชร์ประสบการณ์เรื่อง RoR ซึ่งเมืองไทยยังใหม่อยู่มากๆ มีลูกค้ามาหาผมสองสามราย ถามหาเซอร์ฟเวอร์ที่รัน RoR ผมเองยังไม่รู้จักเลยครับตอนนั้น จนตอนนี้ก็ยังไม่ได้ศึกษาเต็มๆ เท่าที่ควร
ถ้ามันดีอย่างนี้ จะกลับไปศึกษาเพิ่มล่ะครับ
-- หากมีเวลา แวะมาให้คำวิจารณ์ มาตรฐานระบบธุรกิจแฟรนไชส์ตัวใหม่ของไทย ที่ลิงค์นี้นะครับ