การพัฒนาโปรแกรมกรณีที่มีผู้ใช้จำนวนมาก
ที่หน่วยงานผมได้รับโครงการหนึ่งที่ต้องมีผู้คีย์ข้อมูลประมาณเจ็ดพันกว่าคนต่อวัน ก็ไปจ้างบริษัทหนึ่งซึ่งชำนาญด้านภาษา PHP เขียน web application โดยใช้ mssql เป็นฐานข้อมูล ใช้ server ประมาณ 4 ตัว ก็เกิดปัญหา error could not connect mssql ตลอด สุดท้ายก็ต้องแบ่งช่วงเวลาการคีย์ข้อมูลกันก็ดีขึ้นมาระดับหนึ่ง และทางหน่วยงานก็สรุปมาว่าเป็นเพราะบริษัทออกแบบโปรแกรมให้มีการติดต่อกับฐานข้อมูลมากเกินไป จึงเกิดปัญหานี้ขึ้น ซึ่งก็น่าคิดว่าเราจะออกแบบโปรแกรมยังงัยให้ติดต่อกับฐานข้อมูลน้อยที่สุด จะเอาแคชมาใช้ยังงัยได้บ้าง เป็นความรู้ที่คนศึกษาด้วยตนเองอย่างผมยังค่อนข้างรู้น้อยครับ ถ้าจะมีใครมีคำแนะนำบ้างก็จะขอบคุณเป็นอย่างยิ่งครับ
การ optimize query เป็นสิ่งจำเป็นครับ สำหรับเว็บที่มีการทำงานมากๆ และมีขั้นตอนค่อนข้างเยอะเลยครับ
ส่วนการ cache ผมคิดว่าไม่น่าจะเกิดขึ้นได้ครับ เนื่องจากลักษณะงานไม่อำนวย
การ cache จะได้ผล ถ้า
1.เป็นการแสดงข้อมูล
2.ข้อมูลที่จะแสดงไม่ค่อยเปลี่ยนแปลง
3.สามารถคาดเดาพฤติกรรมการใช้งานล่วงหน้าได้
คำแนะนำที่น่าจะเป็นไปได้คือ
1.เลือกใช้ชนิดของฐานข้อมูลที่มีประสิทธิภาพดีที่สุด ยังมีฐานข้อมูลอีกหลายยี่ห้อให้เลือกใช้ครับ
2.ทำการปรับปรุง query (optimize) ที่เหมาะสม
3.ปรับปรุงประสิทธิภาพของ Server การ Config Server ที่ไม่เหมาะสมอาจทำให้เกิดปัญหานี้ได้นะครับ
ทั้งหมดนี้คงต้องใช้มืออาชีพด้านนี้แหละครับ ถึงจะสำเร็จลุล่วงไปด้วยดี ก็ขอเอาใจช่วยครับ
จะว่าไปบริษัทที่ทำโปรแกรมตัวนี้ก็มีชื่อเสียงนะครับ ถ้าบอกไปต้องร้องอ๋อเลย แต่อย่างว่าหล่ะครับ ตัวโปรแกรมมี dropdown ให้เลือกตำบล อำเภอ จังหวัด มีหน้า 5-6 หน้า บางหน้าต้องมีการบันทึกก่อนจึงจะไปหน้าต่อไปได้ ในแต่ละหน้ามีตารางที่ต้องบันทึกเกือบทุกหน้า แบบนี้มันก็ต้องติดต่อกับ database ตลอดแหละครับ พอ connection เยอะๆ database server มันก็รับไม่ไหว
เท่าที่ทราบตอนแรกก็พยายามกันหลายวิธีไม่ว่าจะเปลี่ยน web server จาก iis ไปเป็น apache,ลง zend optimizer แยก database ไปไว้ที่ application server แต่ละตัว ฯลฯ สุดท้ายก็ดีขึ้นไม่มาก ผมเลยมองว่าถ้าแบบนี้ก็คงต้องทำ offline แล้วให้ส่งออกเป็น text ไฟล์มานำเข้า online ทีหลัง
ตารางพวก dropdown ต่างๆ ก็ไม่น่าจะเปลี่ยนบ่อยครับทำ cahce ได้ครับ
และข้อมูลในตารางเล็กๆ เลี่ยงการใช้ join ครับใช้โค้ด select ธรรมาดาใส่ array cache เก็บไว้
ถ้าไม่ใช่โปรแกรมที่ซับซ้อนมาก พอทำได้แบบนี้แล้วหน้า add ต่างๆ จะไม่ต้องติดต่อฐานข้อมูลเลยยกเว้นขณะเซฟครับ ส่วนหน้า edit ก็คงจะต้องดึงข้อมูลมาแสดงอยู่ครับ
ถ้าไม่ใช่ข้อมูลที่ต้อง update ทันทีอาจจะ gen เป็น query append ลง text file และนำไปประมวลผลช่วงดึกๆ ก็ได้ครับ
ไม่เคยทำ optimize นะครับ เขียนไปเรื่อยเปื่อยตลอด ลองเสนอแนะดูครับ :)