Tags:
Node Thumbnail

ข่าวเก่าไปอาทิตย์นึงนะครับ แต่ยังใช้ได้อยู่สำหรับผู้ที่สนใจเรื่อง NoSQL

อย่างที่รู้กันว่าช่วงหลายปีหลังนี้ กระแสการออกแบบซอฟต์แวร์โดยใช้แนวทาง NoSQL ซึ่งเป็นอีกทิศทางหนึ่งนอกเหนือไปจาก relational database เริ่มมาแรง เนื่องจากความต้องการประสิทธิภาพในเว็บแอพขนาดใหญ่มีมากขึ้น และ relational database ไม่สามารถตอบโจทย์ตรงนี้ได้ดีนัก

ตัวอย่างระบบฐานข้อมูลแบบ NoSQL ได้แก่ BigTable ของกูเกิล, SimpleDB ของ Amazon, Apache CouchDB, Apache Cassandra และ MongoDB พระเอกของข่าวนี้

MongoDB ถือเป็นฐานข้อมูลแบบ NoSQL อีกตัวที่กำลังมาแรง โครงการเริ่มพัฒนาในปี 2009 โดยบริษัทชื่อ 10gen ตัวซอฟต์แวร์เป็นโอเพนซอร์ส เขียนด้วย C++ แต่ก็รองรับภาษาโปรแกรมยอดนิยมเกือบทุกชนิด

ตัวอย่างบริษัทดังๆ ที่ใช้ MongoDB เก็บข้อมูลได้แก่ Foursquare, Intuit, Disney, Sourceforge (รายชื่อ) และมีเครื่องมือช่วยในการพัฒนา-ดูแลรักษาระบบอีกหลายตัว

ล่าสุด MongoDB เดินทางมาถึงรุ่น 2.0 หลังจากออกรุ่น 1.8 ไปเมื่อต้นปี ของใหม่ในรุ่นนี้มีหลายอย่าง เช่น

  • ปรับปรุงประสิทธิภาพของการทำ concurrency โดยเฉพาะการล็อคฐานข้อมูลเพื่อเขียน (write lock) ซึ่งถ้ามีปัญหาจะทำให้เกิดอาการ page fault จนกระทบต่อประสิทธิภาพส่วนอื่นๆ ในรุ่น 2.0 ปรับปรุงเรื่องนี้ไปหลายจุด แต่ทาง MongoDB ก็บอกว่ายังปรับปรุงได้อีกมากในอนาคต
  • ปรับปรุงการทำดัชนีตาราง (index) ให้ขนาดของดัชนีเล็กลงอีก 25% ช่วยให้เก็บดัชนีไว้ในแรมได้มากขึ้น (ประสิทธิภาพย่อมดีขึ้น) และการค้นหาดัชนีจะเร็วกว่าเดิม 25% ในกรณีทั่วๆ ไป (กรณีอัพเกรดจากรุ่นเก่าจะต้องทำดัชนีใหม่จึงจะได้ประสิทธิภาพที่ว่านี้)
  • ปรับปรุงการทำ replica หรือการสำรองข้อมูลข้ามเครื่อง โดยเราสามารถกำหนดความสำคัญของสำเนาแต่ละชุดได้ เพื่อให้จัดระเบียบสำเนาข้อมูลได้ง่ายขึ้น

รายละเอียดอื่นๆ ดูได้จาก Release Notes

ที่มา - MongoDB, The Register

Get latest news from Blognone

Comments

By: unchie
Windows Phone
on 18 September 2011 - 19:36 #334491

mongo , mango ,meego

ตาเริ่มลาย

By: thegodth
AndroidRed HatUbuntuWindows
on 18 September 2011 - 20:26 #334500

ผมพยายามจะศึกษาและพยายามลองใช้อะไรก็ได้ที่มันไม่ใช่ relational database และพยายามลองใช้ NoSQL แต่ก็ยังจับหลักการไม่ได้เลยสักที ประกอบกับ document ช่างน้อยนัก (ภาษาไทย) และดูเหมือนกับว่าคนไทย ไม่ค่อยสน NoSQL กันมากเท่าไหร่ ยังคงยึดติดอยู่กับ relational database หลายๆ ตัว ทั้งๆ ที่ผมลองเขียน flow ดูแล้ว หลายๆ ส่วนถ้ากรณีเป็น web application เลี่ยงไปใช้ NoSQL จะไว (โคตร) มาก

ใครมี site อะไรเป็นแนวทางแนะนำ รบกวนด้วยนะครับ ผมจะได้ไปศึกษาเพิ่ม

By: HyBRiD
ContributoriPhoneSymbianUbuntu
on 18 September 2011 - 22:11 #334520 Reply to:334500
HyBRiD's picture

อ่าน document จบก็ทำได้มากแล้วครับ

ถ้าติดตรงไหน ผมจะหาอ่านตาม stackoverflow ไม่ก็ blog หรือ google groups ต่างๆของคนทำเลย สิ่งที่เราสงสัยมักมีคนถามไว้แล้ว

document หรืออะไรที่เป็นภาษาไทยนี่ ... ถ้ารอมันมาก็คงช้าไปแล้วนะครับ ...

By: thegodth
AndroidRed HatUbuntuWindows
on 19 September 2011 - 00:29 #334549 Reply to:334520

แนะนำ site document หน่อยครับ :)

By: HyBRiD
ContributoriPhoneSymbianUbuntu
on 19 September 2011 - 01:25 #334563 Reply to:334549
HyBRiD's picture

ของเวบหลักก็โอเคแล้วครับ http://www.mongodb.org/display/DOCS/Developer+Zone

เห็นว่ามีหนังสือออกมาขายบ้างแล้ว น่าจะช่วยให้ศึกษาได้ง่ายขึ้นกว่า document ข้างบนครับ

อันนี้ google grooups ครับ http://groups.google.com/group/mongodb-user?pli=1

edit เพิ่ม:

อันนี้เป็น interactive สอนให้ลองใช้คำสั่งไปทีละขั้น ผมไม่เคยลอง แต่น่าจะช่วยให้เรียนรู้ได้ไวขึ้นครับ
http://www.mongly.com/

By: thegodth
AndroidRed HatUbuntuWindows
on 19 September 2011 - 22:39 #334809 Reply to:334549

ขอบคุณครับ

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

By: supatee
iPhoneWindows PhoneAndroidUbuntu
on 19 September 2011 - 00:01 #334545 Reply to:334500

ทำไมคนจะเปลี่ยนละครับ ถ้า RDBMS มันยังขายได้
ทุกวัันนี้ยังมีคนใช้ VB.6 Dev งานใหม่ขายอยู่เลย

By: Go-Kung
iPhoneWindows PhoneAndroidBlackberry
on 2 August 2013 - 10:03 #605307 Reply to:334545

มันก็มีบางมุมที่ RDBMS ไม่สามารถตอบสนองได้ดีนักครับ

อย่างเช่นงานที่เป็นแนว Social ทั้งหลายที่ request/transaction เข้ามาถี่มากๆ การ normalize table แล้วค่อย join กลับแบบที่ RDBMS ทำกันนั้นจะมี overhead เยอะและทำให้ประสิทธิภาพด้อยลงค่อนข้างมากครับ
รวมทั้งปัญหา transaction lock ไปมาก็จะเยอะขึ้นมากด้วย

แนวคิด NoSQL มาตอบโจทย์ในงานเหล่านี้ได้ดีกว่าครับ คือไม่ต้อง normalize อะไรมันเลย มีอะไรมาจับยัดลงไปอย่างนั้น แล้วก็ให้ id มันไป
เวลาดึงก็ดึงจาก id ไปทั้งก้อน ที่หน้าเพจอยากแสดงอะไรก็ไปตัดเอาเอง

มันไม่มีอะไรที่ fit กับทุกสถานการณ์น่ะครับ
งาน Enterprise, Commercial นี่ยังไง NoSQL ก็ไม่ใช่ตัวเลือกที่ดีแน่ๆเมื่อเทียบกับ RDBMS
ในขณะเดียวกัน งานเว็บแบบ Social ทั้งหลาย RDBMS ก็ไม่ใช่ตัวเลือกที่ดีที่สุด (ไม่ได้บอกว่าทำไม่ได้นะครับ ทำได้แต่ว่ามีตัวอื่นที่ตำได้ดีกว่า)

By: mk
FounderAndroid
on 19 September 2011 - 09:55 #334585 Reply to:334500
mk's picture

ถ้าจะเอาเฉพาะ "หลักการ" จริงๆ ผมแนะนำให้อ่านเปเปอร์ของกูเกิล ที่เป็นคนเริ่มต้นแนวคิดพวกนี้ (แต่ไม่ได้ปล่อยซอฟต์แวร์ออกมาให้คนนอกใช้)

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 19 September 2011 - 14:58 #334650 Reply to:334585
PaPaSEK's picture

ขอบคุณครับ คันมืออยากเล่น NoSQL จริงๆ

By: takz1977
iPhoneUbuntu
on 18 September 2011 - 21:05 #334508
takz1977's picture

กลุ่มในเฟซบุ๊คที่ผมติดตามอยู่ก็ NoSQL Community

หนังสือยังต้องแกะกับภาษาอังกฤษเหมือนกันครับแต่ขอแนะนำที่สั้นกระชับและเข้าใจง่ายที่สุดก็ เล่มนี้ครับ มีให้โหลดเป็น PDF ฟรีด้วยครับ

หนังสือนอกนั้นคงพอหากันได้อยู่แล้ว ถ้ารู้อยู่แล้วก็ขออภัยด้วยนะครับ : )

By: jonathanz on 18 September 2011 - 22:48 #334524

อยากลองใช้จริงๆจังๆเหมือนกัน แต่ติดตรงที่ไม่มี vps หรือ dedicated เลย
shared host ธรรมดาคงใช้ไม่ได้แน่

By: ComSci-MFU
Windows PhoneAndroidWindows
on 18 September 2011 - 23:42 #334541
ComSci-MFU's picture

ตัวโปรเจ็กท์ที่ทีมผมกำลังทำอยู่ก็ใช้ MongoDB ครับ มันสนุกดีเหมือนกัน :D

By: haina
Android
on 19 September 2011 - 01:45 #334567
haina's picture

mongodb ok เลยนะครับ แต่ตอนนี้กำลังจะหมดมุขทำ DBRef ของ Rails โดยใช้ dm-mongo-adapter T_T

By: nextman13
AndroidBlackberryUbuntuWindows
on 19 September 2011 - 09:39 #334580

บอกตรงๆ ว่าไม่เคยใช้เลย

By: toooooooon
iPhoneWindows PhoneAndroidBlackberry
on 19 September 2011 - 09:55 #334586

วิชา ดาต้าเบส ของ ป ตรี จะต้องปรับเปลี่ยนไหมหนอ...

By: Go-Kung
iPhoneWindows PhoneAndroidBlackberry
on 19 September 2011 - 14:24 #334646 Reply to:334586

ไม่ถึงขนาดนั้นหรอกครับ

ยังไง Concept ต่างๆก็ยังอิงมาจาก Relational Database อยู่ดี

รวมทั้งตลาด Enterprise ก็ยังใช้ Relational กันแทบจะทั้งหมดครับ ต่างกับตลาดกลุ่ม Social Web ที่จะเห็นของใหม่ๆเยอะกว่า

By: khajochi
WriteriPhoneIn Love
on 19 September 2011 - 11:40 #334605
By: tekkasit
ContributorAndroidWindowsIn Love
on 19 September 2011 - 15:47 #334666
tekkasit's picture

โดยทั่วไปแล้ว RDBMS ออกแบบในแนวคิดแบบ centralize ซึ่งโมเดลมันง่าย ทุกอย่างมัน serializable ทั้งระบบ ง่ายในการตรวจสอบและการเข้าใจ เพราะการเปลี่ยนแปลงทั้งหมด เกิดขึ้นในจุดศูนย์กลางเพียงจุดเดียว ทุกอย่าง track ได้เป็นเชิงเส้นทั้งหมด

แต่ในระบบที่ใหญ่ รองรับผู้ใช้งานจำนวนมาก ต้องการ concurrency/parallelism สูงมากๆ ซึ่งแนวคิด RDBMS ดั้งเดิมที่เป็น centralize มันเริ่มเป็นข้อจำกัด (bottleneck) ถึงได้มีแนวคิดแบบ NoSQL เกิดขึ้น

แต่ผมเชื่อว่าระบบ RDBMS มันพัฒนามาไกลมากและรองรับงานได้ตั้งแต่เล็กจนระดับประเทศได้สบายๆ และคงไม่เฟดลงไปง่ายๆ โดยเฉพาะด้านการเงิน รวมถึงยังมีลูกเล่นให้พัฒนาได้อีกพอสมควร (อาจจะเป็น hybrid RDBMS เป็นต้น)

แต่ NoSQL ก็น่าสนใจ สำหรับระบบที่ใหญ่มากจริงๆ (ระดับประเทศมั้ง) ถ้าเราศึกษาแนวคิด และนำมาพัฒนา Data Object Model ซึ่งลองถ้าออกแบบ Model ได้ดีพอ ผมก็เชื่อว่าการเปลี่ยนผ่านไปยัง NoSQL ก็น่าจะทำได้ไม่ยากเกินไป

By: Jedt3D
iPhoneAndroidUbuntuWindows
on 19 September 2011 - 22:04 #334797 Reply to:334666
Jedt3D's picture

เห็นด้วยครับ เช่น PostgreSQL ก็มี MVCC มาแล้วตอนนี้ พวก DB2 มี PureXML มานานพอควร

ปัญหาที่เป็นของ RDBMS อันนี้ที่หลายๆ คน (developer) ไม่ค่อยนึกก็คือ การขยายระบบ

Read - scale ง่าย

Query - scale ยากบ้างง่ายบ้าง ขึ้นกับหลายๆ ปัจจัย

Write - scale ยาก

ปัญหา autorun ของ PK ที่จะกระจายหลายๆ server ก็แก้ยาก การ scale out โดยการพิ่มเครื่องเข้าไปใน RDBMS ก็ไม่ได้อยู่ๆ ทำกันได้ง่ายๆ (trigger, replication script etc...)

แต่ NoSQL หลายๆ ตัวออกแบบมาทำ Master-Master Replication, Multiple Master Replication, Sharding มาตั้งแต่ต้น ก็เลยมองไปที่ยุคใหม่เพื่อการขยายระบบ

ถ้ามองว่าระบบในอนาคตจะเปลี่ยนแปลงเร็ว เตรียมโครงสร้างล่วงหน้าได้ไม่เยอะ
NoSQL ที่จะเพิ่มความสามารถให้ทดแทนส่วน SQL ก็น่าจะมีอนาคตดีกว่า RDBMS ที่เพิ่มความสามารถให้เหมาะกับ Unstructure Data ที่ NoSQL ถนัดครับ

By: Jedt3D
iPhoneAndroidUbuntuWindows
on 19 September 2011 - 21:50 #334791
Jedt3D's picture

บริษัทผมใช้อยู่ในงานเว็บไซต์ ทำ CMS ขนาดกลางๆ ตัวหนึ่งครับ

ต้องบอกว่า NoSQL เป็นกลุ่มรวมของพวกที่ Not Only SQL

  • ไม่ได้แก้ทุกอย่าง แต่ละตัวมักจะออกมาแก้เฉพาะด้าน
  • ไม่ได้เอาไว้ทำแทน SQL ในส่วนที่มันถนัด เช่น OLAP, Data Cube และพวกที่เกี่ยวข้อกับงาน Business Reporting ทั่วๆ ไป
  • ส่วนใหญ่มองเป็น Document, Key-Value, Graph เท่าที่สังเกตมักจะเห็นอยู่ราวๆ นี้
  • ใช้ร่วมกันดีที่สุด เพื่อให้งานที่ SQL/NoSQL ต่างถนัดมารวมกัน

ตำราไทย คงไม่เปลี่ยน วันก่อนจะไปสอนหนังสือที่มหาวิทยาลัยแห่งหนึ่ง ต้องเปลี่ยนคอร์สเพราะคณบดีและอ.ที่สอนปี 3 CS ไม่รู้จักภาษา Ruby "มันมีด้วยเหรอ ใครจะใช้กัน"

จบแค่นี้ดีกว่า..

By: thegodth
AndroidRed HatUbuntuWindows
on 20 September 2011 - 06:36 #334944

ถามจริง Blognone เคยคิดจะเปลี่ยนไปใช้ NoSQL บ้างไหม?

By: HaMoo on 2 August 2013 - 02:34 #605198
HaMoo's picture

มันน่าลอง!!

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 2 August 2013 - 09:22 #605278 Reply to:605198
PaPaSEK's picture

กติกาการใส่ลายเซ็นใต้ความเห็น

  • ลิงก์ในลายเซ็นจะต้องเป็น "เว็บส่วนตัว" ไม่ว่า twitter, blog, facebook ฯลฯ
  • การแนะนำบริการอื่นใด จะทำได้ผ่านทางการเขียนเป็นข่าวภายในส่วน Press Release
  • สมาชิกที่เป็นบัญชีหน่วยงาน บริการ ฯลฯ จะใส่ลายเซ็นเป็นลิงก์ได้ได้ต่อเมื่อได้รับความเห็นชอบจากผมโดยตรงเท่านั้น
  • ผมสงวนสิทธิ์ที่จะเห็นชอบหรือไม่เห็นชอบบริการใด
  • การฝ่าฝืนหลังจากประกาศนี้จะทำให้บัญชีถูกปิดและลบความเห็นออกทั้งหมด

ปล.ผมไม่ใช่เจ้าของเว็บ ผมไม่ใช่ม็อด เป็นแค่สมาชิกธรรมดาครับ