ตาราง รายการ และคีย์หลัก
ออกแบบตาราง DynamoDB ด้วยคีย์พาร์ทิชันและคีย์หลักแบบประกอบ พร้อมทำความเข้าใจขีดจำกัดการจัดเก็บระดับรายการ
ตาราง รายการ และคีย์หลัก เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
DynamoDB: ฐานข้อมูลคีย์-ค่าของ NoSQL
Amazon DynamoDB คือฐานข้อมูลคีย์-ค่าและเอกสารแบบไร้เซิร์ฟเวอร์ที่มีการจัดการเต็มรูปแบบ ออกแบบมาให้มีประสิทธิภาพระดับมิลลิวินาทีหลักเดียวในทุกขนาด ซึ่งแตกต่างจากฐานข้อมูลเชิงสัมพันธ์ DynamoDB เป็นแบบไม่มีสคีมา แต่ละรายการจึงมีชุดแอตทริบิวต์แตกต่างกันได้ ตราบใดที่มีคีย์หลักอยู่
DynamoDB จัดเก็บข้อมูลในตาราง ซึ่งเป็นคอนเทนเนอร์ระดับบนสุดที่เทียบได้กับตาราง SQL ระบบจะกระจายตารางไปยังโหนดจัดเก็บข้อมูลหลายโหนดในหลาย AZ โดยอัตโนมัติ ทำให้มีความซ้ำซ้อนในตัวโดยไม่ต้องให้คุณกำหนดค่าใด ๆ
ตารางและรายการ
ตาราง DynamoDB เก็บชุดของรายการ โดยแต่ละรายการประกอบด้วยชุดของแอตทริบิวต์ แอตทริบิวต์เป็นค่าที่มีชนิด ได้แก่ String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), List (L), Map (M) และชนิด Set (SS, NS, BS)
ทุกรายการในตารางต้องมีแอตทริบิวต์คีย์หลัก ส่วนแอตทริบิวต์อื่นทั้งหมดเป็นตัวเลือกและแตกต่างกันระหว่างรายการได้ รายการหนึ่งมีขนาดได้สูงสุด 400 KB โดยรวมชื่อและค่าของแอตทริบิวต์ทั้งหมด
# Example DynamoDB item structure (JSON)
{
'UserId': {'S': 'user-abc-123'},
'Timestamp': {'N': '1719000000'},
'Username': {'S': 'alice'},
'Score': {'N': '4200'},
'Tags': {'SS': ['premium', 'verified']}
}คีย์หลักแบบ simple: เฉพาะคีย์พาร์ทิชัน
คีย์หลักแบบ simple ประกอบด้วยแอตทริบิวต์เดียวที่เรียกว่าคีย์พาร์ทิชัน (หรือเรียกว่าคีย์แฮช) DynamoDB ใช้ฟังก์ชันแฮชภายในกับค่าคีย์พาร์ทิชันเพื่อกำหนดว่าพาร์ทิชันจัดเก็บใดจะเก็บรายการนั้น รายการทั้งหมดที่มีค่าคีย์พาร์ทิชันเหมือนกันจะถูกจัดเก็บไว้ด้วยกัน
เมื่อใช้คีย์หลักแบบ simple รายการสองรายการในตารางจะมีค่าคีย์พาร์ทิชันเดียวกันไม่ได้ เพราะค่านี้ระบุแต่ละรายการได้โดยไม่ซ้ำกัน การออกแบบนี้เหมาะกับตารางที่เข้าถึงข้อมูลด้วยตัวระบุที่ไม่ซ้ำกันเสมอ เช่น รหัสผู้ใช้หรือรหัสคำสั่งซื้อ
# Create a table with a simple (partition key only) primary key
aws dynamodb create-table \
--table-name Users \
--attribute-definitions AttributeName=UserId,AttributeType=S \
--key-schema AttributeName=UserId,KeyType=HASH \
--billing-mode PAY_PER_REQUESTคีย์หลักแบบผสม: คีย์พาร์ทิชัน + คีย์เรียงลำดับ
คีย์หลักแบบผสม ใช้ทั้งคีย์พาร์ทิชันและคีย์เรียงลำดับ (หรือเรียกว่าคีย์ช่วง) รายการที่มีคีย์พาร์ทิชันเดียวกันจะถูกจัดเก็บไว้ด้วยกันและเรียงตามค่าคีย์เรียงลำดับ ทำให้ค้นหาข้อมูลเป็นช่วงภายในพาร์ทิชันได้
การออกแบบนี้ยืดหยุ่นอย่างมาก: รายการหลายรายการสามารถใช้คีย์พาร์ทิชันเดียวกันได้ ตราบใดที่คีย์เรียงลำดับแตกต่างกัน ตัวอย่างเช่น ตาราง Orders อาจใช้ CustomerId เป็นคีย์พาร์ทิชันและ OrderDate เป็นคีย์เรียงลำดับ ทำให้คุณค้นหาคำสั่งซื้อทั้งหมดของลูกค้ารายหนึ่งโดยเรียงตามวันที่ได้
# Create a table with a composite primary key
aws dynamodb create-table \
--table-name Orders \
--attribute-definitions \
AttributeName=CustomerId,AttributeType=S \
AttributeName=OrderDate,AttributeType=S \
--key-schema \
AttributeName=CustomerId,KeyType=HASH \
AttributeName=OrderDate,KeyType=RANGE \
--billing-mode PAY_PER_REQUESTการออกแบบคีย์พาร์ทิชันและพาร์ทิชันร้อน
การเลือกคีย์พาร์ทิชันที่เหมาะสมเป็นการตัดสินใจด้านการออกแบบ DynamoDB ที่สำคัญที่สุด คีย์พาร์ทิชันที่ดีมีคาร์ดินาลิตีสูง (มีค่าที่แตกต่างกันจำนวนมาก) และกระจายการเข้าถึงอย่างสม่ำเสมอไปยังพาร์ทิชันต่าง ๆ การเลือกที่ไม่ดีทำให้เกิดพาร์ทิชันร้อน ซึ่งพาร์ทิชันหนึ่งได้รับการรับส่งข้อมูลมากเกินสัดส่วนจนทำให้เกิดการจำกัดปริมาณ
รูปแบบที่ควรหลีกเลี่ยง: การใช้แฟล็กบูลีน (มีเพียงสองค่า) วันที่ที่รวมการเขียนข้อมูลของวันนี้ไว้ด้วยกันทั้งหมด หรือฟิลด์สถานะที่มีคาร์ดินาลิตีต่ำ ตัวเลือกที่ดี ได้แก่ ID ผู้ใช้ ID อุปกรณ์ UUID แบบสุ่ม หรือค่าแบบผสม เช่น tenantId#entityType
PutItem, GetItem และ DeleteItem
การดำเนินการกับรายการ DynamoDB พื้นฐานสามอย่าง ได้แก่:
- PutItem: เขียนรายการใหม่หรือแทนที่รายการเดิมทั้งหมดที่มีคีย์หลักเดียวกัน
- GetItem: ดึงรายการเดียวด้วยคีย์หลักที่ตรงกันทุกประการ (ต้องใช้คีย์ทั้งหมด ได้แก่ คีย์พาร์ทิชัน และคีย์เรียงลำดับหากเป็นคีย์แบบผสม)
- DeleteItem: ลบรายการด้วยคีย์หลักที่ตรงกันทุกประการ
การดำเนินการทั้งสามอย่างเป็นแบบอะตอมิกในระดับรายการ โดยค่าเริ่มต้น GetItem ใช้การอ่านแบบสอดคล้องในท้ายที่สุด การเพิ่ม --consistent-read จะบังคับให้เป็นการอ่านแบบสอดคล้องอย่างเข้มงวด ซึ่งคืนค่าที่เขียนล่าสุดเสมอ
# PutItem
aws dynamodb put-item \
--table-name Users \
--item '{"UserId":{"S":"user-123"},"Name":{"S":"Alice"}}'
# GetItem
aws dynamodb get-item \
--table-name Users \
--key '{"UserId":{"S":"user-123"}}' \
--consistent-readUpdateItem และนิพจน์แบบมีเงื่อนไข
UpdateItem แก้ไขแอตทริบิวต์เฉพาะของรายการที่มีอยู่โดยไม่แทนที่ทั้งรายการ ซึ่งแตกต่างจาก PutItem คุณสามารถเพิ่มแอตทริบิวต์ ลบแอตทริบิวต์ หรือดำเนินการทางคณิตศาสตร์กับแอตทริบิวต์ Number แบบอะตอมิกได้ (เช่น เพิ่มค่าตัวนับ)
นิพจน์แบบมีเงื่อนไข ช่วยให้คุณระบุว่าการดำเนินการจะสำเร็จได้ก็ต่อเมื่อเงื่อนไขเป็นจริง ตัวอย่างเช่น อัปเดตสถานะของรายการเมื่อสถานะปัจจุบันเป็น PENDING เท่านั้น วิธีนี้ใช้รูปแบบการล็อกเชิงมองโลกในแง่ดีได้โดยไม่ต้องใช้ธุรกรรม และเป็นเทคนิคสำคัญในการออกแบบ DynamoDB
# Atomically increment a counter, only if item exists
aws dynamodb update-item \
--table-name Orders \
--key '{"CustomerId":{"S":"c-123"},"OrderDate":{"S":"2026-06-20"}}' \
--update-expression 'SET ItemCount = ItemCount + :inc' \
--condition-expression 'attribute_exists(CustomerId)' \
--expression-attribute-values '{":inc":{"N":"1"}}'Query เทียบกับ Scan
Query ดึงรายการที่มีค่าคีย์พาร์ทิชันเดียวกัน และอาจกรองเพิ่มเติมด้วยเงื่อนไขของคีย์เรียงลำดับได้ Query มีประสิทธิภาพ เพราะอ่านเฉพาะพาร์ทิชันเป้าหมาย คุณสามารถใช้เงื่อนไขคีย์เรียงลำดับ เช่น begins_with, between, =, <, > เพื่อจำกัดผลลัพธ์ภายในพาร์ทิชัน
Scan อ่านทุกรายการในตาราง แล้วจึงใช้นิพจน์ตัวกรองที่เป็นตัวเลือก การสแกนมีค่าใช้จ่ายสูงสำหรับตารางขนาดใหญ่และควรหลีกเลี่ยงในรูปแบบการค้นหาสำหรับระบบจริง หากคุณพบว่าต้องใช้ Scan บ่อยครั้ง ควรทบทวนการออกแบบตารางหรือเพิ่มดัชนีรองส่วนกลาง
# Query: get all orders for customer c-123 after a date
aws dynamodb query \
--table-name Orders \
--key-condition-expression 'CustomerId = :cid AND OrderDate >= :dt' \
--expression-attribute-values \
'{":cid":{"S":"c-123"},":dt":{"S":"2026-01-01"}}'การอ่านแบบสอดคล้องอย่างเข้มงวดเทียบกับการอ่านแบบสอดคล้องในที่สุด
DynamoDB จัดเก็บข้อมูลของคุณไว้สามชุดใน AZ หลายแห่ง การอ่านแบบ สอดคล้องในที่สุด (ค่าเริ่มต้น) อาจส่งคืนค่าที่ล้าสมัยเล็กน้อย หากการเขียนล่าสุดยังเผยแพร่ไปยังสำเนาทั้งหมดไม่ครบ แต่จะใช้ หน่วยความจุการอ่านเพียงครึ่งหนึ่งของการอ่านแบบสอดคล้องอย่างเข้มงวด
การอ่านแบบ สอดคล้องอย่างเข้มงวดจะส่งคืนการเขียนล่าสุดที่ยืนยันแล้วเสมอ แต่มีค่าใช้จ่ายเป็นสองเท่าของ RCU และไม่พร้อมใช้งานกับ Global Secondary Index เลือกใช้การอ่านแบบสอดคล้องในที่สุดสำหรับงานที่มีปริมาณการอ่านสูงและต้องการอัตราการประมวลผลสูง ส่วนการอ่านแบบสอดคล้องอย่างเข้มงวดควรใช้เฉพาะเมื่อแอปพลิเคชันต้องการข้อมูลล่าสุดอย่างแท้จริงเท่านั้น
ธุรกรรม DynamoDB
DynamoDB รองรับธุรกรรม ACID ผ่าน TransactWriteItems และ TransactGetItems ธุรกรรมหนึ่งรายการสามารถรวมการดำเนินการเขียนได้สูงสุด 100 รายการ ครอบคลุมหลายรายการข้อมูลและแม้แต่หลายตาราง โดยรับประกันว่าการดำเนินการทั้งหมดจะสำเร็จหรือถูกย้อนกลับทั้งหมดแบบอะตอมิก
ใช้ธุรกรรมในกรณีต่าง ๆ เช่น การโอนเงินระหว่างบัญชี (หักจากรายการหนึ่งและเพิ่มให้อีกรายการหนึ่ง) หรือการจองที่นั่ง (ตรวจสอบจำนวนที่ว่างและจองแบบอะตอมิก) ธุรกรรมมีค่าใช้จ่ายเป็นสองเท่าของ RCU/WCU ปกติ ดังนั้นควรใช้เฉพาะเมื่อจำเป็นต้องมีความเป็นอะตอมิกข้ามรายการข้อมูลหลายรายการอย่างแท้จริง
ขีดจำกัดขนาดรายการข้อมูลและเคล็ดลับการออกแบบข้อมูล
ขีดจำกัด 400 KB ต่อตัวรายการข้อมูลของ DynamoDB มีผลต่อการออกแบบข้อมูล สำหรับข้อมูลขนาดใหญ่ (เช่น รูปภาพหรือเอกสารขนาดใหญ่) ให้จัดเก็บข้อมูลไบนารีไว้ใน S3 และจัดเก็บเฉพาะคีย์ออบเจ็กต์ของ S3 ไว้ใน DynamoDB สำหรับข้อมูลแบบลำดับชั้นที่ซ้อนกันลึก ให้ออกแบบประเภทโหนดแต่ละประเภทด้วยรูปแบบคีย์พาร์ทิชันของตนเอง โดยใช้การออกแบบตารางเดียว—ตารางหนึ่งตารางจะเก็บประเภทเอนทิตีหลายประเภท ซึ่งแยกความแตกต่างด้วยคำนำหน้าคีย์พาร์ทิชันและรูปแบบคีย์เรียงลำดับ
การออกแบบตารางเดียวช่วยลดจำนวนตารางและทำให้เข้าถึงข้อมูลตามรูปแบบการใช้งานได้อย่างมีประสิทธิภาพ โดยจัดวางรายการข้อมูลที่เกี่ยวข้องไว้ในพาร์ทิชันเดียวกัน เทคนิคนี้เป็นเทคนิคขั้นสูงที่ช่วยลดภาระด้านการปฏิบัติงานและเพิ่มประสิทธิภาพสำหรับรูปแบบการเข้าถึงข้อมูลที่ซับซ้อน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า ตาราง DynamoDB เก็บรายการข้อมูลที่ไม่มีสคีมาและจำกัดขนาดไว้ที่ 400 KB คีย์หลักแบบง่ายใช้คีย์พาร์ทิชันเพียงอย่างเดียว ส่วนคีย์แบบผสมจะเพิ่มคีย์เรียงลำดับสำหรับการสืบค้นเป็นช่วง และคีย์พาร์ทิชันที่มีค่าความหลากหลายสูงช่วยป้องกันพาร์ทิชันร้อน ให้ใช้ Query แทน Scan เพื่อการเข้าถึงที่มีประสิทธิภาพ บทถัดไปจะกล่าวถึงโหมดความจุแบบจัดสรรล่วงหน้าเทียบกับแบบตามการใช้งานจริง
คำถามที่พบบ่อย
บทเรียน “ตาราง รายการ และคีย์หลัก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตาราง รายการ และคีย์หลัก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตาราง รายการ และคีย์หลัก”
ออกแบบตาราง DynamoDB ด้วยคีย์พาร์ทิชันและคีย์หลักแบบประกอบ พร้อมทำความเข้าใจขีดจำกัดการจัดเก็บระดับรายการ คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ตาราง รายการ และคีย์หลัก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตาราง รายการ และคีย์หลัก
- ความจุแบบจัดสรรเทียบกับแบบตามต้องการ
- ดัชนีรองระดับโลกและดัชนีรองเฉพาะที่
- สตรีม DynamoDB และตารางทั่วโลก