나는 MongoMapper를 사용해 보았고 기능이 완벽했지만 (거의 모든 AR 기능을 제공함) 큰 데이터 세트를 사용할 때 성능이별로 만족스럽지 않았습니다. 몽고 이드와 비교 한 사람이 있습니까? 성능 향상?
답변:
한동안 MongoMapper를 사용했지만 MongoId로 마이그레이션하기로 결정했습니다. 그 이유는 숨겨진 문제와 사용자에 대한 오만 때문입니다. MongoMapper가 Cucumber와 함께 작동하도록하고 (결국 성공) 프로젝트가 간단하더라도 몇 가지 패치를 적용하려면 농구를 뛰어 넘어야했지만 그게 요점이 아닙니다. 내가 버그 수정을 제출하려고 할 때 (ActiveRecord와의 비 호환성으로 인해), 그들은 내가 문제를 발견하고 밀려났다는 사실에 화를 낸 것 같습니다. 테스트하는 동안 쿼리 구현에서 주요 버그가 발생했으며 테스트는 테스트가 통과하는 방식으로 조정되었습니다. 이전 경험 후에 감히 제출하지 않았습니다.
MongoId보다 풀 요청 및 버그 / 기능 제출 수가 훨씬 적습니다. 즉, 커뮤니티 참여가 훨씬 적습니다. 나와 같은 경험?
현재 어느 것이 더 많은 기능을 가지고 있는지 모르겠지만 MongoMapper에서 많은 미래가 보이지 않습니다. 직접 문제를 수정하고 기능을 추가하는 것은 신경 쓰지 않지만 버그를 수정하지 않는 상황은 신경 쓰고 있습니다.
지난 몇 주 동안 둘 다 사용했습니다. Mongomapper는 관계형 연결 (비 포함)을 더 잘 지원하고 타사 지원이 더 많습니다. Mongoid는 더 나은 쿼리 지원, 훨씬 더 나은 문서 (웹 사이트가 작동 중이지만 MM은 거의 없음), Rail 3 지원 (따라서 Devise 지원) 및 Google 그룹에서 약간 더 활동적인 커뮤니티를 제공합니다.
나는 몽고 이드와 함께하게되었다.
차이점
MongoMapper
몽고 이드
유사점
구성
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는 다음을 보여줍니다.
특히 Devise는 MongoMapper를 지원하지 않습니다.
커밋 활동
작년에 Mongoid는 MongoMapper보다 더 정기적으로 유지 관리되고 업데이트 된 것 같습니다.
MongoMapper
몽고 이드
내가 찾은 차이점 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 사이트에서 권장하는대로 수행하고 필요한 필드 만 선택하십시오.
mongo_ext
더 이상 필요하지 않으며 기본 mongo
gem에 포함되었습니다.
나는 둘 다 사용했고 기능면에서 거의 같지만 코드 통계를보십시오.
MongoMapper가 훨씬 더 나은 코드 품질을 제공하는 것 같습니다 (더 적은 것으로 동일하게 수행되는 경우).
이 통계는 직접 계산할 수 있습니다. 여기 분석기가 있습니다. https://github.com/alexeypetrushin/code_stats
Mongoid가 구성과 매핑에 훨씬 더 좋다고 생각합니다.
sudo gem install mongo_ext
성능을 얻기위한 핵심입니다.
MongoDB는 원시 속도 측면에서 CouchDB를 날려 버립니다. CDB에는 고유 한 장점이 있습니다.
mongo_ext
더 이상 필요하지 않으며 기본 mongo
gem에 포함되었습니다.
Devise는 MongoMapper를 지원하지 않았고 저도 Rails3 방식으로 이동하는 것을 선호합니다. 그래서 몽고 이드로 바꿨습니다.
Mongoid는 Rails3를 완벽하게 지원하고 ID 맵 기능을 가지고 있습니다.
더 많은 문서는 http://mongoid.org에 있습니다.
http://mongoid.org/performance.html 에서 성능을 참조하십시오 .
아래 포인트가 위의 답변에 가치를 추가하기를 바랍니다.
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 스타일 파인더를 사용합니다.