Writes Operation

Concurrent Writes (การเขียนพร้อมกัน)
สมมติว่า ผู้ใช้สองคนพยายามอัปเดตไอเทมเดียวกันพร้อมกัน
- ผู้ใช้คนแรกต้องการอัปเดตค่าเป็น 1
- ผู้ใช้คนที่สองต้องการอัปเดตค่าเป็น 2
ทั้งสองการเขียนจะ รายงานความสำเร็จแยกกัน แต่ผลลัพธ์สุดท้ายในฐานข้อมูลจะเป็นเพียงค่าเดียวเท่านั้น
- เช่น การเขียนของผู้ใช้คนแรกอัปเดตค่าเป็น 1
- การเขียนของผู้ใช้คนที่สองจะเขียนทับเป็น 2
ดังนั้น หนึ่งการเขียนจะทับอีกการเขียน พฤติกรรมแบบนี้เรียกว่า Concurrent Writes
Conditional Writes (การเขียนแบบมีเงื่อนไข)
เพื่อแก้ปัญหา concurrency, DynamoDB รองรับ การเขียนแบบมีเงื่อนไข
- ผู้ใช้ระบุ เงื่อนไขที่ต้องเป็นจริง เพื่อให้การเขียนเกิดขึ้น
- ตัวอย่าง: ผู้ใช้คนหนึ่งต้องการอัปเดตค่าเป็น 1 ถ้า ค่าปัจจุบันเป็น 0
- ผู้ใช้คนอื่นต้องการอัปเดตค่าเป็น 2 ถ้า ค่าปัจจุบันเป็น 0
ในกรณีนี้:
- การเขียนครั้งแรกจะสำเร็จ (ค่าเปลี่ยนเป็น 1)
- การเขียนครั้งที่สองจะล้มเหลว เพราะเงื่อนไขไม่เป็นจริง (ค่าไม่ใช่ 0 อีกต่อไป)
กลไกนี้ช่วยแก้ปัญหา concurrent writes และเรียกว่า Optimistic Locking
Atomic Writes (การเขียนแบบอะตอมิก)
อีกประเภทคือ Atomic Writes
- สมมติว่าผู้ใช้คนหนึ่งเพิ่มค่าเป็น +1
- ผู้ใช้คนอื่นเพิ่มค่าเป็น +2
ผลลัพธ์สุดท้ายจะเป็น ผลรวมของทั้งสองการเขียน คือ +3
- วิธีนี้รับประกันว่า การอัปเดตพร้อมกันจะรวมกันอย่างถูกต้อง โดยไม่ทับค่าเดิม
Batch Writes (การเขียนแบบกลุ่ม)
- Batch Writes ช่วยให้ผู้ใช้เขียนหรืออัปเดตหลายไอเทมพร้อมกัน
- เหมาะสำหรับ ประมวลผลหลายไอเทมในคำสั่งเดียวอย่างมีประสิทธิภาพ
สรุป
- Concurrent Writes อาจทำให้เกิดปัญหาการทับค่า
- Conditional Writes ป้องกันปัญหา concurrency โดยอัปเดตเฉพาะเมื่อเงื่อนไขเป็นจริง (Optimistic Locking)
- Atomic Writes ทำให้การอัปเดตหลายครั้งรวมกันอย่างถูกต้อง
- Batch Writes ช่วยเขียนหรืออัปเดตหลายไอเทมพร้อมกัน เพิ่มประสิทธิภาพ