การเก็บรูปไว้ใน DB ทำให้ Preformance ลดลงหรือเปล่าครับ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

พอดีผมไม่เชี่ยวชาญเรื่อง DB ครับ จากเดิมเคยเขียน PHP ก็จะเก็บพวกรูปไว้นอก mySQL
แต่พอลองมาศึกษา RoR ตัวอย่างส่วนใหญ่จะเก็บรูปไว้ใน Database กันซะส่วนใหญ่
เลยสงสัยว่าการเก็บรูปไว้ใน Database มันไม่ทำให้ Preformace ของ mySQL/Sqlite ลดลงหรือครับ
เพราะกำลังทำ Webapp ที่ต้องมีรูปเก็บจำนวนมาก คาดว่าเฉพาะรูปก็คงราวๆ 300-500MB

ที่กลัวๆคือ Performance จะไม่ดี และอาจมีปัญหาเวลา Import/export ฐานข้อมูล ที่บางโฮสท์
อาจ Kill Process ซะก่อนจะ Import/Export เสร็จ

ปัจจุบันผมใช้ postgresql ครับ แรกๆ เราก็บันทึกไฟล์ใน DB ครับแต่ว่าเรามีปัญหาเรื่องการ Backup/Restore เพราะว่าขนาดนั้นมันใหญ่มาก ๆ ส่วนเรื่องประสิทธิภาพนั้น ขึ้นอยู่กับขนาดของไฟล์ที่ได้บันทึก

ปัญหามันน่าจะอยู่ที่การจัดการมากกว่าเรื่องประสิทธิภาพ เพราะว่าค่อนข้างจัดการยากพอดูเมื่อมีจำนวนไฟล์มาก ๆ ปัจจุบันผมมีขนาดไฟล์รวมกันแล้ว 1 GiB ครับ หลังจากนำไปใส่ไว้ใน DB ก็พบว่า มันอืดเหมือนกัน...

sirn's picture

ไฟล์ไม่ควรจะบันทึกลงฐานข้อมูลครับ ไม่ว่าจะเป็นไฟล์อะไรก็ตาม เหตุผลที่ #mysql อธิบายมีหลักๆ ดังนี้:

  • ไฟล์ซิสเต็มจะจัดการกับการ Cache ไฟล์พวกนี้ได้ดีกว่าฐานข้อมูล
  • ฐานข้อมูลสามารถจัดการกับข้อมูลปกติล้วนๆ (ที่ไม่ใช่ไฟล์) ได้ดีกว่า
  • การทำงานของฐานข้อมูล ปริมาณข้อมูลที่ถูกส่งจะหนักขึ้น

ผมเติมให้อีกนิดว่า ถ้าหากใช้ MySQL ทางที่สามารถจะเพิ่มความเร็วของ Web Application ได้ คือการไม่ให้ MySQL ไปอ่านจากดิสก์ ก็คือปริมาณของหน่วยความจำที่ MySQL ใช้ ต้องพอเพียงกับการเก็บฐานข้อมูลนั้นทั้งก้อน เพราะการอ่านจากดิสก์มันช้า และในกรณีของ Query หนักๆ Load ปกติจะเกิดเพราะ Disk-bond

เรื่องประสิทธิภาพนี่ ยังไงก็ต้องตกลงแน่ๆ แต่ถ้าหากอยากได้วิธีการจัดการกับไฟล์ที่ระดับของฐานข้อมูล และได้ความเร็ว ขอแนะนำให้ใช้ทางเลือกอย่าง MogileFS ดีกว่า

ขอบคุณครับสำหรับคำตอบจากทุกๆท่านครับ ^^

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น