จากกลุ่มสมาคม programmer นั้น มีคำถามเกี่ยวกับการเก็บข้อมูลรูป
ว่าทำอย่างไรดี โดยทางเลือกที่แนะนำกันมา ประกอบไปด้วย
- ทำการ encode ข้อมูลรูปก่อน จากนั้นค่อยเก็บ
- เก็บเป็น binary ลง database เช่น BLOB (Binary Large OBject)
- เก็บรูปลง disk แล้วเก็บเฉพาะ path และชื่อรูปลง database
- ใช้งาน CDN (Content Delivery Network)
คำถามที่น่าสนใจคือ ทำไมถึงเก็บข้อมูลรูปลง database ?
ไม่ว่าจะ encode หรือ binary หรือจะ encrypt เลยไหม
เพราะว่าเป็นการเพิ่มภาระงานให้กับ database และ server สูงมาก ๆ
ยิ่งมีคนใช้งานเยอะ ๆ ยิ่งหนัก
รวมทั้งยากต่อการ scale อีก
ยิ่งใช้งาน disk เยอะอีก
ตอนเข้ามาใช้งานก็ต้อง อ่านจาก database แปลงข้อมูล เก็บลง memory
แล้ว return กลับไป เยอะไหมนะ ?
มันดีไหมนะ ?
หนักกว่านั้น ในระบบต้องทำการ resize รูปอีกไหมนะ ?
เพราะว่าใช้ข้อมูลรูปแบบ original บ่อยครั้งจะไม่เหมาะสม
ทั้งขนาด ทั้ง bandwidth ของ network เป็นต้น
แต่ถ้าไม่ใช่ วิธีการนี้อาจจะไม่ถูกต้องเท่าไร !!
แต่การเลือกวิธีการมันก็ขึ้นอยู่กับการตัดสินใจ
บนพื้นฐานของ skill และความต้องการเป็นหลัก
ถ้ายังเก็บข้อมูลรูปลง database คือการ write แล้ว
ในส่วนของการอ่านหรือ read ไม่ควรอ่านจาก database
นั่นคือ การแยกกันระหว่าง write vs read
ในการ read ข้อมูลรูป ไม่ควรอ่านจาก database ทำอย่างไรได้บ้าง ?
ยกตัวอย่างเช่น ในขั้นตอนของการ write
เมื่อบันทึกข้อมูลลง database เสร็จแล้ว
ให้ทำการสร้างรูปสำหรับการ read ต่อเลย
รวมทั้งการ resize รูปอีกด้วย
ต้องเอา messaging มาคั่น และแยก resize image server ออกมาอีกไหม
ให้เป็น file ปกตินี่แหละ อยู่ที่ว่าจะเป็น format อะไร
จากนั้นการเข้าถึงให้ผ่าน CDN เช่น Cloudflare
หรือ caching ของพวก API Gateway/ cache server ไปเลย
ทำให้เราแยกการ write และ read
รวมทั้งลดภาระงานของ server และลดการใช้งาน bandwitdth อีกด้วย
บางรูปต้องมีการตรวจสอบการเข้าถึงด้วย
เช่นมีการใช้งาน token ใด ๆ มาด้วยเสมอ
ตรงนี้ก็เป็นอีกประเด็น
ปล. การเก็บข้อมูลลง database อาจจะมีเหตุผลที่ไม่อาจปฏิเสธได้ก็เป็นได้
ตรงนี้มันขึ้นอยู่กับข้อจำกัดของแต่ละที่แล้ว
แต่ถ้าไม่เก็บได้ก็จะดีกว่านะ จะได้ scale และจัดการรูปได้ง่ายขึ้น
เผื่อใครที่ใช้ Cloud Flare นั้น เรื่องนี้จะถูกแก้ไขหรือลดการทำซ้ำด้วย Cloudflare Image
ครบจบในที่เดียว ทั้งการ resize และ caching ให้เลย
สุดท้ายแล้ว ทำได้ กับ ทำให้ดี มันแตกต่างกันนะ
แต่เหนือสิ่งอื่นใด ก็ขึ้นกับระบบนั้น ๆ ด้วย