Mongoid 또는 MongoMapper? [닫은]


83

나는 MongoMapper를 사용해 보았고 기능이 완벽했지만 (거의 모든 AR 기능을 제공함) 큰 데이터 세트를 사용할 때 성능이별로 만족스럽지 않았습니다. 몽고 이드와 비교 한 사람이 있습니까? 성능 향상?

답변:


49

한동안 MongoMapper를 사용했지만 MongoId로 마이그레이션하기로 결정했습니다. 그 이유는 숨겨진 문제와 사용자에 대한 오만 때문입니다. MongoMapper가 Cucumber와 함께 작동하도록하고 (결국 성공) 프로젝트가 간단하더라도 몇 가지 패치를 적용하려면 농구를 뛰어 넘어야했지만 그게 요점이 아닙니다. 내가 버그 수정을 제출하려고 할 때 (ActiveRecord와의 비 호환성으로 인해), 그들은 내가 문제를 발견하고 밀려났다는 사실에 화를 낸 것 같습니다. 테스트하는 동안 쿼리 구현에서 주요 버그가 발생했으며 테스트는 테스트가 통과하는 방식으로 조정되었습니다. 이전 경험 후에 감히 제출하지 않았습니다.

MongoId보다 풀 요청 및 버그 / 기능 제출 수가 훨씬 적습니다. 즉, 커뮤니티 참여가 훨씬 적습니다. 나와 같은 경험?

현재 어느 것이 더 많은 기능을 가지고 있는지 모르겠지만 MongoMapper에서 많은 미래가 보이지 않습니다. 직접 문제를 수정하고 기능을 추가하는 것은 신경 쓰지 않지만 버그를 수정하지 않는 상황은 신경 쓰고 있습니다.


쿼리 구현의 주요 버그가 무엇인지 물어볼 수 있습니까? 이전 프로젝트에서 mongomapper를 사용했지만 처음으로 mongo에 노출되었습니다. mongomapper의 특정 문제에 대한 정보가 있으면 좋을 것입니다. 감사합니다
레드

5
정렬하지 않고 first ()를 가져 오면 대신 last ()로 작동합니다 (또는 그 반대). 그러나 단위 테스트는 순서를 지정하는 방식으로 작성되므로 통과합니다. 지금까지 수정되었을 수 있지만 더 이상 MongoMapper를 사용하지 않습니다. 하지만 의심스럽고, 어떻게 구현되었는지 보았습니다. 디자인이 좋지 않았습니다.
Aynat

안녕하세요, mongo mapper에서 mongoid로 원활하게 마이그레이션하는 방법에 대한 정보 링크를 보낼 수 있습니까?
첸 Kinnrot

1
@Aynat 나는 그것이 고쳐진 것이 아니라 나는 그것이 나에게 동일한 결과를 주려고 시도했다
Viren

이 대화가 다음 큰 프로젝트에서 mongomapper 또는 mongoid를 사용하기로 결정한 것을 보았습니다. 몽고 이드가이기는 것 같아요.
aliirz 2013-08-24

39

지난 몇 주 동안 둘 다 사용했습니다. Mongomapper는 관계형 연결 (비 포함)을 더 잘 지원하고 타사 지원이 더 많습니다. Mongoid는 더 나은 쿼리 지원, 훨씬 더 나은 문서 (웹 사이트가 작동 중이지만 MM은 거의 없음), Rail 3 지원 (따라서 Devise 지원) 및 Google 그룹에서 약간 더 활동적인 커뮤니티를 제공합니다.

나는 몽고 이드와 함께하게되었다.


27
내가 원래이 답변을 썼기 때문에 Mongoid는 많은 타사 지원을 받았으며 커뮤니티의 차이는 훨씬 더 큽니다. 제 생각에 몽고 이드는 오늘날 더 분명한 선택입니다. 성능은 둘 다 Ruby 드라이버를 거치기 때문에 상대적으로 동일해야합니다. 끔찍한 문서를 작성하지 않도록 OM에주의해야합니다.
Nader

MongoMapper의 다 대다 분류됩니다 github.com/jnunemaker/mongomapper/pull/259 , github.com/jnunemaker/mongomapper/issues/488 Mongoid에 대한 한
예브게니

37

차이점

MongoMapper

  • 관계형 연상을 더 잘 지원한다고 주장했습니다.
  • 플러그인 아키텍처로 인해 더 확장 가능하다고 주장했습니다.
  • 쿼리를 위해 DSL을 사용합니다.
  • 다 대다 연결은 MongoMapper에서 일방적으로 만 업데이트됩니다.
  • 포함 된 문서에 대한 덜 강력한 지원. 일부 속성 만 수정하더라도 전체 모델을 업데이트합니다.

몽고 이드

  • 일화적인 증거에 의해 MongoMapper보다 빠르도록 제안되었습니다.
  • MongoDB 원자 적 작업 ($ set, $ push, $ pull 등)을 사용하여 중첩 된 문서를 제자리에서 업데이트함으로써 임베디드 문서를 더욱 강력하게 지원합니다.
  • 양방향 다 대다 연결을 지원합니다.
  • 쿼리에 연결 가능한 ARel 유사 구문을 사용합니다.

유사점

  • MongoMapperMongoid 모두 좋은 문서가있는 웹 사이트를 가지고 있습니다. MongoMapper는 오랫동안 잘못된 문서를 가지고 있다고 주장했지만 새 웹 사이트는 그 격차를 좁히는 것 같습니다.
  • 둘 다 YAML 파일을 통해 구성 할 수 있으며 둘 다 해당 파일에 대한 레일 생성기를 가지고 있습니다.
  • 둘 다 Rails 3과 완전히 호환됩니다.

구성

MongoMapper

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는 다음을 보여줍니다.

  • "Mongoid"를 검색하면 12671 개의 결과가 생성됩니다.
  • "MongoMapper"를 검색하면 4708 개의 결과가 생성됩니다.

특히 Devise는 MongoMapper를 지원하지 않습니다.

커밋 활동

작년에 Mongoid는 MongoMapper보다 더 정기적으로 유지 관리되고 업데이트 된 것 같습니다.

MongoMapper

MongoMapper

몽고 이드

몽고 이드


1
Mongoid는 현재 ID 맵을 지원합니다.
user2503775

9

내가 찾은 차이점 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는 withoutMongo에서 기본적으로 지원 하는 기준 도 지원합니다 .

Mongoid는 API에서 더 "둥글고"완전하며 더 큰 코드베이스라고 설명 할 수 있습니다. 또한 더 잘 문서화 된 것으로 보입니다.


7

mongo_ext를 설치 했습니까? 성능은 매퍼 자체보다 드라이버와 더 관련이 있다고 생각합니다. 몽고 로그를 보면 확장자가 없어도 트랜서가 약간의 지연이있는 것 같습니다.

또한 monogdb 사이트에서 권장하는대로 수행하고 필요한 필드 만 선택하십시오.


루비 드라이버는 특히 1.8보다 빠르지 않지만 1.9는 성능을 향상시킵니다! mongoid 더 최적화하거나 제공하는 유일한 것은 시간이 mongomapper 것에 대한 quering 및 물건에 대한 다른 접근 방법의 경우 난 그냥 완전한 제물을 거의 거의 모든 AR 설탕을 기능입니다 궁금
PanosJee

1
1 년 후에이 글을 읽는 분들에게 유의하십시오 : mongo_ext더 이상 필요하지 않으며 기본 mongogem에 포함되었습니다.
tkrajcar

4

지난주에 MongoMapper로 약간의 테스트를 수행했지만 안정적 이었지만 쿼리 인터페이스가 약간 제한적 (AR 로직 중 일부가 기발함)을 발견하고 오늘 Mongoid로 전환했으며 사용하는 것이 훨씬 나아졌습니다. AR로.

아직 속도에 대한 결론은 없지만 전환은 쉽지 않았습니다. Rails 3에서도 작동합니다.


4

Rails3를 사용하는 경우 Mongoid를 권장합니다. 클래스를 유지하기 위해 상속 "<"대신 "include"를 사용합니다. Ruby에서 지속성을 추가하는 데 더 나은 패러다임을 사용하는 것이 "include"입니다. Mongoid는 Devise에서 잘 작동합니다.

성능을 향상 시키려면 낮은 수준의 액세스 (예 : Moped)를 선택적으로 사용하십시오.이 속도가 최대 10 배 더 빨라졌습니다.


3

나는 둘 다 사용했고 기능면에서 거의 같지만 코드 통계를보십시오. Mongoid 대 MongoMapper

MongoMapper가 훨씬 더 나은 코드 품질을 제공하는 것 같습니다 (더 적은 것으로 동일하게 수행되는 경우).

이 통계는 직접 계산할 수 있습니다. 여기 분석기가 있습니다. https://github.com/alexeypetrushin/code_stats


12
요점 : ... '덜 가진 동일한 않는 경우'
tkrajcar

10
이것은 완전히 근거가없는 것 같습니다.
Jim Mitchener 2012 년

14
코드 크기를 통해 프로젝트의 코드 품질을 비교하는 것은 무게를 측정하여 두 대의 자동차 품질을 비교하는 것과 같습니다.
Patrizio Rullo

3
실제로 자동차의 무게를 비교하는 것은 완벽하게 타당합니다.-얼마나 빠른지, 얼마나 휘발유가 필요한지 등 많은 판단을 내릴 수 있습니다. 그리고 실제로 과학적 관점에서 이치에 맞습니다. "Kolmogorov 복잡성"을 살펴보십시오.
Alex Craft

1
여전히 일부는 mongomapper의 속도를 크게 향상 시켰지만 ( coffeepowered.net/2013/07/29/… ), mongoid가 더 빠르다는 것은 여전히 ​​알려져 있고 받아 들여지고 있습니다.
ADIT Saxena는

3

Mongoid가 구성과 매핑에 훨씬 더 좋다고 생각합니다.


1
나도 그렇게 생각해. 게다가 MongoMapper보다 NoSQL에 더 가깝게 느껴지므로 ActiveRecord 및 SQL 측면에서 더 많이 생각하게됩니다. 또 다른 장점은 훌륭한 문서입니다
PanosJee

네! Mongoid 웹 사이트는 문서로 흔든다!
rodrigoalvesvieira

0

지난번에 MongoMapper에 Rails 3 지원이 부족하다는 것을 확인했을 때 성능이 동일 할 것으로 예상하므로 지금은 Mongoid를 살펴보고 있습니다.


0

sudo gem install mongo_ext 성능을 얻기위한 핵심입니다.

MongoDB는 원시 속도 측면에서 CouchDB를 날려 버립니다. CDB에는 고유 한 장점이 있습니다.

벤치 마크 : http://www.snailinaturtleneck.com/blog/?p=74


그는 mongoid x mongo_mapper에 대해 이야기하고 있습니다. mongodb x couchdb가 아니라 mongo에 액세스하는 데 더 빠른 루비 보석이 무엇입니까?
Victor Rodrigues

8
1 년 후에이 글을 읽는 분들에게 유의하십시오 : mongo_ext더 이상 필요하지 않으며 기본 mongogem에 포함되었습니다.
tkrajcar

0

Devise는 MongoMapper를 지원하지 않았고 저도 Rails3 방식으로 이동하는 것을 선호합니다. 그래서 몽고 이드로 바꿨습니다.


현재 MM이 지원한다고 생각합니다.
user2503775


0

아래 포인트가 위의 답변에 가치를 추가하기를 바랍니다.

1. Mongoid는 Rails 3과 완전히 호환되며, 모든 곳에서 ActiveModel을 사용합니다 (유효성 검사, 직렬화 등). 여기서 MongoMapper는 여전히 Rails 2에 집중하고 유효성 검사를 위해 유효한 gem을 사용합니다.

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은 ID 맵을 지원하지만 Mongoid는 지원하지 않습니다.

7.MM에는 더 큰 커뮤니티가 있으며 아마도 더 많은 타사 라이브러리 지원이 있습니다. 나는 문서와 rdoc에 열광했습니다.

8. Mongoid는 마스터 / 슬레이브 복제 클러스터를 지원합니다. (마스터에 쓰기, 라운드 로빈은 슬레이브에 읽기) MM은 그렇지 않습니다.

9.Mongoid에는 매우 풍부한 ARel 스타일 기준 API가 있으며 MM은 AR2 스타일 파인더를 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.