[ElasticSearch] Nghệ thuật xử lý conflict

Đợt này cần làm nhiều tới Elastic Search nên tớ quyết định đọc sách để hiểu sâu hơn về cách ES hoạt động, các best practice cho ứng dụng.

Cuốn sách tớ đọc là “Elastic Search – The definitive guide”.

Quyển này viết ở thời điểm version ES khá cũ (1.4) trong khi hiện tại đã là version 7 rồi. Nhưng tớ vẫn đọc, vì thích sách của O’Reilly và cũng muốn hiểu hơn về ES thời cổ đại trông nó thế nào =))

Hôm nay đọc đến đoạn xử lý conflict, thấy khá hay nên note nhanh vài dòng.

Cái tiêu đề giật gân thế cho anh em tò mò thôi. Hihi

TL;DR

  • Có 2 cách xử lý conflict thường dùng:
    • Lock resource: VD lock row của table vào, không cho các cháu đọc ghi lộn xộn. Phải xếp hàng.
    • Optimist concurrency flow: hay còn gọi là sống chung với lũ: cung cấp cách phát hiện conflict.
  • Lock resource thì quá thường làm rồi. Ưu điểm là chuẩn chỉ, còn nhược điểm là hơi chậm tí, do phải xếp hàng.
The Risks of Mutexes - ModernesCpp.com
  • Sống chung với lũ: ES có cách xử lý khá hay
    • Các document được đánh 1 version cụ thể. Mỗi khi create/update/delete thì đều tăng version này lên.
    • Mỗi khi application gửi request update sẽ gửi kèm version hiện tại lên.
      • Nếu version update >= version trong db => ok
      • Nếu version update < version trong db => throw error cho application, để application tự handle
Elasticsearch Workshop - Speaker Deck

Cũng đơn giản nhỉ :))

Chắc tới tớ sẽ thử áp dụng vào relational database xem sao.

Cảm ơn bạn, vì đã đọc bài ^^

Bình luận về bài viết này