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

สรุปโครงสร้างข้อมูลของ NoSQL Database

$
0
0

nosql-type

nosql-type วันนี้ได้เริ่มอ่านหนังสือ Introducing to Data Science มีหนึ่งบททำการอธิบายเกี่ยวกับโครงสร้างข้อมูลของ NoSQL Database ไว้ได้อย่างน่าสนใจ และ เข้าใจง่าย จึงนำมาแปลไว้อ่านนิดหน่อยดังนี้

โครงสร้างข้อมูลของ NoSQL Database 4 ชนิด ประกอบไปด้วย

  1. Column-Oriented
  2. Key-value
  3. Document
  4. Graph
โดยแต่ละชนิดถูกคิดและสร้างขึ้นมาเพื่อแก้ไขปัญหาที่แตกต่างกันไป ซึ่งปัญหาเหล่านั้นไม่สามารถแก้ไขด้วยการใช้งาน RDBMS นั่นเอง และพบว่า NoSQL หนึ่ง ๆ มักจะมีรูปแบบการจัดเก็บข้อมูลที่หลากหลาย หรือเรียกว่า Multi-model database ตัวอย่างที่เห็นได้ชัดคือ OrientDB ซึ่งมันคือ Graph database โดยที่แต่ละ node มันมีรูปแบบเป็น Document

แต่ก่อนที่จะไปดูโครงสร้างข้อมูลทั้ง 4 ของ NoSQL

เราต้องมาดู RDBMS หรือ Relational Database ก่อนว่ามันเป็นอย่างไร ? เพื่อจะได้เห็นข้อแตกต่างได้ชัดเจนยิ่งขึ้น เราปฏิเสธไม่ได้ว่า RDBMS นั้นได้รับความนิยมอย่างสูง สามารถรองรับความต้องการต่าง ๆ ได้อย่างมากมาย คำหนึ่งที่เรามักจะได้ยินบ่อย ๆ ในออกแบบโครงสร้างข้อมูลบน RDBMS คือ การ Normalization คือ เป็นวิธีการลดความซ้ำซ้อนของข้อมูลนั้นเอง มีโครงสร้างข้อมูลที่อยู่รูปแบบของตาราง และแต่ละตารางก็จะมีความสัมพันธ์กัน เช่น
  • One-to-one
  • One-to-many
  • Many-to-many
เมื่อระบบมีขนาดใหญ่ขึ้น จำนวนตารางก็เยอะขึ้น รวมทั้งความสัมพันธ์ต่าง ๆ ก็มากขึ้นเช่นกัน แสดงความสัมพันธ์แบบ Many-to-many ระหว่าง Person และ Hobby ดังรูป 1334442-introducingdatascience1 มาดูว่าโครงสร้างข้อมูลของ NoSQL Database แต่ละชนิดเป็นอย่างไร

1. Column-Oriented Database

ถ้าเปรียบเทียบกับ RDBMS จะเห็นว่ามันเป็น Row-based oriented นั่นคือแต่ละ row ของข้อมูลประกอบไปด้วย ID ที่เป็น primary key และ field หรือ column ต่าง ๆ โดยแต่ละ row จะถูกจัดเก็บในตาราง ดังนั้นในการดึงข้อมูลจากตารางจะเป็นแบบ อ่านจากบนลงล่าง และ ซ้ายไปขวา โดยข้อมูลแต่ละ row จะถูก load ไปยัง memory ซึ่งมันทำให้เสียเวลา และ ใช้ memory อย่างมากมาก แสดงดังรูป 1378393-introducingdatascience3 ดังนั้น เพื่อเพิ่มความเร็วในการเข้าถึงข้อมูล เราจึงทำการสร้าง index ให้ตาม column ที่เราต้องการ แต่มันเป็นการเพิ่ม overhead ให้แก่ระบบ ลองคิดดูว่า ถ้าเราทำการ index ทุก ๆ column ล่ะ !! ดังนั้น Column-Oriented Database จึงสร้างมาเพื่อช่วยแก้ไขปัญหาเหล่านี้ โดยแต่ละ column จะถูกจัดเก็บแยกกัน ทำให้การเข้าถึงข้อมูลในแต่ละ column เร็วขึ้น รวมทั้งทำให้ง่ายต่อการบีบอัดข้อมูลอีกด้วย เนื่องจากในแต่ละตารางจัดเก็บข้อมูลเพียงชนิดเดียว แสดงดังรูป 1378395-introducingdatascience4 ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Column-Oriented เช่น
  • Apache HBase
  • Cassandra
  • Hypertable
  • Google BigTable

2. Key-Value Database

เป็นโครงสร้างข้อมูลที่เรียบง่าย และ ไม่ซับซ้อนที่สุดแล้ว จากความเรียบง่ายนี่เอง ทำให้ Key-Value มันสามารถรองรับการใช้งานจำนวนมากได้ สามารถรองรับข้อมูลจำนวนมากได้อย่างสบาย ๆ แสดงโครงสร้างดังรูป 1378402-introducingdatascience5 ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Key-Value เช่น
  • Memcached
  • Redis
  • Riak
  • Voldemort Amazon Dynamo

3. Document Database

เป็นโครงสร้างที่ซับซ้อนมาอีกหนึ่งชั้นจาก Key-Value database ทำการเก็บข้อมูลในรูปแบบของเอกสาร แน่นอนว่า ในแต่ละเอกสารต้องมีโครงสร้างข้อมูลเช่นกัน เรามักจะเรียกว่า Schema โดยโครงสร้างแบบนี้จะถูกนำไปใช้อย่างมาก เนื่องจากข้อมูลส่วนใหญ่จะอยู่ในรูปแบบของเอกสารอยู่แล้ว หรือถ้าเทียบกับ RDBMS เราอาจจะบอกว่าได้ มันคือข้อมูลที่ถูกทำการ Nomalization เพียงเล็กน้อย หรือบางคนบอกว่ามันคือ การ Denomalization นั่นเอง ทำให้ NoSQL ชนิดนี้เกิดมาเพื่อแก้ไขบางอย่าง ที่ RDBMS ไม่ตอบโจทย์นั่นเอง ลองคิดดูสิว่า ถ้าข้อมูลของเราเป็นหนังสืมพิมพ์ หรือ นิตยสาร เมื่อนำมาจัดเก็บใน RDBMS แล้ว พบว่า ต้องทำการแยกข้อมูลไปจัดเก็บในแต่ละตาราง !! ทั้ง ๆ ที่เราสามารถบันทึกข้อมูลในรูปแบบของเอกสารเพียงเอกสารเดียวได้ มันน่าจะช่วยลดงานต่าง ๆ ลงไปได้เยอะนะ ว่าไหม ? แสดงดังรูป 1378404-introducingdatascience7 ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Document เช่น
  • MongoDB
  • CouchDB

4. Graph Database

เป็นโครงสร้างข้อมูลที่มีความซับซ้อนสูงที่สุด เนื่องจากใช้จัดเก็บข้อมูลที่มีความสัมพันธ์ระหว่างกัน โดยมักจะใช้งานในเรื่องของ
  • Social Networking
  • Scientific paper citation
  • Capital asset cluster
  • Direction in map
โครงสร้งข้อมูลแบบ Graph จะประกอบไปด้วย
  • Node คือ ข้อมูลหรือ entity หนึ่ง ๆ ตัวอย่างเช่นใน Social Network คือ ผู้ใช้งาน
  • Edge เป็นความสัมพันธ์ระหว่าง entity ซึ่งแสดงอยู๋ในรูปแบบเส้น และ มีคุณบัติต่าง ๆ อยู่ด้วย รวมทั้งยังมีทิศทาง หรือ direction อีกด้วย
แสดงดังรูป 1378416-introducingdatascience8 ตัวอย่าง product ที่มีโครงสร้างข้อมูลเป็น Graph เช่น
  • Neo4j
  • OrientDB

Viewing all articles
Browse latest Browse all 1997

Trending Articles