DB เริ่มโตขึ้นทุกวัน วางแผนไงดี

เรื่องมีอยู่ว่าผมพัฒนาโปรเจคช่วงเวลาว่างเล็กๆ รันแบบ 24x7x365 เพื่อไปเก็บข้อมูล เพื่อทำ BigData ไว้ใช้งานในอนาคต ซึ่งข้อมูลบนโลกอินเตอร์มีเยอะมาก ซึ่งทุกอย่างที่เป็น Public และภาษาไทย ผมดูดทุกอย่างมาเก็บทำเป็น Data Directory ขนาดใหญ่ โดยมีข้อมูลเพิ่มขึ้นประมาณ 1GB ต่อวัน อันนี้ไม่รวมรูปภาพนะ ภาพประมาณวันละ 20GB การใช้ MySQL หรือระบบจัดการฐานข้อมูลแบบ relational (RDBMS) สำหรับข้อมูลขนาดนี้ไม่เหมาะสม แนะนำให้ใช้ MySQL/RDBMS เพื่อเก็บผลลัพธ์จากการประมวลผลข้อมูลเท่านั้น โดยเฉพาะการแสดงผลบนเว็บไซต์ และจะแก้ไขให้ลองรับระยะยาวยังไง มาดูกัน


เน้นการเก็บข้อมูลในหลายรูปแบบ, โดยเฉพาะไฟล์ log แบบ plain text ซึ่งมีความสำคัญมาก ผู้เขียนยังได้ชี้ให้เห็นความสำคัญของการใช้ unix command line tools เช่น grep และ find สำหรับการค้นหาข้อมูลอย่างรวดเร็ว


เพื่อรองรับการขยายตัว (scale out) ของข้อมูล, ผู้เขียนได้ใช้ Elasticsearch, ซึ่งทำงานบน Apache Lucene, เป็นเครื่องมือหลัก โดยออกแบบมาเพื่อรองรับการขยายตัวได้ดีกว่ามาก สถาปัตยกรรมที่แนะนำคือการใช้ multi-tier database โดยมีการใช้ Redis สำหรับการจัดการ raw data, Elasticsearch และไฟล์ log แบบ plain text สำหรับการประมวลผล, และ MySQL สำหรับเก็บผลลัพธ์ที่จะแสดงบนเว็บไซต์ สรุปว่ามีการใช้ฐานข้อมูลหลักทั้งหมด 3 ระบบคือ Redis, Elasticsearch, และ MySQL โดยไม่นับรวม Memcache และยังใช้การเก็บ log ในรูปแบบ plain text เพื่อการกรองข้อมูลแบบเร่งด่วน


สรุปคือ

multi tier database (raw data ==> redis == map ==> elasticsearch + plain text log == reduce ==> mysql)

0
70