DynamoDB indexes, streams และการปรับแต่งประสิทธิภาพ
การใช้งาน Data Stores บน AWS
Dunieski Otano
AWS Solutions Architect
Query ที่ทำไม่ได้
ตาราง: userId (partition key), orderDate (sort key)
ความต้องการ: ค้นหาคำสั่งซื้อด้วยอีเมล
ปัญหา: ไม่สามารถ query บน attribute ที่ไม่ใช่ key
วิธีแก้: Global Secondary Index
Index รองรับรูปแบบการเข้าถึงข้อมูลได้หลายแบบ
Global Secondary Index (GSI)
partition key ต่างจากตารางหลัก
เพิ่มได้ทุกเมื่อหลังสร้างตาราง
รองรับเฉพาะ eventually consistent reads
กรณีใช้งาน: Query บน attribute ที่ไม่ใช่ primary key
Local Secondary Index (LSI)
partition key เดียวกัน
แต่ sort key ต่างกัน
ต้องสร้างพร้อมกับตาราง
รองรับ strongly consistent reads
กรณีใช้งาน: จัดเรียงข้อมูลใน partition แบบอื่น
GSI vs LSI — เลือกใช้เมื่อไหร่
GSI
: partition key ต่างกัน เพิ่มได้ทุกเมื่อ ใช้ eventual consistency
LSI
: partition key เดียวกัน สร้างพร้อมตาราง ใช้ strong consistency
ที่นิยมสุด: GSI สำหรับรูปแบบการเข้าถึงข้อมูลที่ยืดหยุ่น
การ serialization ข้อมูลสำหรับ DynamoDB
ปัญหา
: DynamoDB ไม่รองรับการจัดเก็บ Python objects โดยตรง
วิธีแก้
: แปลงเป็น JSON หรือ binary
JSON
: ข้อมูลทั่วไป (dict, list) — json.dumps()
Base64
: ข้อมูล binary (รูปภาพ, token)
DynamoDB Streams สำหรับการจับการเปลี่ยนแปลงข้อมูล
Streams
: บันทึกการเปลี่ยนแปลงทั้งหมดของตารางตามลำดับ
จับเหตุการณ์: Insert, Update, Delete
กรณีใช้งาน: Audit log, replication, trigger
ประมวลผลร่วมกับ Lambda เพื่อตอบสนองแบบ real-time
Time-to-Live สำหรับการหมดอายุอัตโนมัติ
TTL
: ลบ item อัตโนมัติเมื่อหมดอายุ
กำหนด Unix timestamp ใน TTL attribute
เหมาะสำหรับ: Session, token ชั่วคราว, cache
ไม่มีค่าใช้จ่ายสำหรับการลบด้วย TTL
ประเภทของ index projection และประสิทธิภาพ query
KEYS_ONLY
: เฉพาะ key attribute ขนาดเล็กที่สุด
INCLUDE
: Key + attribute ที่ระบุ
ALL
: ทุก attribute ขนาดใหญ่สุด ไม่ต้อง fetch เพิ่ม
ต้องแลก: ต้นทุนพื้นที่จัดเก็บ vs ประสิทธิภาพ query
Batch operations และ transactions
BatchGetItem
: อ่านได้สูงสุด 100 item, ไม่เกิน 16MB
BatchWriteItem
: เขียนได้สูงสุด 25 item
TransactWriteItems
: ACID ครอบคลุมสูงสุด 100 item
ใช้เพื่อ: ประสิทธิภาพ (batch) หรือความสอดคล้อง (transaction)
มาฝึกกันเถอะ!
การใช้งาน Data Stores บน AWS
Preparing Video For Download...