Mongodb: ข้อควรรู้ก่อนใช้? [ปิด]


93

ฉันกำลังเริ่มโครงการงานอดิเรก (ที่ไม่ใช่รายได้) โดยใช้ Ruby on Rails ฉันได้ทำการพัฒนาใน Rails โดยใช้ Postgresql มาพอสมควรแล้วและฉันสามารถเลียนแบบสคีมาที่เป็นมาตรฐานได้ค่อนข้างดี อย่างไรก็ตาม Mongrodb ดูแวววาวและใหม่ จะมีอะไรดีไปกว่าการลองทำอะไรใหม่ ๆ มากกว่าโครงการงานอดิเรก

ลองนึกย้อนไปตอนที่คุณเริ่มใช้ Mongodb คุณได้เรียนรู้เทคนิคอะไรในภายหลังที่ทำให้คุณพูดว่า "ถ้าฉันรู้เมื่อฉันเริ่ม!" ปลั๊กอินใดที่คุณค้นพบว่าคุณจะใช้ตั้งแต่เริ่มต้นถ้าคุณรู้เพียงอย่างเดียว คุณต้องการบุ๊กมาร์กการอ้างอิงใด

คำตอบ:


63

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

หากคุณทำงานนอก Rails ขอแนะนำให้อยู่ห่างจาก MongoMapper เนื่องจากการทำงานของ MongoDB เป็นสิ่งที่คล้ายกับสิ่งที่เราคาดหวังจาก ORM ที่สนับสนุนโดย SQL จึงไม่ได้ให้ความคิดที่ดีเกี่ยวกับพลังของและความคิดที่แตกต่างกันเบื้องหลัง MongoDB ใช้เวลาเล่นกับไดร์เวอร์ Ruby ระดับล่างหรือแม้แต่ในคอนโซลจาวาสคริปต์

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

สำหรับลิงค์ที่คุณควรดูฉันขอแนะนำให้อ่านทุกอย่างที่คุณสามารถทำได้บนไซต์ MongoDB เอกสารประกอบของพวกเขาดีมาก โดยเฉพาะอย่างยิ่งจะดูที่เป็นคำสั่งขั้นสูง , ดัชนี MultiKeyและMapReduceได้รับความคิดของบางส่วนของข้อดีที่เป็นเอกลักษณ์และจุดแข็งของฐานข้อมูล NoSQL


26

ฉันเกือบจะอยู่ในขั้นตอนเดียวกับคุณแล้ว เริ่มโปรเจ็กต์ใหม่ด้วย MongoDB ฉันมีประสบการณ์ประมาณ 7 สัปดาห์ นี่คือสิ่งที่ฉันพบว่ามีประโยชน์มาก:

ใช้ Mongoid แทน Mongomapper

http://mongoid.org/

เอกสารเป็นเลิศ อย่างจริงจังยอดเยี่ยม คุณควรใช้เวลาประมาณ 15 นาทีในการอ่านเอกสารทั้งหมดและคุณจะมีความคิดที่แน่นอนว่าคุณสามารถทำอะไรได้บ้างและไม่สามารถทำได้กับ Mongoid

พรุ่งนี้ผู้สมัครรุ่นใหม่ของ mongoid จะถูกปล่อยออกมา มันจะนำสิ่งที่เป็นประโยชน์มากมาย

ฉันใช้ Rails 3 ในการติดตั้งเวอร์ชันการพัฒนาให้เพิ่มสิ่งนี้ลงในไฟล์ gem ของคุณ:

อัญมณี 'mongoid', "~> 2.0.0.beta"

เบต้าปัจจุบันคือ 20 แต่อย่างที่บอกพรุ่งนี้มีผู้สมัครเปิดตัว

นอกจากนี้ฉันขอแนะนำให้คุณเข้าร่วมกลุ่ม Google ด้วย มีปริมาณการใช้งานน้อยและผู้คนยินดีที่จะตอบคำถามใด ๆ ตัวอย่างเช่นฉันแสดงให้พวกเขาเห็นการออกแบบ DB Model แรกของฉันและพวกเขาให้หลายวิธีในการปรับปรุง ผู้สร้าง Mongoid ตอบคำถามของคุณด้วย

กล่าวได้สองคำ: ชุมชนที่ยิ่งใหญ่

มีปลั๊กอินนี้ที่ช่วยให้คุณใช้ Machinist กับ mongo:

https://github.com/nmerouze/machinist_mongo

ใช้งานได้ดี

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git',
:branch => 'machinist2'

คุณสามารถใช้ Forgery กับ Machinist ส่วนผสมที่ยอดเยี่ยม

https://github.com/sevenwire/forgery

อีกอย่างที่อยากบอก ฉันมาจากโลกฐานข้อมูลความสัมพันธ์ดังนั้นสิ่งนี้จึงฟังดูแปลก ๆ ในตอนแรก: คุณสามารถบันทึกไฟล์ในฐานข้อมูล mongo

อันที่จริงอาจเร็วกว่าการจัดการอย่างที่เราเคยทำ นี่เป็นเพราะการสนับสนุนของ Mongo ในการทำให้แตก Sharding หมายความว่าคุณสามารถใช้คลัสเตอร์คอมพิวเตอร์เพื่อให้บริการฐานข้อมูล Mongo มันไร้รอยต่อ มาสเตอร์ทาส. ดังนั้นคุณสามารถให้บริการไฟล์จากคอมพิวเตอร์หลาย ๆ เครื่องโดยแต่ละไฟล์จะส่งส่วนต่างๆ มันชั่งดีมาก :)

ทำได้โดยใช้ GridFS http://www.mongodb.org/display/DOCS/GridFS

Mongoid รองรับการกำหนดค่า master-slave นั้น

ถามฉันว่าคุณต้องการข้อมูลเพิ่มเติมหรือไม่

แก้ไข:

นอกจากนี้: http://railscasts.com/episodes/238-mongoid


8

1. การค้นหาไม่คำนึงถึงขนาดตัวพิมพ์

eq

"_id": "1da259c70fe3392c3b000002",
"name": "Dany"

array('name' => 'dany') :: results 0
array('name' => 'Dany') :: results 1

2. ใส่ ID ล่าสุด:

$coll->insert($user, true);
echo (string) $user['_id'];

3. _id เป็นวัตถุ MongoId

ค้นหาโดย id:

$p->findOne(array('_id' => new MongoId( $UID  )), array('proj'));

แสดง _id:

$coll['_id'] = ( string ) $coll['_id'];

นอกจากนี้ _id จะไม่ซ้ำกันต่อคอลเลกชันเท่านั้นซึ่งอาจแตกต่างกันในเซิร์ฟเวอร์อื่น ๆ

4. MongoDB รองรับ LIMIT, OFFSET, ORDER

สำหรับการเรียงลำดับล่วงหน้าคุณสามารถใช้ Aggregation Framework

5. ใน SQL คือ Sql injection ใน MongoDB คือ Array injection

ดังนั้นเมื่อเขียนข้อมูลให้ใช้ (สตริง) หรือตรวจสอบ is_array

$req = (string) $range['name'];

6. HDD DOS

ขนาด _POST เริ่มต้นคือ 8MB ใน PHP ใน Mongo มีขีด จำกัด ต่อเอกสาร 16MB ลองนึกภาพผู้ใช้บางคนสวมรอย eq USER_AGENT STRING ในสคริปต์วิเคราะห์ของคุณแล้วส่ง 16MB ต่อการแทรกหนึ่งครั้ง

7. มีปัญหาบางอย่างกับ MongoDb ในอดีต แต่ตอนนี้ 3.0 ค่อนข้างน่ากลัวและเสถียร


3

นี่คือผู้เริ่มต้น / แนะนำ MongoDb podcast จาก. NET Rocks -

http://www.dotnetrocks.com/default.aspx?ShowNum=507

Mike Dirolf ได้รับการพิจารณา ... เขาทำงานในโครงการ MongoDb โอ้และคุณภาพเสียงที่ยอดเยี่ยม

Mike Dirolf เป็นวิศวกรซอฟต์แวร์ที่ 10gen ซึ่งเขาทำงานในโครงการ MongoDB เขาทำงานกับโปรแกรมควบคุมไคลเอนต์สำหรับ Python และ Ruby เป็นหลัก แต่ยังใช้เวลาในการพูดคุยเกี่ยวกับ MongoDB ด้วย - เขาได้นำเสนอที่ EuroPython, Strange Loop Conf, RubyEnRails, RuPy และ RubyConf รวมถึงกลุ่มมีตติ้งในนิวยอร์กซิตี้ลอนดอนวอชิงตัน DC และ San Francisco


2

คุณควรดู Junemakers mongo-mapper อย่างชัดเจน: http://github.com/jnunemaker/mongomapperแต่ฉันขอแนะนำให้คุณเล่นกับไดรเวอร์ Ruby Mongo ที่บริสุทธิ์เพื่อดูว่า mongo-mapper ทำงานอย่างไรภายใต้ประทุน การใส่ข้อมูลลงในฐานข้อมูล Mongo โดยใช้ Ruby นั้นไม่ใช่เรื่องยาก

ฉันเดาว่าคุณพบบทช่วยสอน Ruby Mongo แล้ว ในกรณีที่คุณไม่ได้ทำนี่คือลิงค์: http://www.mongodb.org/display/DOCS/Ruby+Tutorial


เชื่อหรือไม่ว่านั่นไม่ได้อยู่ในลิงค์ที่ฉันเข้าคิวเพื่ออ่านและดูเหมือนว่าจะดี ขอบคุณ.
Wayne Conrad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.