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


93

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

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

Ответы:


63

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

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

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

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


26

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

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

http://mongoid.org/

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

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

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

драгоценный камень монгоид, "~> 2.0.0.beta"

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

Также я предлагаю вам присоединиться к группе Google. У него низкая посещаемость, и люди очень охотно отвечают на любой вопрос. Например, я показал им свою первую модель БД, и они дали мне много способов ее улучшить. Создатель 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.

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

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

Mongoid поддерживает эту конфигурацию главный-подчиненный.

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

Редактировать:

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


8

1. Запрашивайте его без учета регистра

экв

"_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, в MongoDB - внедрение в массив.

Поэтому при записи данных используйте (строку) или проверьте is_array

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

6. HDD DOS

по умолчанию размер _POST составляет 8 МБ в PHP, в Mongo ограничение на документ составляет 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

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

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


Хотите верьте, хотите нет, но этого не было в ссылках, которые я поставил в очередь, чтобы прочитать, и похоже, что это хорошая ссылка. Спасибо.
Уэйн Конрад
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.