Mongodb: Що потрібно знати перед використанням? [зачинено]


93

Я починаю хобі (неприбутковий) проект за допомогою Ruby on Rails. Я зробив неабияку розробку в Rails за допомогою Postgresql, і можу зробити досить хорошу імітацію нормалізованої схеми. Однак Монгродб виглядає блискучим і новим. Що може краще спробувати щось нове, ніж хобі-проект?

Згадайте, коли ви почали використовувати Mongodb. Які прийоми ви навчились пізніше, що змусило вас сказати: "Якби я це знав, коли починав!" Які плагіни ви виявили, які б використовували з самого початку, якби тільки знали? Які посилання ви хотіли б мати у закладках?

Відповіді:


63

Я б точно підтримав рекомендацію MongoMapper, якщо ви збираєтеся використовувати MongoDB з Rails. Однак я застережу вас, що (поки що) немає жодної документації, крім кількох публікацій у блозі. Якщо вам не комфортно копатись у вихідному коді, щоб побачити, як все працює, це, мабуть, ще не для вас.

Якщо ви працюєте за межами Rails, я рекомендую триматися подалі від MongoMapper. Оскільки MongoDB працює на щось подібне до того, що ми очікуємо від ORM із підтримкою SQL, це насправді не дає вам гарного уявлення про силу та різне мислення MongoDB. Проведіть трохи часу, граючись із рубіновим драйвером нижчого рівня і навіть у консолі javascript.

Інше, що я б порекомендував, тим більше, що ви згадали про те, як нормалізувати схему, це не думати про MongoDB наразі. Спосіб упорядкування ваших даних у MongoDB дуже відрізняється від способу впорядкування даних у реляційній базі даних. Спробуйте думати про це більше як про місце для зберігання та отримання хешів Рубі. Ви можете робити деякі реляційні речі з MongoDB, але я б рекомендував дотримуватися лише автономних документів, поки ви намагаєтеся обернути голову навколо NoSQL.

Щодо посилань, які слід переглянути, я настійно рекомендую прочитати все, що можна на сайті MongoDB. Їх документація дуже хороша. Зокрема, погляньте на розширені запити , індекси декількох клавіш та MapReduce, щоб отримати уявлення про деякі унікальні переваги та сильні сторони бази даних NoSQL.


26

Я майже на тій же стадії, що і ти. Початок нового проекту з MongoDB. Я маю близько 7 тижнів досвіду. Це те, що я знайшов дуже корисним:

Використовуйте Mongoid замість Mongomapper

http://mongoid.org/

Документація відмінна. Серйозно, чудово. На читання всієї документації у вас піде близько 15 хв, і ви отримаєте дуже точне уявлення про те, що ви можете робити, а що не можна робити з Mongoid.

Завтра буде випущений кандидат на випуск нової основної версії mongoid. Це збирається принести багато корисного.

Я використовую Rails 3. Щоб встановити версію для розробки, додайте це у свій gem-файл:

самоцвіт 'mongoid', "~> 2.0.0.beta"

Поточна бета-версія - 20, але, як я вже сказав, завтра є кандидат на звільнення.

Також я рекомендую вам також приєднатися до групи Google. У ньому низький трафік, і люди дуже готові відповісти на будь-яке питання. Наприклад, я продемонстрував їм свій перший дизайн моделі DB, і вони дали мені багато способів це вдосконалити. Творець 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'

Ви можете використовувати Підробку з Машиністом. Чудова суміш.

https://github.com/sevenwire/forgery

Ще одне, що я хочу сказати. Я походжу із світу баз даних відношень, тому на початку це звучало по-справжньому дивним: Ви можете зберігати файли в базі даних mongo.

Насправді це може бути швидше, ніж керувати ними, як ми робили раніше. Це пов’язано з підтримкою монго шардингу. Шардінг означає, що ви можете використовувати кластер комп'ютерів для обслуговування бази даних Монго. Це безшовно. Господар-раб. Таким чином, ви можете подати файл із багатьох комп’ютерів, кожен з яких надсилає частину. Це дуже добре масштабується :)

Це робиться за допомогою GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid підтримує цю конфігурацію master-slave.

Запитайте мене, чи потрібна вам додаткова інформація.

Редагувати:

Також: http://railscasts.com/episodes/238-mongoid


8

1. Запит не чутливий до регістру

екв

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

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

2. Ідентифікатор останньої вставки:

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

3. _id - це об'єкт MongoId

Знайти за ідентифікатором:

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

Показати _id:

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

Також _id унікальний лише для кожної колекції, може відрізнятися на іншому сервері

4. MongoDB має підтримку обмеження, зміщення, замовлення

для деякого попереднього сортування ви можете використовувати Aggregation Framework.

5. У SQL - це ін'єкція Sql, в MongoDB - ін'єкція масиву

Тому при записі деяких даних використовуйте (рядок) або перевіряйте is_array

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

6. HDD DOS

за замовчуванням розмір _POST становить 8 МБ в PHP, В Монго обмежено 16 МБ на документ. Тож уявіть, що в вашому аналітичному скрипті є якийсь підроблений користувацький еквалайзер USER_AGENT STRING, а потім надсилається 16 МБ на одну вставку.

7. У минулому були деякі проблеми з MongoDb, але зараз 3.0 є досить дивовижним і стабільним.


3

Ось чудовий новачок / вступ до подкасту MongoDb від .NET Rocks -

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

Майка Дірольфа беруть інтерв’ю ... він працює над проектом MongoDb. Ох, і якість звуку відмінна.

Майк Дірольф - інженер програмного забезпечення в 10gen, де він працює над проектом MongoDB. В основному він працює над клієнтськими драйверами для Python та Ruby, але також вимагає тайм-ауту, щоб поговорити про MongoDB - він виступав на EuroPython, Strange Loop Conf, RubyEnRails, RuPy та RubyConf, а також у групах зустрічей у Нью-Йорку, Лондон, Вашингтон Округ Колумбія та Сан-Франциско.


2

Вам слід остаточно поглянути на mongo-mapper junemakers: http://github.com/jnunemaker/mongomapper Але я також рекомендую вам трохи пограти з чистим драйвером Ruby Mongo, щоб побачити, як mongo-mapper працює під капотом. Не дуже складно помістити деякі дані в базу даних Mongo за допомогою Ruby.

Думаю, ви вже знайшли підручник з Рубі Монго. Про всяк випадок ви не знайшли, ось посилання: http://www.mongodb.org/display/DOCS/Ruby+Tutorial


Вірте чи ні, цього не було в посиланнях, які я поставив у чергу, щоб прочитати, і це виглядає як хороший. Дякую.
Wayne Conrad,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.