0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ผู้เขียน หัวข้อ: ทำความรู้จัก NoSQL คืออะไร  (อ่าน 1869 ครั้ง)

ออฟไลน์ teacher_a

  • Teacher
  • Sr. Member
  • *****
  • กระทู้: 348
  • ขอบคุณ: 15 ครั้ง
« เมื่อ: 06-01-14 21:06:04 »
ทำความรู้จัก NoSQL คืออะไร

    หลายคนคงพอจะเคยได้ยินกันมาบ้าง เกี่ยวกับเทคโนโลยีการจัดการข้อมูลแบบใหม่นี้ ซึ่งก็คือ NoSQL เมื่อพูดถึง NoSQL จะได้ยินชื่อเว็บไซด์ที่ใหญ่ๆ ติดพ่วงมาด้วย เช่น Facebook,Twitter, FourSquare, Digg และอื่นๆ  ทำให้เรารับรู้ว่า NoSQL เป็นระบบฐานข้อมูลสำหรับงานที่ต้องรองรับข้อมูลขนาดใหญ่ๆ รองรับการขยายระบบได้ง่าย เป็นต้น

    ซึ่งก็เป็นเช่นนั้นจริงๆ แต่งานที่เล็กๆ ล่ะจะทำอย่างไร ใช้งานได้ไหม คุ้มค่าที่จะนำ NoSQL มาใช้งานขนาดเล็กหรือเปล่า หรือใช้ Relational Database ก็เพียงพอแล้ว คำตอบคือ ขึ้นอยู่กับลักษณะในการนำมาใช้งาน ก่อนที่จะตอบคำถามว่า NoSQL เป็นคำตอบของระบบจัดเก็บข้อมูลของคุณหรือไม่ ลองพิจารณาหัวข้อต่างๆ ดังต่อไปนี้

 
1. ผู้ใช้งานมากขึ้นเรื่อยๆ (BigUsers)

    จะเห็นได้ว่าในช่วงเวลาที่ผ่านมานี้ และในปัจจุบ้น ผู้ที่ใช้งาน Internet มีแนวโน้มมากขึ้นเรื่อยๆ ไม่ว่าจะใช้งานผ่าน Desktop PC หรือ Smartphone ซึ่งเทคโนโลยีของอุปกรณ์ (Devices) มีหลายหลายมากขึ้น และใช้งานได้ง่ายขึ้น 

    การพัฒนาระบบให้สามารถรองรับปริมาณการเข้าใช้งานแต่ละอุปกรณ์ (Devices) เป็นสิ่งหนึ่งที่ต้องนำมาพิจารณา  และไม่เพียงแต่ต้องรองรับการเข้าใช้งานของผู้ใช้ได้เท่านั้น  เราต้องรองรับวิธีการป้อนข้อมูลแบบใหม่ คือ แต่ก่อนผู้จัดการเนื้อหาต่างๆ คือ Web Master, Web Editor, ผู้ดูแลระบบ เป็นต้น แต่ปัจจุบัน ผู้ที่ป้อนข้อมูลคือ ผู้ใช้บริการ (users) โดยตรง ผ่านอุปกรณ์ (Devices) ต่างๆที่มีหลากหลาย และการป้อนข้อมูลก็ง่ายกว่าแต่ก่อนมากด้วย

    และยังมีปัจจัยอื่นๆ เช่น เทศกาลสำคัญๆ ที่คนจะเข้ามาใช้งานมากเป็นพิเศษ หรือผู้ใช้งานที่ไม่ใช่แค่ประเทศเราเท่านั้น เพราะโลกอินเตอร์ถึงกัน อาจจะต้องดูว่าระบบเรามีผู้เข้าใช้งานจากต่างประเทศ หรือทั่วโลกหรือเปล่าอีกด้วย

    ดังนั้นเราต้องกลับมาทบทวนวิธีการจัดการฐานข้อมูลแล้วว่า  ไม่ใช่แค่ทำให้รองรับกับการเข้ามาใช้งานของผู้ใช้บริการเท่านั้น แต่ต้องรองรับการจัดเก็บข้อมูลที่มากขึ้นเรื่อยๆ ได้ด้วย

 

 
2. ประเภทของข้อมูลหลากหลายประเภท และข้อมูลที่ต้องการจัดเก็บมีมากขึ้นเรื่อยๆ (BigData)

    จากตัวแปรของผู้ใช้งานมีมากขึ้นเรื่อยๆ อุปกรณ์ในการเข้าใช้งานก็หลากหลาย ประเภทของข้อมูลที่ได้จากแต่ละอุปกรณ์ก็หลากหลายประเภท เช่น ข้อความ รูปภาพ เสียง วิดีโอ ตำแหน่งสถานที่ (GeoLocation) และอื่นๆ และการป้อนข้อมูลเหล่านี้ก็ง่ายแสนง่าย เพราะเทคโนโลยีของฮาร์ดแวร์และซอฟต์แวร์มีการพัฒนามากขึ้นเรื่อยๆ ใช้งานง่ายขึ้น สะดวกขึ้น รวดเร็วขึ้นเรื่อยๆ

    ดังนั้นการจัดเก็บข้อมูลที่หลั่งไหลเข้ามาจากอุปกรณ์ต่างๆเหล่านี้  เราอาจจะต้องนำมาทำการวิเคราะห์พฤติกรรมของผู้ใช้บริการ การส่งเสริมการตลาด ทำข้อมูลการตัดสินใจของผู้บริหาร ข้อมูลลูกค้าสัมพันธ์ และอื่นๆอีกมากมาย  การนำระบบฐานข้อมูลแบบเดิม (Relational Database) อาจจะไม่เหมาะกับลักษณะงานบางอย่างอีกต่อไป

 
3. เทคโนโลยีด้านฮาร์ดแวร์เปลี่ยนแปลงไป ราคาถูกลง แต่ประสิทธิภาพดีขึ้น (Cloud Computing)

    เราอาจจะเริ่มได้ยินคำว่า Cloud Technology  ซึ่งก็มีหลายประเภท แต่ในที่นี้ เราจะพูดถึงในแง่ของการนำมาใช้งาน  โดยปัจจุบันถ้าใครเคยได้ลองใช้งาน EC2 ของ Amazon มาบ้างแล้ว จะรู้จักเป็นอย่างดีว่า การจะมีเครื่อง Server แรงๆสักตัว เป็นเรื่องที่ง่ายมากๆ หรือ การจะมี Server สัก 10 ตัว หรือ 20 ตัว นำมาต่อเป็น Database Cluster นั้นง่ายมากๆ แค่คลิกสร้าง Instance ไม่กี่ครั้งก็ได้ Server มาใช้งานแล้ว และราคาก็ถูกมากๆ ถ้าเราไม่ใช้งานแล้ว ก็ยกเลิกการใช้งานและคืนกลับไปได้ทันที เมื่อเทียบกับสมัยก่อนที่เราต้องการมี Server สัก 10 เครื่อง จะต้องลงทุนซื้อเครื่องมาเยอะๆ ถ้าเลิกใช้งานแล้ว ต้องแบกรับภาระเครื่อง Server เหล่านี้ไว้ซึ่งเป็นต้นทุนที่แพงมากๆ

    จากที่กล่าวมาข้างต้น  เราไม่ได้แน่นข้อดีของ EC2 แต่อย่างใด แต่กำลังจะเน้นว่า ภาพรวมของการใช้งาน Server เริ่มเปลี่ยนไป คือ ใช้งานได้ง่ายขึ้น ราคาถูกลง แต่ประสิทธิภาพดีขึ้น ซึ่งเป็นสิ่งที่สำคัญในการนำมาพิจารณาของเทคโนโลยีด้านฐานข้อมูลคือ ถ้าต้องการจัดเก็บฐานข้อมูลใหญ่ๆ หรือรองรับผู้ใช้งานได้เป็นจำนวนมากๆ การขยายระบบฐานข้อมูลเป็นเรื่องที่ง่ายขึ้น ซึ่งทำได้โดยการเอา Server มาต่อๆๆๆ กันออกไป หรือเรียกว่าการขยายออกแนวราบ (Scale Out) ไม่ใช่การขยายระบบเหมือนแต่ก่อน คือขยายออกแนวตั้ง (Scale Up) และต้องใช้เครื่อง Server ที่มีประสิทธิภาพสูงๆ ซึ่งจะมีต้นทุนที่แพงกว่าการขยายแบบแนวราบ มากๆ

    ดังนั้นการขยายระบบที่อยู่บนพื้นฐานของ NoSQL คือรองรับการขยายระบบแบบแนวราบ (Scale Out) ซึ่งจะกระจายข้อมูลไปเก็บที่เครื่อง Server หลายๆตัว และใช้เครื่อง Server ทั่วๆไปที่เรียกว่า (Commodity Server) ไม่จำเป็นต้องใช้ Server ที่เรียกว่า Enterprise Server ที่มีราคาแพงตาม Spec ที่สูงขึ้นเรื่อยๆ และการบริหารจัดการก็ยากขึ้นอีกด้วย

ปัญหาของ Relational Database

    ถ้าใครที่ใช้งาน Relation Database ที่ต้องการรองรับการจัดเก็บข้อมูลขนาดใหญ่ๆ คงหนีไม่พ้นเรื่องการทำ Sharding และ Distributed Cache เพราะเป็นตัวหลักที่ต้องทำ เพื่อขยายระบบฐานข้อมูลของ Relational Database ให้สามารถรองรับข้อมูลที่มากขึ้น และรองรับจำนวนการเข้ามาใช้งานระบบได้มากขึ้น

Manual Sharding

    การแบ่งตารางฐานข้อมูล (Table) ออกเป็นส่วนๆ แล้วทำการกระจายไปจัดเก็บในหลายๆ Server  เพื่อให้แต่ละตาราง (Table) ของฐานข้อมูลไม่จัดเก็บข้อมูลที่เยอะเกินไป เพราะถ้าข้อมูลในแต่ละฐานข้อมูลเยอะเกินไป จะทำให้ระบบฐานข้อมูลช้าไปด้วย แต่ปัญหาก็จะตามมาอีกคือ เมื่อต้องกระจายข้อมูลออกไปในแต่ละ Server การจะจัดการกับข้อมูล เช่น เพิ่ม แก้ไข ลบ ดึงข้อมูลมาแสดงต่างๆ จะต้องทำผ่าน Application หรือไม่อย่างนั้น ก็ต้องมี Server บางตัวที่คอยดึงข้อมูลแต่ละ Server มารวมเป็นก้อนเดียว นั้นหมายความว่า เราต้องทำด้วยตัวเราเอง ไม่ใช่ระบบฐานข้อมูลจัดการให้ (Manual Sharding)

Distributed Cache

    เมื่อเราต้องการให้ระบบรองรับการเข้ามาใช้งานมากๆได้นั้น ถ้าจะต้องวิ่งเข้ามาอ่านข้อมูลผ่าน Database โดยตรงคงรองรับไม่ไหว หรือทำได้ช้า ดังนั้นจะต้องมีการทำ Cache Layer ขึ้นมา คือแทนที่จะเข้าไปอ่านจากฐานข้อมูลโดยตรง ก็ให้อ่านผ่าน Cache ก่อน ดังนั้นการอ่านข้อมูลจาก Cache เป็นการอ่านจาก Memory โดยตรง ทำให้รองรับปริมาณการเข้ามาใช้งานได้มากขึ้น

    แต่ปัญหาคือ การทำ Cache Layer นี้ รองรับเฉพาะการอ่านข้อมูลเท่านั้น ไม่รองรับการเขียนข้อมูลได้ ถ้าต้องการรองรับการเขียนข้อมูลปริมาณมากๆ และอ่านข้อมูลปริมาณมากๆ จึงเป็นสิ่งที่ Relational Database ไม่สามารถรองรับงานในลักษณะ อ่าน-เขียน ข้อมูลปริมาณมากๆ ได้ดีนัก และประการสำคัญ การทำ Cache Layer จะต้องมีการดูแลรักษา และใช้ Server แยกออกไปต่างหากอีกด้วย

    จากจุดนี้เอง ทั้งการทำ Sharding และ Caching เป็นสิ่งที่ถูกพัฒนาขึ้นใน NoSQL เทคโนโลยี  โดยรองรับ Auto-Sharding และ Integrated Caching ในตัวเอง ดังนั้นเราจึงได้เห็น NoSQL ถูกนำไปใช้งานกับระบบใหญ่ๆ เช่น Facebook,Twitter, FourSquare, Digg และอื่นๆ เพราะ NoSQL ออกแบบมาเพื่อรองรับความต้องการงานใหญ่ๆได้ดีโดยเฉพาะอยู่แล้ว แต่ถึงอย่างนั้นก็ตามยังมีคุณสมบัติอื่นๆ ที่น่าสนใจใน NoSQL เทคโนโลยี
 

คุณสมบัติของ NoSQL Database

Dynamic Schemas

    การจัดเก็บข้อมูลต่างๆ ในฐานข้อมูลแบบ Relational Database เราจะต้องมีการสร้าง Schema หรือรูปแบบของโครงสร้างตาราง ว่าจะจัดเก็บข้อมูลอะไรบ้าง เมื่อต้องการจัดเก็บข้อมูลเพิ่มเติมต้องเปลี่ยน Schema ภายหลัง (Alter-Table) ก่อนจะจัดเก็บข้อมูลรูปแบบใหม่ได้

    แต่ในปัจจุบัน การจัดเก็บข้อมูลมีการเปลี่ยนแปลงตลอดเวลา เพราะความต้องการจัดเก็บข้อมูลต่างๆ มีหลากหลายมากขึ้นเรื่อยๆ การต้องกำหนดโครงสร้างของตารางฐานข้อมูลเป็นอย่างไร เป็นเรื่องไม่ง่ายนัก หรือการต้องเปลี่ยนโครงสร้างฐานข้อมูลบ่อยๆ โดยที่ข้อมูลยังมีอยู่แล้ว เป็นเรื่องที่ยากมากหรือทำไม่ได้เลย วิธีการคืออาจต้องแยกออกเป็นตารางใหม่ ซึ่งเป็นวิธีแก้ปัญหาชั่วคราวเท่านั้น

    ระบบฐานข้อมูลแบบ NoSQL  เราไม่จำเป็นต้องมี Schema ที่ตายตัว หรือไม่ต้องมี Schema ก่อนที่จะจัดเก็บข้อมูล ข้อมูลแต่ละแถว สามารถจัดเก็บได้ตามต้องการ จะเพิ่มหรือลด ก็ไม่มีปัญหากับระบบ  ทำให้เราสามารถจัดเก็บข้อมูลได้ตามที่ต้องการ เปลี่ยนแปลงได้ตลอดเวลา สะดวกรวดเร็วมากๆ

Auto-Sharding

    เมื่อข้อมูลมีขนาดใหญ่ หรือเราต้องการเพิ่มประสิทธิภาพการ อ่าน-เขียนข้อมูลปริมาณมากๆ การทำ Sharding ในระบบ NoSQL Database จะทำการกระจายข้อมูลไปยัง Server ต่างๆอัตโนมัติ (Auto-Sharding) ผู้พัฒนา (Developer) ไม่ต้องเขียนโปรแกรมในการกระจายข้อมูลเอง เหมือน Relational Database
    การกระจายข้อมูลออกไปหลายๆ Server นี้ยังทำให้มีข้อดีคือ ประหยัดต้นทุนในการขยายระบบ เพราะเป็นการขยายแบบแนวราบ (Scale Out) ซึ่งสามารถนำ Server ปกติทั่วไปมาใช้งานได้ ไม่จำเป็นต้องเป็น Enterprise Server

Replication

    การสำเนาข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง (Replication) เมื่อ Server หนึ่งเสียหาย อีกเครื่องหนึ่งจะขึ้นมาทำงานแทนทันที โดยข้อมูลของแต่ละเครื่องจะมีข้อมูลเหมือนกัน ดังนั้น Replication เป็นหนึ่งคุณสมบัติที่ตอบสนองต่อการใช้งานที่ต้องการความต่อเนื่องได้ตลอดเวลา (High Availability)

Integrated Caching

    การจัดเก็บข้อมูลที่ใช้งานบ่อยๆ เข้าไว้ใน Memory (RAM) ซึ่งเป็นคุณสมบัติเด่นของ NoSQL ที่รวม Caching ไว้ในตัวเองอยู่แล้ว เราไม่จำเป็นต้องทำ Cache Layer เหมือน Relational Database อีกต่อไป ที่ต้องทำ Cache Layer แยกต่างหากและต้องดูแลรักษาแยกออกไปต่างหากอีกด้วย 


ประเภทของฐานข้อมูล NoSQL

    NoSQL ถูกแบ่งประเภทตามลักษณะการจัดเก็บข้อมูลที่แตกต่างกัน ดังนั้นการจะเลือก NoSQL Database สักตัวหนึ่ง จะต้องดูด้วยว่า การจัดเก็บข้อมูลของฐานข้อมูลเป็นอย่างไร เช่น

- Document databases เช่น MongoDB, CouchDB, Elasticsearch

- Graph stores เช่น Neo4J, Infinite Graph, InfoGrid

- Key-value stores เช่น DynamoDB, Redis, MemcacheDB

- Wide-column stores เช่น Cassandra, Amazon SimpleDB, Hadoop / HBase


Open source License

    โดยส่วนใหญ่แล้ว NoSQL จะเป็นลิขสิทธิ์แบบ Open source ซึ่งไม่ต้องเสียค่าใช้จ่ายในการนำมาใช้งาน ดังนั้นเราสามารถนำ NoSQL Database แต่ละตัวมาติดตั้งใช้งานได้โดยไม่เสียค่าใช้จ่ายใดๆ (ฟรี)

 
นำ NoSQL มาใช้งานขนาดเล็กได้หรือไม่

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

    คำตอบคือ ขึ้นอยู่กับลักษณะงานว่า เราจะใช้คุณสมบัติอะไรของ NoSQL ถ้าเราต้องการจัดเก็บข้อมูลที่ไม่ต้องยึดติดกับโครงสร้าง (Dynamic Schema) และต้องการเข้าใช้งานระบบที่รวดเร็ว (Integrated Caching) ข้อมูลอาจจะยังไม่เยอะเท่าไหร่ คุณอาจจะใช้ NoSQL ได้อย่างแน่นอน

    แต่ถ้าคุณไม่ต้องการใช้งาน (Dynamic Schema) ไม่ต้องการเข้าใช้งานที่รวดเร็ว (Integrated Caching) เพราะใช้ Relational Database ก็ทำได้ดีอยู่แล้ว Database Server กับ Web Server ก็อยู่ที่ Server เดียวกัน ข้อมูลไม่มากนั้น ไม่ต้องการจัดเก็บข้อมูลที่เพิ่มขยายขึ้นทุกวันๆ ผู้เข้าใช้งานก็ไม่ได้มาก ดูแล้วว่าระบบคุณไม่มีแนวโน้มจะต้องขยายระบบในอนาคตอันใกล้ คุณสามารถใช้งาน Relational Database ได้ดีอยู่แล้ว อย่างไม่มีปัญหา

 
ศึกษาข้อมูลเพิ่มเติมได้ที่

http://www.couchbase.com/why-nosql/nosql-database
http://www.10gen.com/nosql
https://en.wikipedia.org/wiki/NoSQL
https://en.wikipedia.org/wiki/CAP_theorem
http://nosql-database.org/
http://www.thaimongo.com/%E0%B8%9A%E0%B8%97%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1-mongodb/37-%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81-nosql-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3.html