Mongodb: Что нужно знать перед использованием?

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

Вспомните, когда вы начали использовать Mongodb. Какие методы вы узнали позже, что заставило вас сказать: "Если бы я знал это, когда я начал!" Какие плагины вы обнаружили, что вы использовали бы с самого начала, если бы вы знали? Какие ссылки вы хотели бы иметь в закладки?

Ответ 1

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

Если вы работаете за пределами Rails, я рекомендую держаться подальше от MongoMapper. Поскольку он работает MongoDB во что-то похожее на то, что мы ожидаем от ORM, поддерживаемого SQL, это не дает вам хорошего представления о силе и разных мышлениях MongoDB. Проведите некоторое время, играя с драйвером рубика нижнего уровня и даже в консоли javascript.

Другую вещь, которую я бы рекомендовал, тем более, что вы упомянули о том, как нормализовать схему, не думать о MongoDB как о базе данных. Способ организации ваших данных в MongoDB очень отличается от реляционной базы данных. Постарайтесь думать об этом скорее как о месте хранения и извлечения рубиновых хэшей. Вы можете делать некоторые реляционные вещи с MongoDB, но я бы рекомендовал придерживаться только автономных документов, пока вы пытаетесь обернуть голову вокруг NoSQL.

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

Ответ 2

Я почти на той же стадии, что и вы. Запуск нового проекта с помощью MongoDB. Мне около 7 недель опыта. Это то, что я нашел очень полезным:

Используйте Mongoid вместо Mongomapper

http://mongoid.org/

Документация отличная. Серьезно, отлично. Вам потребуется около 15 минут, чтобы прочитать всю документацию, и у вас будет очень точное представление о том, что вы можете сделать и не можете сделать с Mongoid.

Завтра будет выпущен кандидат на выпуск новой крупной версии mongoid. Это принесет много полезных вещей.

Я использую Rails 3. Чтобы установить версию разработки, добавьте это в свой файл gem:

gem 'mongoid', "~ > 2.0.0.beta"

Текущая бета-версия - 20, но, как я уже сказал, завтра будет кандидат на выпуск.

Также я предлагаю вам присоединиться к группе google. У него низкий трафик, и люди очень охотно отвечают на любой вопрос. Например, я показал им свою первую модель DB Model, и они дали мне много способов улучшить это. Создатель Mongoid также отвечает на ваши вопросы.

В двух словах: Великая община.

Есть этот плагин, который позволяет использовать машиниста с mongo:

https://github.com/nmerouze/machinist_mongo

Хорошо работает.

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

Вы можете использовать Forgery с машинистом. Удивительная смесь.

https://github.com/sevenwire/forgery

Еще одно, что я хочу сказать. Я пришел из мира базы данных отношений, так что это звучало действительно странно в начале: вы можете сохранять файлы в базе данных mongo.

Фактически, это может быть быстрее, чем управлять ими, как мы это делали. Это из-за поддержки манго для осколков. Sharding означает, что вы можете использовать кластер компьютеров для обслуживания базы данных Mongo. Он без проблем. Подчиненная. Таким образом, вы можете обслуживать файл со многих компьютеров, каждый из которых отправляет часть. Он очень хорошо масштабируется:)

Это делается с помощью GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid поддерживает эту конфигурацию master-slave.

Спросите меня, нужна ли вам дополнительная информация.

Edit:

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

Ответ 3

1. Запросите его не чувствительный к регистру

eq

"_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

Найти по 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 в MongoDB - инъекция массива

Итак, когда вы пишете какое-то использование данных (string) или проверяете is_array

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

6. HDD DOS

default _POST размер составляет 8 Мбайт в PHP, IN Mongo - лимит на один документ 16 МБ. Поэтому представьте, что пользовательский spoof eq USER_AGENT STRING в вас анализирует script, а затем отправляет 16 МБ на одну вставку.

7. В прошлом с MongoDb возникли некоторые проблемы, но сейчас 3.0 довольно впечатляюще и стабильно.

Ответ 4

Вот отличный новичок/введение в подкаст MongoDb от .NET Rocks -

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

Майк Дирольф изучен... он работает над проектом MongoDb. О, и качество звука превосходно.

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

Ответ 5

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

Я думаю, вы уже нашли учебник Ruby Mongo. На всякий случай вы этого не сделали, вот ссылка: http://www.mongodb.org/display/DOCS/Ruby+Tutorial