Skip to main content

Writes Operation

An image

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 ช่วยเขียนหรืออัปเดตหลายไอเทมพร้อมกัน เพิ่มประสิทธิภาพ