AWS DVA-C02
Esc
↑↓เลื่อน↵เปิดescปิด28 ผลลัพธ์
19

Amazon DynamoDB

NoSQL key-value & document database

Database 11 นาที 23 คำถาม

01ภาพรวม DynamoDB (NoSQL Overview)

Amazon DynamoDB เป็น fully managed, serverless, NoSQL database ที่ AWS ดูแลให้ทั้งหมด ไม่ต้องจัดการ server เอง สามารถ scale ได้ในระดับ massive (millions of requests per second, trillions of rows, 100s of TB storage) มี performance ระดับ single-digit millisecond latency ที่สม่ำเสมอ

DynamoDB เป็นแบบ key-value และ document model ข้อมูลถูก replicate ข้าม 3 Availability Zones (AZ) โดยอัตโนมัติ ทำให้มี high availability และ durability สูง รวมเข้ากับ IAM สำหรับ security/authorization/administration ได้ดี และมีต้นทุนต่ำพร้อม auto scaling

NoSQL vs SQL Database

  • NoSQL databases ไม่รองรับ query joins (หรือรองรับจำกัด) และไม่มีการทำ aggregation แบบ SUM, AVG ฝั่ง database
  • NoSQL databases scale แบบ horizontally (เพิ่ม node) ต่างจาก SQL ที่มักจะ scale แบบ vertical
  • ข้อมูลทุกอย่างที่ query ควรอยู่ใน row/item เดียว (denormalized) เพราะไม่มี join
  • DynamoDB เป็น NoSQL database (ไม่ใช่ relational) ต่างจาก RDS/Aurora ที่เป็น SQL
Tips สำหรับการสอบ
ถ้าโจทย์ต้องการ serverless NoSQL ที่ scale อัตโนมัติ, latency ระดับ millisecond, ไม่ต้องจัดการ server เลย -> ตอบ DynamoDB. ถ้าต้องการ relational/SQL/JOIN/transactions แบบ ACID เต็มรูปแบบ -> RDS/Aurora.

02Tables, Items, Attributes & Primary Keys

DynamoDB ประกอบด้วย Tables แต่ละ table มี Primary Key (ต้องกำหนดตอนสร้างและเปลี่ยนไม่ได้) แต่ละ table มี Items (เทียบเท่า rows) จำนวนไม่จำกัด และแต่ละ item มี Attributes (เทียบเท่า columns) ที่สามารถเพิ่มได้ตลอดเวลา และเป็น null ได้

กับดักข้อสอบ: Maximum Item Size
ขนาด item สูงสุดใน DynamoDB คือ 400 KB (รวมทั้ง attribute names และ values) ถ้าโจทย์ถามว่าจะเก็บข้อมูลใหญ่กว่านี้ (เช่น รูปภาพ/ไฟล์) ทำอย่างไร -> ห้ามตอบว่าเก็บลง DynamoDB ตรง ๆ ให้ดู section Large Items Pattern

ประเภทของ Primary Key

1) Partition Key only (Hash)
Primary key เป็น attribute เดียว เช่น User_ID ค่า partition key ต้องเป็น unique สำหรับทุก item และต้อง diverse (กระจายค่าหลากหลาย) เพื่อให้กระจายข้อมูลข้าม partitions ได้ดี
2) Partition Key + Sort Key (Composite)
Primary key เป็น 2 attributes รวมกัน เช่น User_ID (partition) + Game_Timestamp (sort) ค่า combination ต้อง unique สำหรับแต่ละ item ข้อมูลถูก group ตาม partition key และ sort เรียงตาม sort key. Sort key เดิมเรียกว่า Range key

Data Types ที่รองรับ

  • Scalar Types: String, Number, Binary, Boolean, Null
  • Document Types: List, Map (รองรับ nested JSON)
  • Set Types: String Set, Number Set, Binary Set
Tips: การเลือก Partition Key
เลือก partition key ที่มี high cardinality (ค่ากระจายหลากหลาย) เพื่อกระจาย load ให้ทั่วทุก partition หลีกเลี่ยงค่าที่ซ้ำกันมาก ๆ เพราะจะเกิด hot partition ทำให้ throttling ได้

03Read/Write Capacity Modes

DynamoDB มี 2 capacity modes ในการควบคุมว่าจะจัดการ read/write capacity อย่างไร และเลือกได้ว่าจะใช้แบบไหน และสามารถ switch mode ได้ทุก 24 ชั่วโมง

Provisioned Mode (default)
ระบุ RCU (Read Capacity Units) และ WCU (Write Capacity Units) ล่วงหน้า จ่ายตาม capacity ที่ provision ไว้ รองรับ Auto Scaling เพื่อปรับ throughput ตามโหลด และสามารถใช้ Burst Capacity ชั่วคราว ถ้าเกินจะเจอ ProvisionedThroughputExceededException. เหมาะกับ workload ที่คาดการณ์ได้ ราคาถูกกว่าเมื่อ traffic สม่ำเสมอ
On-Demand Mode
Read/Write scale ขึ้นลงอัตโนมัติตาม workload ไม่ต้องวางแผน capacity จ่ายตามที่ใช้จริง (per request) หน่วยเป็น RRU/WRU (Read/Write Request Units) ไม่มี throttling จาก capacity ราคาแพงกว่า provisioned ราว 2.5 เท่า เหมาะกับ traffic ที่ unpredictable/spiky หรือ workload ใหม่ที่ไม่รู้ pattern
ประเด็นProvisionedOn-Demand
การวางแผน capacityต้อง provision RCU/WCUไม่ต้องวางแผน
Auto Scalingรองรับ (min/max + target utilization)scale อัตโนมัติเต็มที่
หน่วยRCU / WCURRU / WRU
ราคาถูกกว่าเมื่อ load สม่ำเสมอแพงกว่า แต่จ่ายตามใช้จริง
เหมาะกับpredictable trafficunpredictable/spiky traffic, workload ใหม่
Tips สำหรับการสอบ
โจทย์บอกว่า traffic unpredictable/spiky หรือไม่อยากจัดการ capacity เลย -> ตอบ On-Demand. โจทย์บอก traffic คาดการณ์ได้/สม่ำเสมอ และต้องการประหยัดค่าใช้จ่าย -> ตอบ Provisioned + Auto Scaling

04การคำนวณ RCU & WCU (สำคัญมาก)

Write Capacity Units (WCU)

  • 1 WCU = 1 write per second สำหรับ item ขนาด สูงสุด 1 KB
  • ถ้า item ใหญ่กว่า 1 KB ต้องใช้ WCU มากขึ้น โดย ปัดเศษขึ้น (round up) ไปที่ 1 KB ที่ใกล้ที่สุด
  • สูตร: WCU = (จำนวน writes/วินาที) x ceil(item size / 1 KB)

ตัวอย่าง WCU: เขียน 10 items/วินาที ขนาด item 2 KB -> 10 x ceil(2/1) = 10 x 2 = 20 WCU. เขียน 6 items/วินาที ขนาด 4.5 KB -> 6 x ceil(4.5/1) = 6 x 5 = 30 WCU

Read Capacity Units (RCU)

  • 1 RCU = 1 Strongly Consistent Read/วินาที สำหรับ item ขนาดสูงสุด 4 KB
  • 1 RCU = 2 Eventually Consistent Reads/วินาที สำหรับ item ขนาดสูงสุด 4 KB
  • Read size ปัดเศษขึ้น ไปที่ 4 KB ที่ใกล้ที่สุด
  • Eventually Consistent Read (default): อาจอ่านข้อมูลเก่า (stale) ได้ถ้าอ่านทันทีหลัง write แต่ throughput ดีกว่า 2 เท่า
  • Strongly Consistent Read: อ่านได้ข้อมูลล่าสุดเสมอ ใช้ RCU มากกว่า 2 เท่า และ latency สูงกว่า เปิดด้วย parameter ConsistentRead = true ใน GetItem/Query/Scan

ตัวอย่าง RCU (Strongly Consistent): อ่าน 10 reads/วินาที ขนาด item 4 KB -> 10 x ceil(4/4) = 10 RCU. ขนาด item 6 KB -> ceil(6/4) = 2 -> 10 x 2 = 20 RCU

ตัวอย่าง RCU (Eventually Consistent): อ่าน 16 reads/วินาที ขนาด item 12 KB -> ceil(12/4) = 3 RCU ต่อ strongly read แต่ eventual ได้ 2 reads ต่อ RCU -> (16/2) x 3 = 8 x 3 = 24 RCU

กับดักข้อสอบ: rounding & consistency
อย่าลืม ปัดเศษขึ้น (round up) เสมอ! Read ปัดเป็นช่วง 4 KB, Write ปัดเป็นช่วง 1 KB. และ Eventually Consistent ใช้ RCU ครึ่งหนึ่ง ของ Strongly Consistent (อ่านได้ 2 เท่าต่อ RCU). ข้อสอบชอบหลอกด้วยการสลับสองค่านี้

05Secondary Indexes: LSI vs GSI

โดย default เรา query ได้เฉพาะตาม primary key (partition + sort) เท่านั้น ถ้าต้องการ query/sort ตาม attribute อื่น ต้องสร้าง Secondary Index มี 2 แบบคือ LSI และ GSI

Local Secondary Index (LSI)
เป็น alternative sort key สำหรับ table โดยใช้ partition key เดียวกัน กับ base table. ต้องสร้างตอน create table เท่านั้น (เพิ่ม/ลบ/แก้ภายหลังไม่ได้). มีได้สูงสุด 5 LSI ต่อ table. ใช้ RCU/WCU ร่วมกับ base table (ไม่มี throughput แยก). รองรับ attribute projection: KEYS_ONLY, INCLUDE, ALL
Global Secondary Index (GSI)
ใช้ partition key ใหม่ (และ optional sort key ใหม่) สามารถ query ได้คล้าย table ใหม่. สร้าง/ลบ/แก้ได้ หลัง table สร้างแล้ว (any time). มี RCU/WCU ของตัวเอง แยกจาก base table. รองรับ attribute projection เช่นกัน
ประเด็นLSIGSI
Partition Keyเหมือน base tableใหม่ได้ (เปลี่ยน partition key)
Sort Keyalternative sort keyoptional sort key ใหม่
สร้างเมื่อไหร่ตอน create table เท่านั้นได้ทุกเมื่อ (add/remove ภายหลังได้)
จำนวนสูงสุด5 LSI ต่อ table20 GSI ต่อ table (default soft limit)
Throughputใช้ร่วมกับ base tableมี RCU/WCU แยกของตัวเอง
Consistencyรองรับ strongly consistent ได้Eventually consistent เท่านั้น
กับดักข้อสอบ: GSI throttling
ถ้า writes ถูก throttle บน GSI -> main table ก็จะถูก throttle ตามไปด้วย แม้ WCU ของ main table จะเหลือก็ตาม! ดังนั้นต้องเลือก GSI partition key ที่ดีและ provision WCU ให้ GSI เพียงพอ. ส่วน LSI ใช้ throughput ร่วมกับ base table จึงไม่มีปัญหานี้
Tips: เลือก LSI หรือ GSI
ต้องการ query ด้วย partition key เดิม แต่ sort key ใหม่ และ strongly consistent -> LSI (แต่ต้องสร้างตั้งแต่แรก). ต้องการ query ด้วย partition key ใหม่ หรือเพิ่ม index ภายหลัง -> GSI

06Query vs Scan (PartiQL)

Query Operation

  • Query ดึง items ตาม partition key value (ต้องระบุ =) และ optional sort key condition (=, <, <=, >, >=, between, begins_with)
  • FilterExpression: filter ฝั่ง client side เฉพาะ non-key attributes (ไม่ลด RCU ที่ใช้ เพราะ filter หลังอ่านแล้ว)
  • Query มีประสิทธิภาพดีกว่า Scan มาก เพราะอ่านเฉพาะ partition ที่เกี่ยวข้อง
  • Query ได้สูงสุด 1 MB ของข้อมูลต่อครั้ง ใช้ pagination เพื่ออ่านต่อ

Scan Operation

  • Scan อ่าน ทั้ง table แล้วค่อย filter ออก -> ใช้ RCU เยอะ ช้า ไม่มีประสิทธิภาพ
  • อ่านได้สูงสุด 1 MB ต่อครั้ง ต้องใช้ pagination ต่อ
  • เพิ่มความเร็วด้วย Parallel Scan (หลาย worker scan พร้อมกัน) แต่จะใช้ RCU มากขึ้น
  • ใช้ ProjectionExpression เพื่อเลือกเฉพาะ attribute ที่ต้องการ (ลดข้อมูลที่ส่งกลับ) และ FilterExpression เพื่อ filter ฝั่ง client

ProjectionExpression = ระบุ attribute ที่จะ return กลับมา (เหมือน SELECT columns). FilterExpression = กรอง item หลังอ่าน (ใช้ได้กับ non-key attribute, ไม่ช่วยประหยัด RCU). Pagination = เมื่อผลลัพธ์เกิน 1 MB จะมี LastEvaluatedKey ให้ส่งต่อใน ExclusiveStartKey ครั้งถัดไป

กับดักข้อสอบ: Scan vs Query
ถ้าโจทย์บอกว่า performance ช้า/ใช้ RCU เยอะเพราะอ่านทั้ง table -> สาเหตุคือใช้ Scan. แก้โดยเปลี่ยนเป็น Query หรือออกแบบ index (GSI/LSI) ให้ query ได้. อย่าตอบว่าเพิ่ม RCU เป็นทางแก้หลัก

PartiQL เป็น SQL-compatible query language สำหรับ DynamoDB รองรับ SELECT, INSERT, UPDATE, DELETE ผ่าน syntax คล้าย SQL (แต่ยังไม่มี JOIN) ใช้ได้ทั้งใน console, CLI, API

07Conditional Writes, Optimistic Locking & Atomic Counters

DynamoDB รองรับการเขียนแบบมีเงื่อนไขเพื่อป้องกัน race condition และ data corruption โดยใช้ ConditionExpression

Conditional Writes

  • ใช้ ConditionExpression ใน PutItem/UpdateItem/DeleteItem/BatchWriteItem ให้เขียนเฉพาะเมื่อเงื่อนไขเป็นจริง
  • ฟังก์ชันที่ใช้ได้: attribute_exists, attribute_not_exists, attribute_type, contains, begins_with, size
  • ถ้าเงื่อนไขไม่ผ่านจะได้ ConditionalCheckFailedException และไม่เสีย write capacity เต็ม

Optimistic Locking (Version Attribute)

Optimistic Locking ใช้ version number attribute เพื่อให้แน่ใจว่า item ไม่ถูกแก้โดยคนอื่นก่อนที่เราจะ update/delete. แต่ละ write จะตรวจว่า version ตรงกับที่อ่านมาหรือไม่ (ใช้ ConditionExpression เทียบ version) ถ้าตรงจึงเขียนและเพิ่ม version ขึ้น 1 ถ้าไม่ตรงแสดงว่ามีคนแก้ไปแล้ว -> เขียนล้มเหลว

Atomic Counters

Atomic Counter ใช้ UpdateItem กับ UpdateExpression แบบ ADD (เช่น SET attr = attr + :val) เพื่อเพิ่ม/ลดค่า number attribute แบบ atomic โดยไม่ต้องอ่านก่อน เหมาะกับ use case เช่น นับจำนวน website visits, view count ทำงานได้แม้มี concurrent updates

bash
# Conditional write: เขียนเฉพาะเมื่อ item ยังไม่มี (ป้องกันการเขียนทับ)
aws dynamodb put-item \
  --table-name Users \
  --item '{"UserId": {"S": "u123"}, "Name": {"S": "Alice"}}' \
  --condition-expression "attribute_not_exists(UserId)"

# Atomic counter: เพิ่ม view count ขึ้น 1 แบบ atomic
aws dynamodb update-item \
  --table-name Pages \
  --key '{"PageId": {"S": "home"}}' \
  --update-expression "SET ViewCount = ViewCount + :inc" \
  --expression-attribute-values '{":inc": {"N": "1"}}'
Tips: counter vs optimistic locking
ต้องการนับเลขแบบ increment ที่ทนต่อ concurrent (เช่น likes/visits) -> Atomic Counter. ต้องการป้องกันไม่ให้สองคน update item เดียวกันทับกัน (lost update) -> Optimistic Locking ด้วย version attribute + ConditionExpression

08TTL & DynamoDB Streams

Time To Live (TTL)

  • TTL ลบ item โดยอัตโนมัติหลังจากเวลาที่กำหนด (expiry timestamp ใน Unix epoch seconds)
  • การลบเกิดขึ้นภายในประมาณ 48 ชั่วโมง หลังหมดอายุ (ไม่ใช่ทันที)
  • TTL ไม่ใช้ WCU (ไม่มีค่าใช้จ่าย capacity ในการลบ)
  • Item ที่ถูก TTL ลบ จะถูกลบจาก LSI/GSI ด้วย และส่ง event เข้า DynamoDB Streams (REMOVE)
  • Use case: reduce stored data, session data, regulatory/compliance, expire ข้อมูลเก่า
กับดักข้อสอบ: TTL ไม่ลบทันที
TTL ลบ item ภายใน 48 ชม. หลังหมดอายุ ไม่ใช่ทันที! application อาจยังเห็น expired item อยู่ ถ้าต้องการให้ query ไม่เห็น expired item ควรใช้ FilterExpression กรอง item ที่หมดอายุออกฝั่ง app เอง

DynamoDB Streams

DynamoDB Streams เป็น ordered stream ของ item-level modifications (create/update/delete) ใน table ใช้สำหรับ react ต่อการเปลี่ยนแปลงแบบ real-time ข้อมูลใน stream เก็บไว้ 24 ชั่วโมง

  • ใช้ร่วมกับ Lambda triggers (Event Source Mapping) เพื่อประมวลผลเมื่อข้อมูลเปลี่ยน
  • หรืออ่านผ่าน Kinesis Client Library (KCL) applications
  • Use cases: ส่ง notification, สร้าง analytics, replicate ข้าม region, อัปเดต ElasticSearch/OpenSearch, derived tables

StreamViewType (ข้อมูลที่ส่งใน stream)

  • KEYS_ONLY: เฉพาะ key attributes ของ item ที่เปลี่ยน
  • NEW_IMAGE: item ทั้งตัวหลังการเปลี่ยนแปลง
  • OLD_IMAGE: item ทั้งตัวก่อนการเปลี่ยนแปลง
  • NEW_AND_OLD_IMAGES: ทั้งก่อนและหลัง
Tips: Streams + Lambda
ถ้าโจทย์ต้องการ trigger Lambda เมื่อมีข้อมูลใหม่/เปลี่ยน ใน DynamoDB (เช่น ส่ง welcome email เมื่อมี user ใหม่) -> เปิด DynamoDB Streams แล้วต่อ Lambda trigger ผ่าน Event Source Mapping. ต้องเปิด Streams ก่อน Lambda ถึงจะอ่าน records ตั้งแต่ตอนนั้นเป็นต้นไป (records ก่อนหน้าจะไม่เห็น)

09DynamoDB Accelerator (DAX)

DAX (DynamoDB Accelerator) เป็น fully managed, in-memory cache สำหรับ DynamoDB โดยเฉพาะ ช่วยลด latency จาก milliseconds เหลือ microseconds สำหรับ cached reads แบบ seamless (ไม่ต้องแก้ application logic — ใช้ DAX API ที่ compatible กับ DynamoDB API)

  • แก้ปัญหา hot key (อ่าน item เดิมซ้ำ ๆ จำนวนมาก) ได้ดี
  • TTL ของ cache default 5 นาที (300 วินาที) ปรับได้
  • DAX มี 2 caches: Item Cache (สำหรับ GetItem/BatchGetItem) และ Query Cache (สำหรับ Query/Scan)
  • Cluster มีได้สูงสุด 10 nodes ต่อ cluster, แนะนำ multi-AZ (อย่างน้อย 3 nodes ใน production)
  • Secured ด้วย encryption at rest (KMS), VPC, IAM, CloudTrail
ประเด็นDAXElastiCache
ออกแบบมาเพื่อDynamoDB โดยเฉพาะcache ทั่วไป (Redis/Memcached)
การแก้ applicationไม่ต้องแก้ logic (compatible API)ต้องเขียน cache logic เอง
เหมาะกับcache individual objects / query-scan resultsstore aggregation results / cross-table results
Tips: DAX vs ElastiCache
อ่าน DynamoDB ซ้ำ ๆ ตัวเดิม latency สูง อยากได้ microsecond โดยไม่แก้โค้ดมาก -> DAX. ต้องการเก็บผล aggregation/computation หรือ cache ที่ใช้ร่วมหลาย data source -> ElastiCache. ข้อสอบชอบให้เลือกระหว่างสองตัวนี้

10DynamoDB Transactions

DynamoDB Transactions ให้ความสามารถ ACID (Atomicity, Consistency, Isolation, Durability) ข้ามหลาย items และหลาย tables แบบ all-or-nothing — ทุก operation สำเร็จทั้งหมด หรือ fail ทั้งหมด

  • มี 2 modes: Read Transactions (TransactGetItems) และ Write Transactions (TransactWriteItems)
  • เป็น strongly consistent reads สำหรับ transactional reads
  • ใช้ capacity 2 เท่า: transactional write ใช้ 2 WCU ต่อ item (1 KB), transactional read ใช้ 2 RCU ต่อ item (4 KB) เพราะต้อง prepare + commit
  • รองรับสูงสุด 100 items หรือ 4 MB ของข้อมูลต่อ transaction
  • Use cases: financial transactions, ระบบจองที่ต้อง consistency, multiplayer games
กับดักข้อสอบ: capacity ของ transaction
Transaction ใช้ capacity 2 เท่า ของ operation ปกติ! ข้อสอบชอบให้คำนวณ capacity ของ transactional writes/reads — อย่าลืมคูณ 2. เช่น transactional write 10 items/วินาที ขนาด 1 KB = 10 x 2 = 20 WCU
Tips: เมื่อไหร่ใช้ transaction
โจทย์เน้นคำว่า all-or-nothing, ACID, หรือ ต้อง update หลาย table พร้อมกันให้ consistent (เช่น โอนเงินระหว่างบัญชี) -> ตอบ DynamoDB Transactions

11Throttling, Backoff & Large Items Pattern

Throttling & ProvisionedThroughputExceededException

ถ้า exceed provisioned RCU/WCU จะได้ ProvisionedThroughputExceededException สาเหตุที่พบบ่อย: hot keys (partition key ถูกอ่านบ่อยเกินไป), hot partitions, หรือ item ใหญ่เกินไป

วิธีแก้ Throttling

  • Exponential Backoff เมื่อเจอ exception (SDK ทำ retry แบบ exponential backoff ให้อัตโนมัติ)
  • ออกแบบ partition key ให้กระจายดี (high cardinality) เพื่อเลี่ยง hot partition
  • ถ้า RCU เป็นปัญหาเพราะอ่าน item เดิมซ้ำ ๆ -> ใช้ DAX
  • เปิด DynamoDB Auto Scaling หรือเปลี่ยนเป็น On-Demand mode

Large Items Pattern (เก็บข้อมูลใหญ่)

เนื่องจาก item สูงสุด 400 KB ถ้าต้องเก็บข้อมูลใหญ่กว่านี้ (เช่น รูปภาพ, ไฟล์, blob) ให้ใช้ pattern: เก็บ object จริงใน Amazon S3 แล้วเก็บเฉพาะ metadata + reference (S3 object key/URL) ใน DynamoDB

  • เก็บไฟล์ใหญ่ใน S3, เก็บ pointer/metadata ใน DynamoDB
  • สำหรับ attribute ขนาดใหญ่ที่อยากเก็บใน DynamoDB เอง อาจ compress ข้อมูล (GZIP) ก่อนเก็บเป็น Binary
  • Pattern นี้ช่วยลดขนาด item, ลด RCU/WCU, และหลบ 400 KB limit
กับดักข้อสอบ: เก็บไฟล์ใหญ่
โจทย์ถามว่าจะเก็บรูป/ไฟล์ใหญ่กว่า 400 KB อย่างไร -> เก็บไฟล์ใน S3 แล้วเก็บ S3 reference/metadata ใน DynamoDB. อย่าตอบว่าเก็บ binary ลง DynamoDB ตรง ๆ หรือ split หลาย item (เป็นทางเลือกที่ผิดในข้อสอบ)
Tips: API errors
ProvisionedThroughputExceededException -> ใช้ exponential backoff (SDK ทำให้) + แก้ design. ConditionalCheckFailedException -> conditional write ไม่ผ่าน (ปกติในกรณี optimistic locking). ทั้งสองตัวเป็น error ที่ข้อสอบชอบถาม

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ Amazon DynamoDB

23 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย

ทำแล้ว 0/23คะแนน 0
  1. 1.แอปพลิเคชันต้องการเก็บไฟล์รูปภาพขนาด 5 MB พร้อม metadata ของผู้ใช้ใน DynamoDB วิธีออกแบบที่ดีที่สุดคือข้อใด?

  2. 2.Table ต้องการ Strongly Consistent Reads 10 ครั้งต่อวินาที โดย item แต่ละตัวมีขนาด 6 KB ต้อง provision RCU เท่าใด?

  3. 3.นักพัฒนาต้องการเพิ่มจำนวน view count ของหน้าเว็บแบบ atomic เมื่อมี request หลายตัวพร้อมกัน ควรใช้วิธีใด?

  4. 4.แอปมี traffic ที่ไม่สามารถคาดเดาได้และมี spike แบบสุ่ม ไม่ต้องการจัดการ capacity ควรเลือก capacity mode ใด?

  5. 5.นักพัฒนาต้องการ query items โดยใช้ partition key เดิม แต่ต้องการ sort key ที่แตกต่างจาก base table และ table ยังไม่ได้สร้าง ควรใช้อะไร?

  6. 6.เมื่อเขียนข้อมูลผ่าน GSI ถูก throttle แต่ WCU ของ main table ยังเหลือ จะเกิดอะไรขึ้น?

  7. 7.ต้องการ trigger Lambda function ทุกครั้งที่มี item ใหม่ถูกเพิ่มเข้า DynamoDB table เพื่อส่ง welcome email ควรทำอย่างไร?

  8. 8.แอปอ่าน item เดิมซ้ำ ๆ จำนวนมาก (hot key) ทำให้ latency สูงและเปลือง RCU ต้องการลด latency เหลือ microseconds โดยแก้โค้ดน้อยที่สุด ควรใช้อะไร?

  9. 9.ระบบโอนเงินต้องการให้การหักเงินจากบัญชี A และเพิ่มเงินให้บัญชี B สำเร็จพร้อมกันทั้งคู่ หรือ fail ทั้งคู่ ควรใช้คุณสมบัติใดของ DynamoDB?

  10. 10.Transactional write 5 items ต่อวินาที โดยแต่ละ item ขนาด 1 KB ต้องใช้ WCU เท่าใด?

  11. 11.นักพัฒนาพบว่า query ทำงานช้าและเปลือง RCU มากเพราะอ่านข้อมูลทั้ง table แล้วค่อยกรอง สาเหตุและวิธีแก้ที่ดีที่สุดคือ?

  12. 12.ต้องการให้ session data ถูกลบอัตโนมัติเมื่อหมดอายุโดยไม่ต้องเขียน job ลบเอง และไม่ต้องการเสีย WCU ควรใช้อะไร?

  13. 13.เกี่ยวกับ TTL ใน DynamoDB ข้อใดถูกต้องที่สุด?

  14. 14.นักพัฒนาต้องการป้องกันไม่ให้สอง process update item เดียวกันทับกันจนเกิด lost update ควรใช้เทคนิคใด?

  15. 15.เมื่อ application เจอ ProvisionedThroughputExceededException ควรทำอย่างไรเป็นแนวทางที่ AWS แนะนำ?

  16. 16.ต้องการเลือกเฉพาะบาง attribute ที่จะส่งกลับมาในผลลัพธ์ Query เพื่อลดข้อมูลที่ส่ง ควรใช้ parameter ใด?

  17. 17.ข้อใดอธิบาย Eventually Consistent Read ใน DynamoDB ได้ถูกต้อง?

  18. 18.ขนาดสูงสุดของ item เดียวใน DynamoDB คือเท่าใด?

  19. 19.นักพัฒนาต้องการ query DynamoDB ด้วย syntax คล้าย SQL (SELECT/INSERT/UPDATE/DELETE) ควรใช้อะไร?

  20. 20.Provisioned table ต้องเขียน 8 items ต่อวินาที โดยแต่ละ item ขนาด 3.5 KB ต้อง provision WCU เท่าใด?

  21. 21.ข้อใดคือความแตกต่างหลักระหว่าง DAX และ ElastiCache เมื่อใช้กับ DynamoDB?

  22. 22.DynamoDB Streams เก็บข้อมูล records ไว้นานเท่าใด และ StreamViewType ใดที่ให้ทั้งภาพก่อนและหลังการเปลี่ยนแปลง?

  23. 23.เมื่อต้องการ migrate จาก provisioned mode ไป on-demand mode ข้อจำกัดที่ต้องทราบคือข้อใด?