Đồng bộ dữ liệu giữa MongoDB với Elasticsearch bằng Transporter
Trong bài này mình sẽ làm ví dụ chuyển data từ MongoDB sang Elasticsearch bằng Transport.
1. Transporter là gì? Cài đặt transporter trên ubuntu.
Transporter là một phần mềm mã nguồn mở để di chuyển / đồng bộ dữ liệu dữ liệu trên các kho dữ liệu khác nhau.
Các kho dữ liệu được đồng bộ ở đây có thể là database, files…
Dữ liệu được đọc từ kho dữ liệu nguồn (source) sau đó được chỉnh sửa, tách lọc… (transformer) rồi chuyển tới kho dữ liệu đích (sink) thông qua pipeline do bạn định nghĩa.
Cài đặt transport trên ubuntu
Download transporter:
wget https://github.com/compose/transporter/releases/download/v0.5.2/transporter-0.5.2-linux-amd64
(Download các phiên bản khác tại đây)
Chuyển các file vừa tải về vào folder /usr/local/bin/transporter
hoặc folder nào đó bạn thích.
sudo mv transporter-*-linux-amd64 /usr/local/bin/transporter
Run transporter
chmod +x /usr/local/bin/transporter
Kiểm tra transport sau khi cài đặt bằng lệnh transporter
2. Chuyển dữ liệu từ MongoDB sang Elasticsearch
(Xem lại: Hướng dẫn cài đặt MongoDB)
(Xem lại: Hướng dẫn cài đặt Elasticsearch)
Trong ví dụ này mình sẽ chuyển dữ liệu trong database demo
sang elasticsearch.
B1: Tạo dữ liệu cho database demo
:
db.player.insert({'name':'ronaldo','position':'striker'}) db.player.insert({'name':'buffon','position':'goalkeeper'})
B2: Tạo pipeline để chuyển dữ liệu từ MongoDB sang Elasticsearch bằng lệnh:
transporter init mongodb elasticsearch
Kết quả là file pipeline.js
được tạo ra, file này sẽ chứa các thông tin nguồn, đích của dữ liệu:
var source = mongodb({ "uri": "${MONGODB_URI}" // "timeout": "30s", // "tail": false, // "ssl": false, // "cacerts": ["/path/to/cert.pem"], // "wc": 1, // "fsync": false, // "bulk": false, // "collection_filters": "{}", // "read_preference": "Primary" }) var sink = elasticsearch({ "uri": "${ELASTICSEARCH_URI}" // "timeout": "10s", // defaults to 30s // "aws_access_key": "ABCDEF", // used for signing requests to AWS Elasticsearch service // "aws_access_secret": "ABCDEF" // used for signing requests to AWS Elasticsearch service // "parent_id": "elastic_parent" // defaults to "elastic_parent" parent identifier for Elasticsearch }) t.Source("source", source, "/.*/").Save("sink", sink, "/.*/")
Các bạn có thể tạo biến môi trường MONGODB_URI
và ELASTICSEARCH_URI
tương ứng hoặc có thể sửa trực tiếp vào file pipeline.js.
Ở đây mình tạo biến môi trường:
MONGODB_URI
sẽ là uri tới database demo
trên mongodb
export MONGODB_URI='mongodb://localhost/demo'
ELASTICSEARCH_URI
sẽ là uri đích để chứa dữ liệu trên elasticsearch:
export ELASTICSEARCH_URI='http://localhost:9200/demo'
B3: chạy file pipeline.js để chuyển dữ liệu từ mongodb sang elasticsearch
transporter run pipeline.js
Kết quả:
Kiểm tra lại dữ liệu trên elasticsearch bằng lệnh:
curl $ELASTICSEARCH_URI/_search?pretty=true
Đó, tất cả dữ liệu trên database demo đã được chuyển sang elasticsearch.
Okay, Done!
References: