วันนี้ได้เริ่มอ่านหนังสือ Introducing to Data Science
มีหนึ่งบททำการอธิบายเกี่ยวกับโครงสร้างข้อมูลของ NoSQL Database
ไว้ได้อย่างน่าสนใจ และ เข้าใจง่าย
จึงนำมาแปลไว้อ่านนิดหน่อยดังนี้
โครงสร้างข้อมูลของ NoSQL Database 4 ชนิด ประกอบไปด้วย
- Column-Oriented
- Key-value
- Document
- Graph
แต่ก่อนที่จะไปดูโครงสร้างข้อมูลทั้ง 4 ของ NoSQL
เราต้องมาดู RDBMS หรือ Relational Database ก่อนว่ามันเป็นอย่างไร ? เพื่อจะได้เห็นข้อแตกต่างได้ชัดเจนยิ่งขึ้น เราปฏิเสธไม่ได้ว่า RDBMS นั้นได้รับความนิยมอย่างสูง สามารถรองรับความต้องการต่าง ๆ ได้อย่างมากมาย คำหนึ่งที่เรามักจะได้ยินบ่อย ๆ ในออกแบบโครงสร้างข้อมูลบน RDBMS คือ การ Normalization คือ เป็นวิธีการลดความซ้ำซ้อนของข้อมูลนั้นเอง มีโครงสร้างข้อมูลที่อยู่รูปแบบของตาราง และแต่ละตารางก็จะมีความสัมพันธ์กัน เช่น- One-to-one
- One-to-many
- Many-to-many
1. Column-Oriented Database
ถ้าเปรียบเทียบกับ RDBMS จะเห็นว่ามันเป็น Row-based oriented นั่นคือแต่ละ row ของข้อมูลประกอบไปด้วย ID ที่เป็น primary key และ field หรือ column ต่าง ๆ โดยแต่ละ row จะถูกจัดเก็บในตาราง ดังนั้นในการดึงข้อมูลจากตารางจะเป็นแบบ อ่านจากบนลงล่าง และ ซ้ายไปขวา โดยข้อมูลแต่ละ row จะถูก load ไปยัง memory ซึ่งมันทำให้เสียเวลา และ ใช้ memory อย่างมากมาก แสดงดังรูป ดังนั้น เพื่อเพิ่มความเร็วในการเข้าถึงข้อมูล เราจึงทำการสร้าง index ให้ตาม column ที่เราต้องการ แต่มันเป็นการเพิ่ม overhead ให้แก่ระบบ ลองคิดดูว่า ถ้าเราทำการ index ทุก ๆ column ล่ะ !! ดังนั้น Column-Oriented Database จึงสร้างมาเพื่อช่วยแก้ไขปัญหาเหล่านี้ โดยแต่ละ column จะถูกจัดเก็บแยกกัน ทำให้การเข้าถึงข้อมูลในแต่ละ column เร็วขึ้น รวมทั้งทำให้ง่ายต่อการบีบอัดข้อมูลอีกด้วย เนื่องจากในแต่ละตารางจัดเก็บข้อมูลเพียงชนิดเดียว แสดงดังรูป ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Column-Oriented เช่น- Apache HBase
- Cassandra
- Hypertable
- Google BigTable
2. Key-Value Database
เป็นโครงสร้างข้อมูลที่เรียบง่าย และ ไม่ซับซ้อนที่สุดแล้ว จากความเรียบง่ายนี่เอง ทำให้ Key-Value มันสามารถรองรับการใช้งานจำนวนมากได้ สามารถรองรับข้อมูลจำนวนมากได้อย่างสบาย ๆ แสดงโครงสร้างดังรูป ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Key-Value เช่น- Memcached
- Redis
- Riak
- Voldemort Amazon Dynamo
3. Document Database
เป็นโครงสร้างที่ซับซ้อนมาอีกหนึ่งชั้นจาก Key-Value database ทำการเก็บข้อมูลในรูปแบบของเอกสาร แน่นอนว่า ในแต่ละเอกสารต้องมีโครงสร้างข้อมูลเช่นกัน เรามักจะเรียกว่า Schema โดยโครงสร้างแบบนี้จะถูกนำไปใช้อย่างมาก เนื่องจากข้อมูลส่วนใหญ่จะอยู่ในรูปแบบของเอกสารอยู่แล้ว หรือถ้าเทียบกับ RDBMS เราอาจจะบอกว่าได้ มันคือข้อมูลที่ถูกทำการ Nomalization เพียงเล็กน้อย หรือบางคนบอกว่ามันคือ การ Denomalization นั่นเอง ทำให้ NoSQL ชนิดนี้เกิดมาเพื่อแก้ไขบางอย่าง ที่ RDBMS ไม่ตอบโจทย์นั่นเอง ลองคิดดูสิว่า ถ้าข้อมูลของเราเป็นหนังสืมพิมพ์ หรือ นิตยสาร เมื่อนำมาจัดเก็บใน RDBMS แล้ว พบว่า ต้องทำการแยกข้อมูลไปจัดเก็บในแต่ละตาราง !! ทั้ง ๆ ที่เราสามารถบันทึกข้อมูลในรูปแบบของเอกสารเพียงเอกสารเดียวได้ มันน่าจะช่วยลดงานต่าง ๆ ลงไปได้เยอะนะ ว่าไหม ? แสดงดังรูป ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Document เช่น- MongoDB
- CouchDB
4. Graph Database
เป็นโครงสร้างข้อมูลที่มีความซับซ้อนสูงที่สุด เนื่องจากใช้จัดเก็บข้อมูลที่มีความสัมพันธ์ระหว่างกัน โดยมักจะใช้งานในเรื่องของ- Social Networking
- Scientific paper citation
- Capital asset cluster
- Direction in map
- Node คือ ข้อมูลหรือ entity หนึ่ง ๆ ตัวอย่างเช่นใน Social Network คือ ผู้ใช้งาน
- Edge เป็นความสัมพันธ์ระหว่าง entity ซึ่งแสดงอยู๋ในรูปแบบเส้น และ มีคุณบัติต่าง ๆ อยู่ด้วย รวมทั้งยังมีทิศทาง หรือ direction อีกด้วย
- Neo4j
- OrientDB