Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Elastcisearch :: การ sync ข้อมูลกับ RDBMS (Relational Database Management System)

$
0
0

คำถาม
ถ้าต้องเก็บข้อมูลสำหรับการค้นหาและวิเคราะห์ไว้ใน Elasticsearch
โดยข้อมูลต้นทางจะถูกเก็บไว้ใน RDBMS เช่น MySQL และ PostgreSQL เป็นต้น
ถ้ามีการแก้ไขข้อมูลที่ RDBMS แล้ว
จะทำการ sync หรือ update ข้อมูลใน Elasticsearch อย่างไรได้บ้าง ?

คำตอบ
ทำได้หลายวิธีแล้วแต่ความต้องการและความสามารถ
โดยวิธีการที่ผมใช้บ่อยที่สุดคือ การเขียน code เองนี่แหละ
เนื่องจากควบคุมได้ง่ายสุด ในมุมมองของผม
รวมทั้งมีความยืดหยุ่นอีกด้วย
เนื่องจากต้องทำการแปลงรูปแบบข้อมูลด้วยเสมอ
และจำเป็นต้องทำการตั้ง schedule สำหรับการทำงานอีกด้วย

แต่หลาย ๆ คนอาจะบอกว่า

มีวิธีที่ง่ายกว่านี้ไหม
ผมว่าวิธีการข้างต้นก็ง่ายแล้วนะ
สงสัยที่ง่าย เนื่องจากผมชอบเขียน code ได้มั้ง
หรือไม่อยากใช้เครื่องมืออื่น ๆ ให้วุ่นวาย
ดังนั้นมาลองวิธีอื่น ๆ บ้าง เช่น

โดยใน blog นี้จะใช้งาน Logstash + JDBC input plugin

แนวคิดการทำงานของ JDBC input plugin ก็ไม่ได้ยากอะไร คือ
จะทำการ poll ถาม RDBMS ตามช่วงเวลาที่เรากำหนด 
เช่น ทุก ๆ นาที เป็นต้น เหมือนกับการกำหนดใน crontab นั่นเอง

จากนั้นจะทำการตรวจสอบว่า มีการเพิ่มหรือเปลี่ยนแปลงข้อมูลใน RDBMS หรือไม่ ?
จะทำการตรวจสอบผ่าน column ชื่อว่า modification_time และ insertion_time
ว่ามีค่ามากกว่า เวลาที่ poll หรือดึงล่าสุดหรือไม่
โดยที่ค่าทั้งสอง column จะถูกเพิ่มเข้ามาในการ update และ insert นั่นเอง

การสร้างก็ง่าย ๆ เริ่มจากสร้าง database และ table ข้อมูลหลักก่อน

ซึ่งต้องเพิ่ม 2 colum ไปด้วยดังนี้

[gist id="c00f4059c58f4f3e67eb5c39c11d1aa2" file="1.sql"]

จากนั้นทำการสร้าง config สำหรับ logstash 

โดยกำหนด input คือ JDBC จาก database ที่สร้างไว้
ในตัวอย่างผมใช้ MySQL
และ output ให้แสดงออกที่ console และ Elasticsearch server นั่นเอง

[gist id="c00f4059c58f4f3e67eb5c39c11d1aa2" file="my_pipe.conf"]

เพียงเท่านี้ก็ใช้งานได้แล้วนะ

แต่สิ่งที่ผมไม่ค่อยชอบคือ
ไม่สามารถแก้ไขรูปแบบข้อมูลได้ ตามที่ต้องการมากนัก
ถ้าจะทำต้องมาเขียนในส่วนของ filter ที่ config ใน Logstash
แน่นอนว่า ซับซ้อนไปหน่อย
แต่ถ้าเราไม่คิดอะไรมาก วิธีการนี้ก็ชิว ๆ ครับ

ไว้ blog ต่อ ๆ ไป จะเอาตัวอย่างของ Kafka connect มาให้ดู


Viewing all articles
Browse latest Browse all 1997

Trending Articles