Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

เชื่อมต่อ Elasticsearch Search และ Visualization กับ SQL Database ได้อย่างราบรื่น

แม้ Buzz จะโฟกัสที่ NoSQL Data Stores ใหม่ๆ แต่ Relational และ SQL-based Databases ยังคงมีชีวิตอยู่และแข็งแกร่ง จริงๆ แล้วเกือบทุก Customer ที่เราทำงานร่วมกัน มี MySQL, PostgreSQL หรือ MS SQL Server ใน Environment พร้อมกับ MongoDB, Redis หรือ Elasticsearch ไม่แปลกที่จะได้รับ Request เกี่ยวกับวิธี Replicate ข้อมูลจาก Relational Database ไป Datastore อื่น ไม่ว่าจะเป็น Migration หรือแค่เพิ่ม Feature เช่น Full-text Search หรือ Visualization ให้ Relational Data โชคดีที่ Elasticsearch ทำให้เรื่องนี้ง่ายมาก

เราเขียน White Paper แฟ้ม "Connecting Relational Databases to Elasticsearch" รายละเอียดกระบวนการและการตัดสินใจ แต่ถ้าอยากได้ Quick Introduction และ Overview อ่านต่อได้เลยด้านล่าง

เลือก Toolset ที่เหมาะสม

มี Migration/Replication Tools เยอะมากบนเว็บ แม้เขียน Code เองในสถานการณ์นี้ก็ไม่ยาก แต่เราพบว่า Logstash และ JDBC Input Plugin เป็น Best Solution

Logstash เป็น Swiss Army Knife สำหรับ Ingest, Transform และ Ship Data นอกจากนี้เป็นส่วนของ Elastic Stack ทำให้ Ship Data ไป Elasticsearch ง่ายที่สุด ส่วนการดึงข้อมูลจาก Relational Database?

Input หนึ่งของ Logstash คือ JDBC Input JDBC เป็น Standard กำหนดว่า Java Application เข้าถึง Database ยังไง ตราบใดที่มี JDBC-compliant Driver สำหรับ Database นั้น JDBC Logstash Input ก็ใช้ Driver นั้น Extract Data ด้วย Standard SQL Queries ได้ กับการรองรับ Free JDBC Drivers กว้างขวางใน Relational Databases และบาง Non-relational Databases ทำให้เชื่อม Database อื่นๆ กับ Elasticsearch ได้ง่าย

การเชื่อมต่อ (Making the Connection)

ตราบใดที่มี JDBC-compliant Database และ Driver ที่เข้ากันได้ Configuration ง่ายมาก แค่ Config Logstash ด้วยข้อมูลไม่กี่อย่าง:

  • JDBC Configuration Information
  • Credentials และ Connection Info ของ Relational Database
  • SQL Query หรือ Statement สำหรับ Extract ข้อมูลที่ต้องการ
  • Credentials และ Connection Info ของ Elasticsearch Database

ด้วยข้อมูลเหล่านี้ การ Shuffle Data เข้า Elasticsearch ง่ายมาก

ถามคำถามสำคัญ (Asking the Important Questions)

เรื่อง Replicate/Migrate Relational Data ไป Elasticsearch การย้าย Data จาก Point A ไป Point B แค่ครึ่งหนึ่ง คำถามใหญ่กว่าคือ จะ Model Data ใน Elasticsearch ยังไง ปัญหาของ Relational Data ใน Elasticsearch คือ Relations เอง

Elasticsearch เป็น Search Engine ก่อน แต่ Data Model คือ Document Store ที่รองรับ Relations ระหว่าง Document น้อยมาก ดังนั้นต้องตัดสินใจ Model Data ยังไง 3 ตัวเลือกมาตรฐาน:

  • Denormalize Data: ลบ Relations ทั้งหมด สร้าง Unique Document สำหรับทุก Combination ของ Data ใน Tables
  • Arrays within Documents: Elasticsearch รองรับ Array of Objects ใน Document และมี Special "nested" Data Type ให้ Query ประเมินแต่ละ Member ของ Array ว่าเป็น Document แยกต่างหากได้
  • Parent-Child Relationships: ตัวเลือกสุดท้าย ใกล้เคียง Relational DB จริงคือ Parent-Child Relationship ใน Elasticsearch ระบุว่า Document บางตัวเป็น Children ของ Document อื่น

Elasticsearch ให้ตัวเลือกจัดการ Data แต่มันขึ้นอยู่กับคุณว่าตัวไหนเหมาะสมและตอบโจทย์

อีก Key Decision คือ จะ Replicate Data มากแค่ไหน และบ่อยแค่ไหน หากเป็น Migration คำตอบง่าย เพราะ One-time Dump ทั้งหมด แต่ถ้าอยากใช้ Elasticsearch เป็น Secondary Reporting Datastore มีตัวเลือกเพิ่ม: Copy Full Snapshots ตาม Schedule หรือใช้ Logstash JDBC Input Filter Filter บน Column เฉพาะ ส่งเฉพาะ New Data เมื่อ Available อีกครั้งขึ้นกับ Data และ Use Case

การตัดสินใจและรายละเอียดเพิ่มเติม

Bottom Line: Tools และ Processes พร้อมใช้งานตอนนี้ จริงๆ แล้วง่ายมากที่จะ Put Into Practice กับ Data ของคุณ จะมี Trade-offs เกี่ยวกับ Data Modeling ใน Elasticsearch, Query และ Visualization ตัวอย่าง การ Denormalize Relational Data จะกระทบ Size ของ Resulting Dataset, Aggregation และ Visualizations ที่ใช้ได้

เพื่อ Illustrate กระบวนการและการตัดสินใจ เราเขียน White Paper: Connecting Relational Databases to Elasticsearch ระบุ Standard Process Setup Replication สำหรับ Sample Dataset, Impact ของ Modeling Decisions ต่อ Data, และ Guidelines เลือกว่าตัวไหน Best

หวังว่าจะมีประโยชน์! ติดต่อ sales@objectrocket.com เพื่อข้อมูลเพิ่มเติม