Avatar
1
Thanh Tran Beginner
Thanh Tran Beginner
process elasticsearch sync data với mysql như thế nào?
Các bạn cho mình hỏi là process elasticsearch sync data với mysql như thế nào?

1, Khi insert/update/delete 1 bản ghi vào table ở mysql thì elasticsearch sẽ đồng bộ dữ liệu lên như thế nào? Các bước đồng bộ?

2, Sẽ đồng bộ lại toàn bộ dữ liệu của table hay chỉ đồng bộ bản ghi  bản ghi đang thao tác.

3, Nếu chỉ đồng bộ bản ghi đang thao tác thì nếu insert ES sẽ add index cho bản ghi , update thì sẽ giữ nguyên index có đúng không?

  • Answer
elasticsearch
Remain: 5
2 Answers
Avatar
monkey Beginner
monkey Beginner
  1. Luôn phải có 1 trường nào đó để nhận diện được dữ liệu thay đổi, thường là trường updated_at thì mới detect được việc update, còn nếu chỉ qua id tăng dần thì sẽ chỉ nhận biết được có dữ liệu thêm mới. Delete bản ghi mà xoá hẳn, không phải kiểu update cờ là deleted thì cũng sẽ không nhận biết được dữ liệu cần xoá đi khỏi ES. Các bước bao gồm:

while(true) {
  1. lấy ra 1 danh sách bản ghi mới nhất theo updated_at
  if (không có dữ liệu nào) {
    Thread.sleep(3);
    continue;
  }
  2. Đưa dữ liệu vào elasticsearch
  3. Lưu lại updated_at mới nhất.
}

  1. Sẽ chỉ đồng bộ lại các dữ liệu thay đổi, vì nếu cứ update liên tục vào ES thì khả năng sẽ rất tốn ổ cứng và dữ liệu mới sẽ bị cập nhận chậm.

  1. Lần cuối mình làm việc với ES thì là đúng, khi index dữ liệu với cùng id, nó sẽ trả ở response 1 trường báo là update
  • 1
  • Reply
thanks b nhé  –  Thanh Tran 1673555294000
Avatar
  • Bác Thanh Trần có thể tham khảo cách bật binlog của mysql và dùng 1 tool bên ngoài (debezium, go canal) đọc binlog của mysql để bắn message lên kafka và đồng bộ lên ES nhé.
  • Trong 1 message này có đầy đủ thông tin để xử lý bài toán của bác.
  • Nguồn tham khảo:
  • https://debezium.io
  • https://kafka.apache.org
  • https://github.com/alibaba/canal
  • 0
  • Reply