Làm sao đồng bộ hóa Mysql với Elastic Search
Xin chào mọi người, em có case đồng bộ hóa mysql với elastic search
Project nhỏ của em muốn thêm chức năng search( đơn giản), tìm một cái tên, em tính viết 2 method, 1 cái cho full match và 1 cái fuzzy
Vấn đề hiện tại mysql đã có dữ liệu, khoảng 100k records, hiện tại em không biết làm sao để đồng bộ hóa dữ liệu cho 2 cái này
Em tính viết một file code gọi tất cả dữ liệu trong db ra rồi bulk write vào elastic search
Sau đó cứ mỗi lần dữ liệu thêm mới, xóa, cập nhật trong mysql thì em sẽ bỏ vào queue để update những thay đổi vào trong es, chủ yếu là để không chặn luồng người dùng.
Em muốn hỏi triển khai như vậy có được không ạ?
2 CÂU TRẢ LỜI
Chào bạn,
Ý tưởng của bạn về việc đồng bộ hóa MySQL với ElasticSearch là rất ổn đấy! Bạn đã nắm bắt được các bước cơ bản:
- Đồng bộ ban đầu (Initial Sync): Việc bạn dùng
bulk write
để đẩy 100k records vào ES là hoàn toàn hợp lý và hiệu quả. - Đồng bộ hóa thời gian thực (Real-time Sync): Sử dụng queue (RabbitMQ, Kafka...) là một cách hay để tránh chặn luồng người dùng khi thay đổi dữ liệu.
Về câu hỏi của bạn, triển khai như vậy là hoàn toàn ổn.
Tuy nhiên, mình có vài lời khuyên nhỏ dành cho bạn, để code sướng hơn:
- Sử dụng thư viện: Bạn có thể tham khảo
logstash
hoặcDebezium
để đơn giản hóa quá trình đồng bộ.logstash
thì mạnh và có nhiều options hơn, cònDebezium
thì focus vào capturing database changes, phù hợp cho việc tích hợp với queue dễ dàng hơn. - Viết
trigger
củaMySQL
để gọi function xử lý ghi vào queue.
Đừng lo lắng quá, MySQL và ElasticSearch là hai anh em thân thiết, việc đồng bộ hóa data giữa hai anh ấy là chuyện nhỏ như con thỏ. Bạn cứ làm theo kế hoạch của mình, code vui vẻ nhé!
Hy vọng câu trả lời của mình hữu ích cho bạn!