Đồng bộ dữ liệu giữa MongoDB với Elasticsearch bằng Transporter

Bài viết được sự cho phép của tác giả Trần Hữu Cương

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 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.

  Truy vấn dữ liệu MongoDB

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Đồng bộ dữ liệu giữa MongoDB với Elasticsearch bằng Transporter

Tham khảo việc làm MongoDB hấp dẫn trên TopDev

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'})

tạo dữ liệu trên database mongo tạo dữ liệu trên database mongo

B2: Tạo pipeline để chuyển dữ liệu từ MongoDB sang Elasticsearch bằng lệnh:

transporter init mongodb elasticsearch

Tạo pipeline để chuyển dữ liệu từ MongoDB sang 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'
  MongoDB là gì? Cơ sở dữ liệu phi quan hệ

B3: chạy file pipeline.js để chuyển dữ liệu từ mongodb sang elasticsearch

transporter run pipeline.js

Kết quả:chạy file pipeline.js để chuyển dữ liệu từ mongodb sang elasticsearch

Kiểm tra lại dữ liệu trên elasticsearch bằng lệnh:

curl $ELASTICSEARCH_URI/_search?pretty=true

Kiểm tra lại dữ liệu trên elasticsearch bằng lệnh:

Đó, tất cả dữ liệu trên database demo đã được chuyển sang elasticsearch.

Bài viết gốc được đăng tải tại stackjava.com

Có thể bạn quan tâm:

Xem thêm tuyển dụng nhân viên it hấp dẫn trên TopDev