Mongodb: что нужно знать перед использованием? [закрытый]
Я начинаю проект хобби (без дохода) с использованием Ruby on Rails. Я сделал довольно много разработок в Rails с использованием Postgresql, и я могу сделать довольно хорошую имитацию нормализованной схемы. Тем не менее, Mongrodb выглядит блестящим и новым. Что лучше пробовать что-то новое, чем хобби?
вспомните, когда вы начали использовать MongoDB. Какие техники вы узнали позже, что заставило вас сказать: "если бы я только знал это, когда я начал!"Какие плагины вы обнаружили что вы бы использовали с самого начала, если вы только знали? Какие ссылки вы хотели бы иметь закладки?
5 ответов:
Я бы определенно поддержал рекомендацию MongoMapper, если вы собираетесь использовать MongoDB с рельсами. Я предупреждаю вас, однако, что нет (до сих пор) никакой документации, кроме нескольких сообщений в блоге. Если вам неудобно копаться в исходном коде, чтобы увидеть, как все работает, это, вероятно, еще не для вас.
Если вы работаете за пределами Rails, я бы рекомендовал держаться подальше от MongoMapper. Потому что он работает MongoDB в нечто похожее на то, что мы ожидаем от ОРМ, поддерживаемый SQL, на самом деле не дает вам хорошего представления о силе и различном мышлении за MongoDB. Потратьте некоторое время, играя с драйвером ruby более низкого уровня, и даже в консоли javascript.
другая вещь, которую я бы рекомендовал, тем более, что вы упомянули, что знаете, как нормализовать схему, это не думать о MongoDB как о базе данных на данный момент. То, как вы организуете свои данные в MongoDB, очень отличается от реляционной базы данных. Пытаться чтобы думать об этом больше как о месте для хранения и извлечения рубиновых хэшей. Вы можете делать некоторые реляционные вещи с MongoDB, но я бы рекомендовал придерживаться только автономных документов, пока вы пытаетесь обернуть голову вокруг NoSQL.
Что касается того, какие ссылки вы должны посмотреть, я настоятельно рекомендую прочитать все, что вы можете на сайте MongoDB. Их документация очень хорошая. В частности, взгляните на расширенные запросы,multikey индексы и MapReduce чтобы получить представление о некоторых уникальных преимуществах и сильных сторонах базы данных NoSQL.
Я нахожусь почти на той же стадии, что и вы. Запуск нового проекта с MongoDB. Я около 7 недель опыта. Это то, что я нашел очень полезным:
используйте Mongoid вместо Mongomapper
документация отличная. Серьезно, отлично. Это займет у вас около 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:
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 в Нью-Йорке, Лондоне, Вашингтоне и Сан-Франциско.
вы должны окончательно взглянуть на junemakers mongo-mapper:http://github.com/jnunemaker/mongomapper но я также рекомендую вам немного поиграть с чистым водителем Ruby Mongo, чтобы увидеть, как работает mongo-mapper под капотом. Не очень сложно поместить некоторые данные в базу данных Mongo с помощью Ruby.
Я думаю, вы уже нашли учебник Руби Монго. На всякий случай, если вы этого не сделали, вот ссылка: http://www.mongodb.org/display/DOCS/Ruby + учебник