Tags:
MongoDB

ข่าวเก่าไปอาทิตย์นึงนะครับ แต่ยังใช้ได้อยู่สำหรับผู้ที่สนใจเรื่อง 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

Comments

By: unchie
Windows Phone
unchie's blog
on 18/09/11 18:36 #334491 toggle
unchie's picture

mongo , mango ,meego

ตาเริ่มลาย

By: thegodth
Android
thegodth's blog
on 18/09/11 19:26 #334500 toggle
thegodth's picture

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

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

By: HyBRiD
iPhoneSymbianUbuntuWindows
HyBRiD's blog
on 18/09/11 21:11 #334520 Reply to:334500 toggle
HyBRiD's picture

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

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

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


hybridplex

By: thegodth
Android
thegodth's blog
on 18/09/11 23:29 #334549 Reply to:334520 toggle
thegodth's picture

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

By: HyBRiD
iPhoneSymbianUbuntuWindows
HyBRiD's blog
on 19/09/11 0:25 #334563 Reply to:334549 toggle
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/


hybridplex

By: thegodth
Android
thegodth's blog
on 19/09/11 21:39 #334809 Reply to:334549 toggle
thegodth's picture

ขอบคุณครับ

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

By: supatee
iPhoneWindows PhoneAndroidUbuntu
supatee's blog
on 18/09/11 23:01 #334545 Reply to:334500 toggle
supatee's picture

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

By: mk
FounderAndroidRed HatWindows
mk's blog
on 19/09/11 8:55 #334585 Reply to:334500 toggle
mk's picture

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


my disclaimer

By: PaPaSEK
ContributorAndroidWindowsIn Love
PaPaSEK's blog
on 19/09/11 13:58 #334650 Reply to:334585 toggle
PaPaSEK's picture

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

By: takz1977
iPhoneUbuntuWindows
takz1977's blog
on 18/09/11 20:05 #334508 toggle
takz1977's picture

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

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

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


^_^

By: jonathanz
jonathanz's blog
on 18/09/11 21:48 #334524 toggle
jonathanz's picture

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

By: ComSci-MFU
Blackberry
ComSci-MFU's blog
on 18/09/11 22:42 #334541 toggle
ComSci-MFU's picture

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


"คอมไซน์" ไม่ได้เป็นแค่โปรแกรมเมอร์ - CS7th @MFU

By: haina
Android
haina's blog
on 19/09/11 0:45 #334567 toggle
haina's picture

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

By: nextman13
Ubuntu
nextman13's blog
on 19/09/11 8:39 #334580 toggle
nextman13's picture

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


This is a pen.

By: toooooooon
iPhoneWindows PhoneAndroidBlackberry
toooooooon's blog
on 19/09/11 8:55 #334586 toggle
toooooooon's picture

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

By: Go-Kung
Android
Go-Kung's blog
on 19/09/11 13:24 #334646 Reply to:334586 toggle
Go-Kung's picture

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

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

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

By: khajochi
WriteriPhoneIn Love
khajochi's blog
on 19/09/11 10:40 #334605 toggle
By: tekkasit
ContributorAndroidWindowsIn Love
tekkasit's blog
on 19/09/11 14:47 #334666 toggle
tekkasit's picture

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

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

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

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

By: Jedt3D
iPhoneWindows PhoneAndroidUbuntu
Jedt3D's blog
on 19/09/11 21:04 #334797 Reply to:334666 toggle
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 ถนัดครับ


-- Ruby, Sinatra, Rails, Java, ASP.NET MVC, NoSQL, Real Studio --

By: Jedt3D
iPhoneWindows PhoneAndroidUbuntu
Jedt3D's blog
on 19/09/11 20:50 #334791 toggle
Jedt3D's picture

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

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

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

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

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


-- Ruby, Sinatra, Rails, Java, ASP.NET MVC, NoSQL, Real Studio --

By: thegodth
Android
thegodth's blog
on 20/09/11 5:36 #334944 toggle
thegodth's picture

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