Bài viết được sự cho phép của tác giả Trần Hữu Cương
Monstache là gì?
Monstache khá giống với Transporter tuy nhiên nó thực hiện đồng bộ dữ liệu một cách realtime, tức là khi có bất kỳ thay đổi dữ liệu nào trên MongoDB (thêm/sửa/xóa) nó sẽ tự động cập nhật tới Elasticsearch.
Việc sử dụng Monstache được áp dụng khi bạn muốn kết hợp MongoDB với Elasticsearch. Ví dụ bạn dùng MongoDB để lưu dữ liệu nhưng khi thực hiện query thì query trên Elasticsearch vì Elasticsearch hỗ trợ search tốt hơn MongDB ở nhiều trường hợp khác nhau.
Cài đặt Monstache
Yêu cầu đã cài đặt MongoDB và Elasticsearch. Vì Monstache được viết bằng ngôn ngữ lập trình Golang nên cần phải cài Golang nữa nhé.
Ở ví dụ này mình sẽ cài đặt trên Ubuntu 16.04 (Các bạn có thể cài trên windows cũng được nhé)
Lưu ý: phải bật chức năng oplog trên MongoDB lên, vì oplog sẽ chứa tất cả thông tin về các thay đổi của MongoDB và monstache sẽ dựa trên sự thay đổi đó để đồng bộ dữ liệu sang Elasticsearch, để bật chức năng oplog ta có 2 cách như sau:
- Cài đặt Replica Set (Xem lại: Cài đặt Replica Set trên MongoDB)
- Thêm tham số
--master
vào sau lệnhmongod
khi khởi động MongoDB
Bước 1: Download Monstache tại https://github.com/rwynn/monstache/releases
Trong ví dụ này mình download bản monstache-4.8.0.zip
Download file trên và giải nén về, bạn sẽ thấy nó có cả 3 mục cho windows, linux và macOS
Mình sử dụng trên ubuntu nên sẽ vào folder linux-adm64, các bạn sẽ thấy file monstache (monstache là file binary nha) và file conf.properties
dùng để cấu hình thông tin MongoDB và Elasticsearch, nếu chưa có file này thì bạn tự tạo mới nhé.
Thêm đường dẫn của thư mục chứa file monstache vào biến PATH
Ví dụ trong trường hợp của mình sẽ là:
- PATH=“$HOME/bin:$HOME/.local/bin:$HOME/monstache/build/linux-amd64:$PATH”
Sau khi thêm vào biến PATH
thành công chúng ta có thể chạy monstache với lệnh monstache
Ví dụ kiểm tra version monstache: bằng lệnh monstache -v
Tham khảo việc làm Java hấp dẫn trên TopDev
Cấu hình monstache bằng file conf.properties
Thông tin file conf.properties
có dạng như sau:
Trong đó:
mongo-url
là url tới database MongoDBelasticsearch-urls
là url tới các server elasticsearch mà bạn muốn đồng bộ với MongoDBdirect-read-namespaces
là các database, collection của MongoDB sẽ được đồng bộ hóa- Ngoài ra ở dưới còn các thông tin khác như username/password của Elasticsearch…
Demo
Ở đây mình sử dụng luôn MongoDB và Elasticsearch trên local với url lần lượt là:
mongo-url = "mongodb://localhost:27017" elasticsearch-urls = ["https://localhost:9200"] direct-read-namespaces = ["stackjava.player"]
Mình sẽ tiến hành đồng bộ dữ liệu từ collection player
của database stackjava
sang Elasticsearch
Khởi động elasticsearch bằng lệnh sudo service elasticsearch start
và chạy monstache bằng lệnh monstache
Nhớ giữ nguyên màn hình teminal chạy monstache nhé hoặc bạn cũng có thể tạo service để chạy ngầm monstache
Insert dữ liệu vào stackjava.player
- db.player.insert({‘name’:‘ronaldo’,‘country’:‘Portugal’})
Xem dữ liệu trên Elasticsearch:
- curl http://localhost:9200/stackjava.player/_search?pretty
Kết quả trên Elasticsearch sẽ có thêm bản ghi mà bạn vừa thêm ở MongoDB, tương tự bạn có thể thêm bản ghi mới, xóa hoặc chỉnh sửa bản ghi trên MongoDB nó cũng sẽ đều cập nhật luôn sang Elasticsearch.
Bài viết gốc được đăng tải tại stackjava.com
Có thể bạn quan tâm:
- Cách xây dựng ThreadLocal trong Java
- Lập trình game với Java cho người mới bắt đầu
- Các phần mềm giả lập Java dành cho máy tính tốt nhất
Tuyển dụng IT lương cao, đãi ngộ hấp dẫn. Ứng tuyển ngay!