AWS Cloud Quest · แลป 1
First NoSQL Database — Amazon DynamoDB
เป้าหมายของแล็บ
ฝึกทำความเข้าใจและใช้งานฐานข้อมูล NoSQL แบบ managed service ของ AWS โดยสร้างหรือใช้งานตาราง เพิ่มข้อมูล (item) และเข้าใจ primary key ที่ใช้ระบุและค้นหาข้อมูล
Amazon DynamoDB คืออะไร
Amazon DynamoDB เป็นฐานข้อมูล NoSQL แบบ fully managed ที่รองรับรูปแบบข้อมูล key-value และ document สามารถขยายตามความต้องการและออกแบบให้ตอบสนองได้รวดเร็ว โดย AWS ดูแลโครงสร้างพื้นฐานของฐานข้อมูลให้
เหมาะกับงาน เช่น ประวัติการใช้งานของผู้ใช้ ตะกร้าสินค้า session เกม และแอปพลิเคชันที่ต้องรองรับการอ่าน/เขียนจำนวนมาก ไม่ใช่ฐานข้อมูลเชิงสัมพันธ์แบบตารางที่ต้องออกแบบ JOIN เป็นหลัก
คำศัพท์ที่ต้องจำ
- Table: กลุ่มข้อมูลที่เก็บรายการประเภทเดียวกัน
- Item: รายการข้อมูลหนึ่งรายการ คล้าย record แต่ไม่จำเป็นต้องมีชุด attribute เหมือนกันทุก item
- Attribute: ฟิลด์หรือคุณสมบัติของ item เช่น
userId,rating,lastDateWatched - Primary key: คีย์หลักที่ใช้ระบุ item อย่างเป็นเอกลักษณ์
- Partition key: คีย์ที่ DynamoDB ใช้กระจายข้อมูลไปยังพาร์ทิชันภายใน
- Sort key: คีย์เพิ่มเติมที่ช่วยจัดเรียงและค้นหารายการภายใต้ partition key เดียวกัน
Primary key มีรูปแบบหลัก 2 แบบ:
- Partition key อย่างเดียว (simple primary key): ค่า partition key ต้องไม่ซ้ำกันในแต่ละ item ของตาราง
- Partition key + sort key (composite primary key): สามารถมีหลาย item ที่ใช้ partition key เดียวกันได้ แต่คู่ค่าของ partition key และ sort key ต้องไม่ซ้ำกัน
Partition key อย่างเดียว
ค่า partition key ต้องไม่ซ้ำกันทั้งตาราง
Partition key + Sort key (composite)
partition key ซ้ำได้ — แต่คู่ (partition, sort) ต้องไม่ซ้ำ
ชนิดข้อมูลที่ใช้เป็น primary key ได้ ได้แก่ String (S), Number (N), Binary (B) ส่วน attribute ทั่วไปใช้ชนิดข้อมูลอื่นที่ DynamoDB รองรับได้ตามความเหมาะสม
แนวทางทำแล็บ
- เปิด AWS Console จากหน้าของ Cloud Quest และเข้า Amazon DynamoDB
- ตรวจสอบว่าต้องสร้าง table ใหม่หรือใช้ table ที่โจทย์เตรียมไว้
- หากโจทย์ให้สร้าง table ให้กรอกชื่อตารางและ key ตามที่ระบุอย่างตรงตัว
- หากมี partition key และ sort key ให้เลือกชนิดข้อมูลให้ถูกต้อง เช่น String หรือ Number
- สร้าง table แล้วเข้า Explore table items หรือหน้าจอสำหรับเพิ่ม/ดู item
- เพิ่ม item พร้อม attribute และชนิดข้อมูลที่ตรงกับโจทย์
- ตรวจสอบข้อมูลที่บันทึก และกลับไปให้ Cloud Quest ตรวจสอบภารกิจ
ตัวอย่างเพื่อเข้าใจแนวคิด: ตาราง UserVideoHistory อาจใช้ userId เป็น partition key และ lastDateWatched เป็น sort key ได้ในตัวอย่างหนึ่ง แต่ชื่อและชนิดข้อมูลจริงต้องตรวจจากโจทย์ในแล็บ อย่าคัดลอกตัวอย่างนี้ไปใช้โดยไม่ตรวจสอบ
จุดที่มักผิด
- สะกดชื่อ table หรือ attribute ไม่ตรงตามโจทย์
- เลือกชนิดข้อมูลผิด เช่น ต้องการ Number แต่บันทึกเป็น String
- เข้าใจว่า partition key ต้องไม่ซ้ำแม้มี sort key: จริง ๆ แล้วเมื่อใช้ composite key ค่า partition key ซ้ำได้ แต่คู่ key ต้องไม่ซ้ำ
- คิดว่า DynamoDB เป็น SQL database หรือรองรับการ JOIN แบบ relational database โดยตรง
- คิดว่า NoSQL หมายถึงไม่มี schema เลย: DynamoDB มีข้อกำหนดเรื่อง key และชนิดข้อมูลของ key แม้ attribute ทั่วไปจะยืดหยุ่นกว่า
แนวคิดการอ่าน/เขียนและค่าใช้จ่าย
DynamoDB มีโหมด capacity ที่สำคัญ ได้แก่ On-demand ซึ่งเหมาะเมื่อรูปแบบการใช้งานไม่แน่นอนและต้องการให้ระบบจัดการ capacity และ Provisioned ซึ่งกำหนด read/write capacity และอาจใช้ Auto Scaling ปรับ capacity ตาม workload ได้ ค่าใช้จ่ายจริงขึ้นกับโหมด capacity, ขนาดข้อมูล, รูปแบบการอ่าน/เขียน และคุณสมบัติที่เปิดใช้ ควรตรวจราคา AWS ปัจจุบันก่อนประมาณการ
จำก่อนสอบ
- DynamoDB = managed NoSQL แบบ key-value/document
- Table ประกอบด้วย items และ attributes
- Partition key ช่วยระบุตำแหน่งการกระจายข้อมูล
- Composite key = partition key + sort key
- ชื่อ attribute และชนิดข้อมูลต้องตรงกับโจทย์