Mongoid или MongoMapper? [закрытый]


Я пробовал MongoMapper, и это функция завершена (предлагая почти все функции AR), но я был не очень доволен производительностью при использовании больших наборов данных. Кто-нибудь сравнится с Монголом? Любой прирост производительности ?

14 83

14 ответов:

Я некоторое время использовал MongoMapper, но решил перейти на MongoId. Причина-скрытые проблемы, плюс высокомерие по отношению к пользователям. Мне пришлось прыгать через обручи, чтобы заставить MongoMapper работать с огурцом (удалось в конце концов) и поставить пару патчей, даже проект был простым, но это не главное. Когда я попытался отправить исправление ошибки (из-за несовместимости с ActiveRecord), они, похоже, разозлились, что я нашел проблему, и меня толкнули. В то время как я тестировал, я также обнаружена серьезная ошибка с их реализацией запросов, в то время как их тестирование было настроено таким образом, что тесты проходят. После моего предыдущего опыта, не смел представить его.

Они имеют значительно меньшее количество запросов pull и сообщений об ошибках / функциях, чем MongoId, т. е. участие сообщества намного ниже. Тот же опыт, что и у меня?

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

Я использую оба в течение последних нескольких недель. Mongomapper имеет лучшую поддержку реляционных ассоциаций (не встроенных) и имеет большую стороннюю поддержку. Mongoid имеет лучшую поддержку запросов, гораздо лучшую документацию (MM почти не имеет, хотя веб-сайт предположительно работает), поддержку Rail 3 (и, следовательно, поддержку разработки) и немного более активное сообщество в группах Google.

Я закончил тем, что пошел с Mongoid.

различия

MongoMapper

  • утверждал, что лучше поддерживает реляционные ассоциации.
  • утверждал, что он более расширяемый из-за его архитектуры плагинов.
  • использует DSL для запроса.
  • многие-ко-многим ассоциации обновляются только односторонне в MongoMapper.
  • менее надежная поддержка встроенных документов. Обновляет всю модель, даже если только несколько атрибуты изменяются.

Mongoid

  • предложил быть быстрее, чем MongoMapper по неофициальным данным.
  • более надежная поддержка встроенных документов с использованием атомарных операций MongoDB ($set, $push, $pull и т. д.) для обновления вложенных документов на месте.
  • поддерживает двунаправленные много-ко-многим ассоциации.
  • использует цепочечный ARel-подобный синтаксис для запрос.

сходство

  • и MongoMapper и Mongoid есть сайты с хорошей документацией. MongoMapper долгое время утверждал, что у него плохая документация, но их новый веб-сайт, похоже, закрывает пробел.
  • оба могут быть настроены через файл YAML, и оба имеют генератор rails для этого файла.
  • оба полностью рельсы 3 совместимый.

конфигурация

MongoMapper

defaults: &defaults
  host: 127.0.0.1
  port: 27017

development:
  database: database_name

Mongoid

development:
  sessions:
    default:
      database: database_name
      hosts:
        - 127.0.0.1:27017

сторонние библиотеки

обе стороны заявили, что имеют лучшую стороннюю поддержку. Github показывает следующее:

  • Поиск "Mongoid" дает 12671 результаты.
  • Поиск "MongoMapper" дает 4708 результаты.

Примечательно, что Devise не поддерживает MongoMapper.

Совершить Действия

за последний год, похоже, Mongoid был более регулярно поддерживается и обновляется, чем MongoMapper.

MongoMapper

MongoMapper

Mongoid

Mongoid

разница, которую я нашел в том, что update_attribute в MongoMapper появляется, чтобы написать весь документ, независимо от того, какие атрибуты на самом деле изменились. В Mongoid он только пишет измененные атрибуты. Это может быть существенной проблемой производительности для больших записей. Это особенно верно для вложенных документов (здесь labels), например,

profile = Profile.find(params[:id])
label = profile.labels.find_or_create_by(idx: params[:idx])
# MongoMapper doesn't have find_or_create_by for embedded docs
# -- you'll have to write custom code
profile.save

On save, MongoMapper спасет весь profile запись, но MongoId будет использовать $set оператор с позиционной логикой только для обновите метку, которая изменилась.

еще одна проблема заключается в выборе полей для возврата. Оба поддерживаютonly критерий, но Mongoid также поддерживает a without критерий, который изначально поддерживается Mongo.

мне кажется, что Mongoid просто более "округлен" и полон в своем API, что, вероятно, объясняет, что это большая база кода. Это также кажется документированным лучше.

вы установили mongo_ext? Я думаю, что производительность больше связана с драйвером, чем с самим картографом. Когда я смотрю на журнал монго, я вижу без расширения, что у трансера, похоже, есть некоторые лаги.

также сделайте так, как они рекомендуют на сайте monogdb, выберите только те поля, которые вам нужны.

сделал некоторое тестирование с MongoMapper на прошлой неделе, он был стабильным, но я нашел интерфейс запроса немного ограниченным (также некоторые из логики AR были причудливыми), переключился на Mongoid сегодня, и он чувствует себя намного лучше использовать - и более интуитивным, если вы привыкли к AR.

пока нет выводов скорости - но переключение было безболезненным - он работает и с рельсами 3.

Если вы используете Rails3, я бы рекомендовал Mongoid - он также использует "include" вместо наследования "

чтобы повысить производительность, попробуйте выборочно использовать доступ более низкого уровня, например Moped - я видел, что это до 10 раз быстрее

Я использовал оба из них, и они почти равны по функциональности, но посмотрите на статистику кода Mongoid vs MongoMapper

похоже, что MongoMapper имеет гораздо лучшее качество кода (если он делает то же самое с меньшим количеством).

вы можете рассчитать эту статистику самостоятельно, вот анализатор https://github.com/alexeypetrushin/code_stats

Я думаю, что Mongoid намного лучше в конфигурации и отображении.

Я ожидал бы, что производительность будет такой же, в последний раз, когда я проверял MongoMapper, не хватало поддержки Rails 3 - поэтому я сейчас смотрю на Mongoid.

sudo gem install mongo_ext - это ключ к производительности.

MongoDB сдувает CouchDB с точки зрения необработанной скорости – хотя CDB имеет свой собственный набор преимуществ.

Benchmark:http://www.snailinaturtleneck.com/blog/?p=74

Devise не поддерживал MongoMapper, и я тоже предпочитаю двигаться по пути Rails3. Поэтому я перешла на mongoid.

Mongoid имеет полную поддержку с Rails3 и имеет функцию карты идентичности.

еще один документ находится в http://mongoid.org

смотрите представление здесь http://mongoid.org/performance.html

Я надеюсь, что ниже точки добавить значения выше ответов.

1.Mongoid полностью совместим с Rails 3 и использует ActiveModel all над местом (проверки, сериализация и т. д.), где MongoMapper по-прежнему сосредоточен на Rails 2 и использует validatable gem для своих проверок.

2.Mongoid официально поддерживает и работает на Ruby 1.8.7, 1.9.1 и 1.9.2 head.

3.Mongoid поддерживает встроенные документы более надежно, выполняя атомарные операции MongoDB на любой области иерархии внутренне. ($set, $push, $pull и т. д.). С MM вам нужно явно сказать ему, чтобы сделать эти операции.

4.MongoMapper имеет лучшую поддержку реляционных ассоциаций и работает так по умолчанию.

5.MongoMapper является более расширяемым, с архитектурой плагинов, что делает его довольно легко для людей, чтобы расширить его с помощью своих собственных библиотек. У монголов этого нет.

6.MM поддерживает карты идентичности, Mongoid делает не.

7.MM имеет более крупное сообщество и, вероятно, более стороннюю поддержку библиотеки. Я сошел с ума по документации и rdoc.

8.Mongoid поддерживает кластеры репликации Master / Slave. (Пишет хозяину, круговой читает рабам) мм не делает.

9.Mongoid имеет чрезвычайно богатый API критериев стиля ARel, MM использует искатели стиля AR2.