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


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

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

5 91

5 ответов:

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

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

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

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

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

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

http://mongoid.org/

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

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

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

gem 'mongoid', " ~>2.0.0.бета"

текущая бета-версия 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. Это бесшовные. Ведущий-ведомый. Таким образом, вы можете обслуживать файл со многих компьютеров, каждый из которых отправляет часть. Он очень хорошо масштабируется:)

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

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

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

Edit:

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

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. ЖЕСТКИЙ ДИСК ДОС

размер по умолчанию _POST составляет 8 МБ в PHP, в Mongo есть ограничение на документ 16 МБ. Итак, представьте себе некоторую пользовательскую строку spoof eq USER_AGENT в вашем аналитическом скрипте, а затем отправьте 16 Мб на одну вставку.

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

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

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

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

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