Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

В итоге я выбрал Mongoid.

Различия

МонгоМаппер

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

монгоидный

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

Сходства

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

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

МонгоМаппер

defaults: &defaults
  host: 127.0.0.1
  port: 27017

development:
  database: database_name

монгоидный

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

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

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

  • Поиск по запросу «Монгоид» дает 12671 результат.
  • Поиск по запросу «MongoMapper» дает 4708 результатов.

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

Зафиксировать активность

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

МонгоМаппер

MongoMapper

монгоидный

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

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

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

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

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

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

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

Выводов по скорости пока нет - но переключение прошло безболезненно - с Rails 3 тоже работает.

Если вы используете Rails3, я бы порекомендовал Mongoid — он также использует «include» вместо наследования «<» для сохранения классов — использование «include» — лучшая парадигма в Ruby для добавления постоянства.У меня Mongoid отлично работает с Devise.

Чтобы повысить производительность, попробуйте выборочно использовать доступ нижнего уровня, например.Мопед. Я видел, чтобы он был в 10 раз быстрее.

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

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

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

Я думаю, что Mongoid намного лучше справляется с настройкой и отображением.

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

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

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

Тест: http://www.snailinaturtleneck.com/blog/?p=74

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

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

Дополнительный документ находится на http://mongoid.org

Посмотреть выступление можно здесь http://mongoid.org/ Performance.html

Я надеюсь, что приведенные ниже пункты добавят ценность ответам выше.

1. Монгоид полностью совместима с 3 и использует ActiveModel повсюду (проверка, сериализация и т. Д.), где Mongomapper по -прежнему сосредоточен на рельсах 2 и использует вавилизируемый драгоценный камень для его проверки.

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

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

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

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

6.MM поддерживает карты идентификации, Mongoid — нет.

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

8.Mongoid поддерживает кластеры репликации Master/Slave.(Записывает ведущему устройству, читает ведомым устройствам по циклическому принципу) MM этого не делает.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top