Skip to main content

การใช้ DynamoDB ร่วมกับ Amazon S3

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

An image

การเก็บวัตถุขนาดใหญ่ใน DynamoDB

  • ตาราง DynamoDB มี ขนาดสูงสุดต่อไอเทม 400 KB
  • ดังนั้น การเก็บวัตถุขนาดใหญ่ เช่น รูปภาพหรือวิดีโอ โดยตรงใน DynamoDB จึงไม่เหมาะสม

แนวทางแก้ปัญหา:

  1. เก็บวัตถุขนาดใหญ่ใน Amazon S3
  2. เมื่ออัปโหลดวัตถุ เช่น รูปภาพไปยัง S3 จะได้ object key กลับมา
  3. เก็บ 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 วัตถุได้อย่างมีประสิทธิภาพ

An image

ข้อดี:

  • 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 ใช้ข้อดีของแต่ละบริการ ทำให้ระบบสเกลและทำงานได้รวดเร็ว