ข้ามไปที่เนื้อหาหลัก

NoSQL คืออะไร

จริง ๆ แล้ว NoSQL ไม่ใช่ เทคโนโลยีใหม่อะไร เพียงแต่ชาวโลกหลงทางไปกับแนวคิดของ RDBMS (relational database) และเพิ่งจะมารู้ตัวกันเมื่อ RDBMS ไม่สามารถรองรับความต้องการได้ จึงเกิดการหาทางเลือก แล้วก็ได้ NoSQL ชนิดต่าง ๆ ออกมาให้พวกเราหลุดพ้นจาก RDBMS กัน
NoSQL เป็น data store ที่เน้นความง่าย ไม่ซับซ้อน เน้นเก็บข้อมูลให้เร็ว ดึงข้อมูลออกมาได้เร็ว เป็นหลัก ส่วนที่เหลือก็แล้วแต่ว่าแต่ละตัวจะเพิ่มความสามารถอะไรเข้าไป ส่วนคำสั่งในการเรียก ก็เป็นของใครของมัน ต่างจาก RDBMS ที่ใช้ SQL ในการสั่งงาน คำสั่ง SQL มีข้อดีก็คือเป็นมาตรฐานทุกคนรู้จักเรียนรู้ทีเดียวใช้ database ได้ทุกตัว แต่ข้อเสียก็คือมันต้องแปลความหมายก่อน server ถึงจะเริ่มทำตามคำสั่งได้ และคำสั่งในมาตรฐานกลับกลายเป็นกรอบที่จำกัดไม่ให้ database server มี function การทำงานพิเศษอื่น ๆ ได้

ข้อจำกัดอะไรที่ RDBMS รองรับไม่ได้

RDBMS มีข้อจำกัดอยู่ที่หัวใจหลักของมันเอง นั่นก็คือ relation มันรู้จักความสัมพันธ์ของข้อมูล แล้วเราก็เรียนจากโรงเรียนมาเหมือน ๆ กันว่าให้ทำ normalize โครงสร้างข้อมูลให้ได้ 3rd normal form แทบทุกคำสั่งเราต้องเชื่อมโยงข้อมูลจากหลาย ๆ table เข้าด้วยกัน เราเข้าใจว่าเป็นเรื่องที่ แต่จริง ๆ แล้วกลับกลายเป็นข้อจำกัดไปซะงั้น
เปรียบเที่ยบให้เห็นภาพ RDBMS ก็เหมือนกับเรามีเมียแต่ง เมียก็เป็นข้อมูลที่ไม่สามารถแยกบ้านกันนอนได้ ประมาณว่า “รวมกันเราอยู่ แยกกูมึงตาย” พอออกลูกออกหลาน ก็ยังอยู่บ้านเดียวกัน พอพื้นที่ในบ้านไม่พอ ก็ต้องขยายบ้าน ให้ใหญ่ขึ้น ใหญ่ขึ้น จนถึงระดับนึงก็จะขยายต่อไปไม่ได้ เพราะข้อจำกัด เช่นเพิ่มจำนวนชั้นสูงไปกว่านี้ไม่ได้แล้ว
ส่วน NoSQL เหมือนกับเรามีเมียเก็บ ไม่จำเป็นต้องมีคนเดียวด้วย มีมันพร้อม ๆ กัน หลายคนเลย กระจายกันอยู่ตามบ้านหลายหลัง เวลาผ่านไปออกลูกออกหลาน ก็ให้มันไปหาที่อยู่ใหม่กันเอง ไม่ต้องขยายบ้าน และไม่มีข้อจำกัดเรื่องขนาดบ้าน
เรื่องนี้สอนให้รู้ว่า ถ้าเราไม่มีความสัมพันธ์ลึกซึ้งจะขยายพันธ์ได้มากกว่า 5555+
กลับมาที่ RDBMS กับ NoSQL RDBMS เพิ่มความสามารถทั้ง ความจุ ความเร็ว โดยการขยายเครื่อง ซึ่งมีข้อจำกัดว่าขยายได้ระดับนึง แล้วจะตัน
ส่วน NoSQL เพิ่มโดยการเพิ่มจำนวนเครื่อง ช่วยให้เพิ่มได้ไม่จำกัด และแต่ละเครื่องยังไม่จำเป็นต้องอยู่ใน data center เดียวกัน ด้วยซ้ำ สามารถกระจายไปอยู่ตามที่ ต่าง ๆ เพื่อลดความเสี่ยงที่ข้อมูลจะเสียหายได้ด้วย

NoSQL = Not Only SQL

สาวกของ NoSQL บางคนบอกว่า NoSQL ไม่ใช่ No SQL แต่เป็น Not Only SQL เพราะมันทำอะไรได้มากกว่า ตามด้านล่างนี้ครับ
  1. Scale แน่นอนเขียนไว้ตั้งแต่ด้านบนละ
  2.  Flexible data model NoSQL ไม่จำเป็นต้องเก็บข้อมูลเป็น table ทำให้การออกแบบไม่จำกัด สามารถสร้างโครงสร้างข้อมูลที่ซักซ้อน อย่าง social network ได้ แต่ก็เป็นดาบสองคม ที่ออกแบบ data model ดี ก็ได้ประโยชน์เต็มที่ ออกแบบไม่ดี ก็กระทบกับระบบรุนแรงเช่นกัน ทั้งด้านความเร็วและการต่อยอดเพิ่มขยาย
  3. Fast เร็ว แรง ทั้ง ๆ ที่การเก็บข้อมูลก็ไม่ได้แตกต่างจาก RDBMS คือใช้ index ธรรมดา ๆ เหมือนกันเช่นพวก B-Tree หรือ LSMT (log structure merged tree) ยกตัวอย่างการอ่าน ข้อมูลใบสั่งซื้อสินค้า ที่มีรายการซื้อ 10 รายการ ใน RDBMS เราต้องเก็บ ตัวใบสั่งซื้อ ไว้ใน table นึง แล้วเก็บรายการ อีก 10 รายการ ไว้ใน อีก table การอ่านต้องอ่าน ทั้งหมด 11 ครั้งแล้วประกอบร่างไปใบสั่งซื้อใบเดียว แตกต่างจาก NoSQL ที่เราเก็บข้อมูลทั้ง 11 ตัวยัดเข้าไปในข้อมูลชุดเดียว เวลาอ่านก็ทำทีเดียวเสร็จ คิดง่าย ๆ ก็เร็วกว่า 11 เท่าตัวเข้าไปแล้ว
  4. Choice ตัวเลือกให้เลือกเยอะ มาก ๆ ให้เหมาะกับความต้องการใช้งาน บางทีใน project นึงเราอาจใช้ NoSQL 2 ตัวในงาน 2 งานก็ยังได้
  5. Open ส่วนใหญ่ NoSQL database ทำออกมาแบบ open source นั่นหมายความว่า ใช้ฟรีครับผม
ใช้ว่าจะมีแต่ข้อดีกว่าเสมอไปยังไง RDBMS ก็มีข้อดีกว่าอยู่อย่างนึง คือ ความสามารถในการทำ transaction ซึ่ง NoSQL ส่วนใหญ่ยังรองรับ หรือไม่ก็ยังไม่เก่ง

NoSQL มีกี่แบบ

NoSQL มีตัวเลือกเยอะมาก ออกจะเยอะเกินไปด้วยซ้ำ แต่จำแนกได้ 4 พวกหลัก ๆ ตามนี้
  1. Key value store
    เป็นชนิดที่เร็วที่สุด เพราะมันมี function การทำงานตรงไปตรงมาที่สุด คือ เก็บข้อมูลโดยการ ระบุ key และ value ดึงข้อมูลโดยการ ระบุ key แล้ว database จะค้น value กลับมาให้
    database ชนิดนี้ เหมาะกับการเก็บข้อมูลที่ไม่ซับซ้อน และต้องการความเร็วสูง เช่นการเก็บข้อมูล session ของ web app
  2. Document database
    พัฒนาเพิ่มจาก key value store คือสามารถเข้าใจข้อมูลที่เก็บ ทำให้สามารถเพิ่ม index เพื่อค้นหาจากตัวข้อมูล แตกต่างจาก key value ที่ต้องค้นจาก key เท่านั้น
    เหมาะกับการเก็บข้อมูลทั่ว ๆ ไปไม่ได้เก่งไปทางใดทางหนึ่งอย่างเห็นได้ชัด
  3. Big table
    นอกจากจะเก็บข้อมูลโดยการเพิ่ม record แล้วยังเพิ่ม column ได้อีกด้วย แนวคิดตั้งต้นมาจาก google ในหัวข้อ “sparse, distributed, persistent multidimensional map” เหมาะกับระบบที่ต้องการ distribute และ scale ใหญ่ มาก ๆ
  4. Graph database
    ตัวนี้แปลกแยกจาก 3 ตัวด้านบน เป็นชนิดเดียวที่ รู้จักความสัมพันธ์ และซับซ้อนเกินกว่าที่ relational database จะรองรับได้ด้วยซ้ำ เช่น เก็บข้อมูล social network ว่าใครเป็น friend ใคร การค้นหาก็สามารถระบุได้ว่า ต้องการ เพื่อนของเพื่อนของเพื่อน พอ เพื่อนต่อจากนั้นไม่ต้องค้นมาให้ ก็ได้

NoSQL จะมาแทน RDBMS ไหม ?

ตอบได้เลยว่าไม่ แต่เรากำลังถึงยุคที่ต้องเลือก เลือกว่าจะใช้ database แบบไหน มี 4 ตัวในพวก NoSQL และ อีกตัวที่เป็น relational database เพราะแต่ละตัวก็มีข้อดีข้อเสียต่างกันไป เหมาะกับงานต่างกันไป ยกตัวอย่าง ถ้าต้องการทำ web ซื้อขายของ ที่ต้องการ function ในการทำ transaction ถ้าสะดุดให้ roll back กลับได้ ก็ยังควรเลือกใช้เป็น relational database แต่อย่างไรก็ตามในส่วนการเก็บ web session ถ้าจะใช้ relational database ก็ไม่เหมาะอย่างยิ่ง ควรจะไปใช้ key value store ที่เร็วกว่ามาก สรุปก็คือใช้มัน 2 ตัวใน project เดียวกันเลย
อีกตัวอย่าง เช่น ต้องการทำ web content management ธรรมดาก็เก็บใน document database และถ้าต้องการวิเคราะห์การใช้งานด้วยว่าหน้าไหนคนเข้าเยอะ หรือหน้าไหนคนอยู่นาน แบบ real time ชนิดตามติดกันวินาทีต่อวินาที ก็ยิงข้อมูลการเข้าใช้งานของ user ไปเก็บใน big table database จะเห็นได้ว่าใช้ database engine 2 ตัวอีกแล้ว
**โดยสรุปแล้ว NoSQL ไม่ใช่ตัวที่จะมาแทน RDBMS แต่จะเป็นทางเลือก และเราไม่จำเป็นต้องเลือกตัวเดียวครับพี่น้องครับ

ความคิดเห็น

  1. Harrah's Kansas City Hotel & Casino - MJ Hub
    This 대전광역 출장마사지 Reno 아산 출장안마 resort hotel features 하남 출장샵 comfortable rooms, five full floors and 태백 출장안마 a 밀양 출장마사지 casino with three full floors of luxury suites. Casino guests enjoy an expansive

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ดาต้าเซ็นเตอร์แนวคิดใหม่

ดาต้าเซ็นเตอร์ใหม่ ใช้แนวคิดล่าสุดในการทำความเย็นให้เครื่อง servers แทนที่จะทำความเย็นทั้งห้อง เป็นการใช้ไฟฟ้าอย่างคุ้มค่า และมีความมั่นคงระดับ tier 3+ ระบบทั้งหมดยกขึ้นมาอยู่เหนือ rack ให้เห็นกันชัดๆ แทนที่จะซ่อนไว้ใต้พื้น ดูแลรักษาง่าย balance phases ไฟฟ้าสะดวก ปรับควบคุม air flow ได้ตามสั่ง ระบบ monitoring สมบูรณ์แบบ ทั้งไฟฟ้า อุณหภูมิ ความชื้น มาพร้อมระบบดับเพลิงที่ปลอดภัยไม่เป็นพิษกับคนและสิ่งแวดล้อม 

ตามหาของหาย โปรแกรม tetris 3 คน

ตามหาของหาย โปรแกรม tetris 3 คน เล่นบนเครื่องเดียว ที่เขียนตอนสมัยเรียน ผมทำหายไปนานแล้วทั้ง source code และ exe file แต่ทราบว่ารุ่นน้อง ๆ ยังเล่นต่อกันอีกหลายปี ใครมี file อยู่รบกวนขอด้วยครับ จะจัดฉลองใหญ่สมนาคุณ โปรแกรมนี้ดูเหมือนเป็นเกมส์ธรรมดา แต่สำหรับเครื่องในสมัยนั้น รัน os เป็น dos แต่ต้องรัน tetris สามเกมส์ในเครื่องเดียวกันแถมยัง มี background music และ sound effect ออกลำโพง digital ต้องใช้เทคนิค event driven กันเลยทีเดียว ไม่น่าเชื่อว่าเทคนิคโบราณจะกลับตอบโจทย์ concurrency สำหรับ server โปรแกรม หลายตัว เช่น nginx หรือ app ที่พัฒนาด้วย nodejs

Push หรือ pull สำหรับ mobile application

ช่วงนี้เห็นมี mobile application ใหม่ ๆ เกิดขึ้น และมีความต้องการการทำงานแบบ real-time ขึ้นเช่นการ update transaction บนหน้าจอ app ทันที ที่ transaction สำเร็จ model ที่ใช้กันมี 3 แบบหลัก ๆ ตามในรูป จากประสประสบการณ์ผม push-pull เป็นแบบที่เหมาะสมกับงานแบบนี้ที่สุด  แบบ polling ช้าและเกิดภาระที่ server สูง ส่วน push ต้องจัดการกับความไม่เสถียรของ mobile network ซึ่งถ้าไม่ได้ออกแบบรอบรับไว้ตั้งแต่ต้นรับรองว่างานหยาบ