ว่าด้วยเรื่องของ “NoSQL”

Phayao Boonon
2 min readSep 23, 2018

--

อะไรคือ NoSQL

ถ้าจะกล่าวถึง NoSQL ก็จะอ้างอิงตามตัวว่ามันเป็นฐานข้อมูลที่ไม่ขึ้นอยู่กับ SQL (Structure Query Language) ซึ่งเป็นภาษาที่ส่วนใหญ่ใช้ในการติดต่อกับฐานข้อมูล เชิงสัมพันธ์ (Relational Database) โดยเฉพาะอย่างยิ่งข้อมูลของ NoSQL จะไม่เป็น relational นั้นคือฐานข้อมูล NoSQL โดยทั้วไปจะไม่มี schema และจะมาพร้อมกับรูปแบบมีความสม่ำเสมอต่ำ (looser consistency) กว่าฐานข้อมูลแบบ relational

โดยคำว่า “NoSQL” ทำให้เห็นความจริงที่ว่าฐานข้อมูล relational แบบเดิมไม่สามารถปรับเข้าใช้ได้กับทุกการแก้ไขปัญหา โดยเฉพาะอย่างยิ่งการทำงานเกี่ยวข้องกับข้อมูลที่มีจำนวนมากมายมหาศาล แต่ด้วยคำศัพย์อาจจะมีความหายได้ว่าเป็น “Not only SQL” แสดงให้เห็นว่ารองรับสำหรับการเชื่อมต่อกับ SQL-base ถ้าส่วนหลักของฐานข้อมูลไม่มีความสัมพันธ์กัน นักพัฒนาซอฟต์แวร์ที่ใช้งาน NoSQL ไม่จำเป็นลืมฐานข้อมูล relational ไปเลย แต่จะเห็นคุณค่าในการใช้งานฐานข้อมูลที่ถูกต้องสำหรับงาน

การใช้งาน NoSQL

NoSQL จัดเก็บข้อมูลโดยอิงกับ key ของข้อมูลที่จำเป็น ซึ่งฐานข้อมูล relational ไม่รองรับ ดังนี้

Caching solutions

การ caching เป็นวิธีการแก้ปัญหาทั่วไปสำหรับการปรับปรุงการ response ของแอพพลิเคชัน ตัวอย่างเช่น เว็บไซต์อาจจะ response ที่เหมือนกันให้กับ User ที่แตกต่างกันจำนวนมาก แทนที่จะรับ request แล้วประมวลผลด้วยฐานข้อมูล relational ในสิ่งเดิมตลอดเพื่อ response กลับไปหา User, การทำ caching เองสามารถทำได้เพื่อแก้ปัญหานี้ แต่ฐานข้อมูล NoSQL สามารถเก็บข้อมูล caching เพื่อแก้ปัญหาแบบนี้ได้ โดยที่ developer ไม่ต้องจัดการกับการทำ caching ด้วยตัวเอง

Key-Value stores

บางฐานข้อมูล NoSQL เก็บข้อมูลในแบบคู่ key-value ที่ทำให้สามารถ lookup ข้อมูลได้อย่างรวดเร็ว ในกรณีของการเข้าถึง คำถาม/คำตอบ ฐานข้อมูล Relational จะมีการเก็บข้อมูลที่ซับซ้อนและมีหลายความสัมพันธ์ระหว่างชนิดของข้อมูล วิธีการนี้จะซับซ้อนกว่าเมื่อ developer ต้องการ implement การเก็บและเข้าถึงข้อมูลอย่างรวดเร็ว

Document Stores

ชนิดของข้อมูลบางแบบจะมีลักษณะของ document oriented และมีความหลากหลาย ตัวอย่างเช่น ฟอร์มของข้อมูลที่สามารถมีหลายฟิวด์ ซึ่งฐานข้อมูลแบบ Relational ต้องการ schema ที่กำหนดชนิดของข้อมูลของแต่ละฟิวด์ที่ชัดเจนและเข้มงวดของแต่ละแถวของการเก็บข้อมูล แต่ฐานข้อมูล NoSQL แบบ document จะเก็บข้อมูลได้อย่างยืดหยุ่นและมีประสิทธิภาพในการจัดการกับข้อมูลประเถทนี้

Faster access to bigger set of data

ฐานข้อมูลแบบ relational จะสูญเสียประสิทธิภาพของระบบไปเมื่อต้องการค้นหาในข้อมูลที่มีจำนวนมาก ในอดีต developer จะต้องสร้างระบบซึ่งเขียน SQL query ที่หาบางแถวของข้อมูลที่เกี่ยวข้องมาเป็น data set ด้วยวิธีที่มีประสิทธิภาพมากที่สุด แต่ใน result set ขนาดใหญ่จะใช้ทรัพยากรของระบบอย่างมาก จำนวนข้อมูลขนาดใหญ่หรือ queries ที่เกี่ยวข้องกับการรวบรวมจำนวนของข้อมูลเป็น “data warehousing”

การเก็บข้อมูลของ NoSQL ถูกใช้งานอย่างแพร่หลายและถูกทดสอบในหลากหลายสถานการณ์ ในสถานการณ์เหล่านี้เกี่ยวข้องกับจำนวนขนาดใหญ่ของข้อมูลที่มีอัตราการเพิ่มจำนวนขึ้นของข้อมูลในหลายระบบของลูกค้า

Less rigid consistency requirements

NoSQL ถูกพิจารณาใช้เป็นทางเลือกแทนที่ฐานข้อมูลแบบ relational เพราะว่ามีความต้องการบางอย่างที่สอดคล้องกันที่สืบทอดส่วนของฐานข้อมูล relational ที่แตกต่างอย่างมากใน modern enterprise

Developer จะค้นพบว่าความต้องการของข้อมูลที่แน่นอนไม่ต้องการความเข้มงวดอย่างเช่นฐานข้อมูลแบบ relational ที่มาพร้อมกับประสิทธิภาพที่ลดลงเสมอ แทนที่พวกเขาต้องการใช้ eventual consistency ที่มีแนวโน้มว่าจะมีประสิทธิภาพที่ดีกว่า การเก็บข้อมูล NoSQL บางชนิดจะทำให้ developer สามารถเลือกความสอดคล้องที่เข้มงวดหรือไม่ได้

ข้อจำกัดของ NoSQL

SQL มีประสิทธิภาพสูง เป็นมาตรฐานมากว่า 40 ปี ที่เป็นไปได้เพราว่าฐานข้อมูลสัมพันธ์ทั้งหมดมีแนวคิดเดียวกันสำหรับการเก็บข้อมูลในตารางและขอมูลที่เกี่ยวข้องผ่าน foreign key แม้ว่าการเปลี่ยนจากฐานข้อมูล relational หนึ่งไปแบบอีกแบบหนึ่ง ไม่ได้ราบรื่นแบบ 100% มันก็ง่ายมากกว่าการเปลี่ยนชนิดของการเก็บข้อมูลของฐานข้อมูล NoSQL ซึ่ง developer มีมีความรู้ SQL จะต้องเจอความท้าทายนิดหน่อยในการเปลี่ยนฐานข้อมูล NoSQL

เพราะว่าแต่ละฐานข้อมูล NoSQL มีรูปแบบการเก็บข้อมูลที่เฉพาะทั้งข้อมูลเก็บอย่างไรและความแตกต่างบิตของข้อมูลเกี่ยวข้องกันอย่างไร และไม่มีมาตรฐาน API ที่จัดการ เมื่อย้ายไปเก็บข้อมูล NoSQL ใหม่แล้ว developer จะต้องใช้เวลาและแรงในการเรียนรู้ภาษา query ใหม่รวมทั้ง consistency semantics

ตัวอย่างฐานข้อมูล NoSQL

มีฐานข้อมูล NoSQL จำนวนมากที่สามารถใช้งานได้ และด้านล่างเป็นเจ้านิยมใช้

  • MongoDB — Open source ฐานข้อมูลแบบ document
  • CouchDB — ฐานข้อมูลที่ใช้ JSON สำหรับ document, JavaScript สำหรับ MapReduce query และ HTTP สำหรับ API
  • GemFire — Platform จัดการข้อมูลแบบกระจายที่สามารถขยายได้ มีประสิทธิภาพสูง และเป็นฐานข้อมูลแบบ persistence
  • Redis — โครงสร้างข้อมูลเซอเวอร์ที่ key สามารถเป็น string, hashes, lists, sets และ sorted set.
  • Cassandra — ฐานข้อมูลที่สามารถขยายได้และประสิทธิภาพสูงโดยปราศจากความกังวลเรื่องประสิทธิภาพ
  • Memcached — Open source ประสิทธิภาพสูง, distributed-memory และ ระบบ object-caching
  • Hazelcast — Open source platform ที่สามารถขยายข้อมูลแบบกระจายได้
  • HBase —ฐานข้อมูล Hadoop ที่สามารถกระจายและขยายได้สำหรับฐานข้อมูลขนาดใหญ่
  • Mnesia — ระบบจัดการฐานข้อมูลแบบกระจายที่มีคุณสมบัติ soft real-time
  • Neo4J — Open source ประสิทธิถาพสูง ฐานข้อมูลกราฟเกรดองค์กร

แปลมาจาก

--

--

Phayao Boonon

Software Engineer 👨🏻‍💻 Stay Hungry Stay Foolish