การใช้ DynamoDB ร่วมกับ Amazon S3
ในส่วนนี้เราจะพูดถึง สองวิธีในการรวม DynamoDB กับ Amazon S3 เพื่อการจัดเก็บและดึงข้อมูลอย่างมีประสิทธิภาพ

การเก็บวัตถุขนาดใหญ่ใน DynamoDB
- ตาราง DynamoDB มี ขนาดสูงสุดต่อไอเทม 400 KB
- ดังนั้น การเก็บวัตถุขนาดใหญ่ เช่น รูปภาพหรือวิดีโอ โดยตรงใน DynamoDB จึงไม่เหมาะสม
แนวทางแก้ปัญหา:
- เก็บวัตถุขนาดใหญ่ใน Amazon S3
- เมื่ออัปโหลดวัตถุ เช่น รูปภาพไปยัง S3 จะได้ object key กลับมา
- เก็บ metadata ของวัตถุ เช่น Product ID, ชื่อสินค้า และ object key ลงใน DynamoDB
การทำงานของลูกค้า:
- ดึง metadata จาก DynamoDB ก่อน
- ใช้ URL ที่เก็บใน DynamoDB เพื่อดึงวัตถุขนาดใหญ่จาก S3
- รวมข้อมูลทั้งหมดตามต้องการ
ข้อดี:
- DynamoDB เก็บข้อมูลขนาดเล็กพร้อมดัชนีได้ดี
- S3 เก็บวัตถุขนาดใหญ่ได้ยอดเยี่ยม
- ระบบสามารถสเกลจำนวนสินค้าได้มาก
การใช้ DynamoDB เป็นดัชนีสำหรับ metadata ของ S3
อีกหนึ่งรูปแบบคือ ใช้ DynamoDB เป็นดัชนีสำหรับ metadata ของวัตถุใน S3
- เมื่ออัปโหลดวัตถุไปยัง S3 สามารถตั้งค่าการแจ้งเตือนให้ trigger Lambda function
- Lambda function จะเก็บ metadata ของวัตถุ เช่น ขนาด, วันที่สร้าง, ผู้สร้าง ลงใน DynamoDB
- ช่วยให้ query วัตถุได้อย่างมีประสิทธิภาพ

ข้อดี:
-
S3 ไม่เหมาะกับการ scan หรือ query metadata
-
DynamoDB ช่วยให้สามารถ query เช่น:
- ค้นหาวัตถุตาม timestamp
- คำนวณ storage ของลูกค้า
- รายการวัตถุที่มี attribute เฉพาะ
- ดึงวัตถุที่อัปโหลดภายในช่วงวันที่กำหนด
-
หลังจาก query metadata จาก DynamoDB แล้ว สามารถดึงวัตถุจริงจาก S3 ตามต้องการ
สรุป
- DynamoDB เหมาะสำหรับจัดเก็บข้อมูลขนาดเล็กพร้อมดัชนี
- S3 เหมาะสำหรับจัดเก็บวัตถุขนาดใหญ่
- การเก็บ metadata ใน DynamoDB ช่วยให้ query ข้อมูลได้รวดเร็ว
- การรวมทั้งสองบริการช่วยให้ ระบบสเกลได้ง่ายและมีประสิทธิภาพ
ข้อสรุปสำคัญ
- DynamoDB มี ขนาดสูงสุดต่อไอเทม 400 KB จึงไม่เหมาะกับวัตถุขนาดใหญ่
- ควรเก็บวัตถุขนาดใหญ่ใน S3 และเก็บ metadata ใน DynamoDB
- การใช้ DynamoDB เป็นดัชนีของ S3 ช่วยให้ query และจัดการข้อมูลขนาดใหญ่ได้ง่าย
- การรวม DynamoDB กับ S3 ใช้ข้อดีของแต่ละบริการ ทำให้ระบบสเกลและทำงานได้รวดเร็ว