몽고이드 아니면 몽고매퍼?
Mongo Mapper를 사용해 본 결과, 거의 모든 AR 기능을 갖추고 있지만, 대용량 데이터 세트를 사용할 때의 퍼포먼스는 그다지 만족스럽지 않았습니다.몽고이드랑 비교해보신 분 있나요?퍼포먼스가 향상되었습니까?
MongoMapper를 사용한 지 꽤 되었지만 MongoId로 이행하기로 했습니다.그 이유는 숨겨진 문제와 사용자들에 대한 오만함 때문이다.Mongo Mapper가 Oy와 함께 작업하게 하고(결국 성공), 몇 가지 패치를 붙이기 위해 후프를 통과해야 했습니다.프로젝트는 간단했지만 요점은 그게 아닙니다.(Active Record와의 호환성이 없기 때문에) 버그 수정을 제출하려고 하면 문제가 발견되어 떠밀려 버렸다고 화를 낸 것 같습니다.테스트 중에 테스트를 통과하도록 튜닝되어 있는 동안 쿼리 구현에 큰 오류가 발생했습니다.이전 경험 이후로는 감히 제출하지 못했습니다.
이들은 MongoId보다 풀 요청 수와 버그/기능 제출 수가 현저히 적습니다. 즉, 커뮤니티 참여도가 훨씬 낮습니다.나와 같은 경험?
지금은 어떤 것이 더 많은 기능을 가지고 있는지 모르겠지만, MongoMapper의 미래는 별로 보이지 않습니다.스스로 문제를 해결하고 기능을 추가하는 것은 상관없지만, 버그를 수정하지 않는 상황은 신경쓰고 있습니다.
지난 몇 주 동안 둘 다 사용했어요Mongomapper는 관계형 어소시에이션(비임베디드)에 대한 지원이 향상되어 서드파티제의 서포트가 확대됩니다.Mongoid는 더 나은 질의 지원, 훨씬 더 나은 문서(MM은 웹사이트가 진행 중이지만 거의 아무것도 없다), Rail 3 지원(그리고 Gand 지원), 그리고 Google Groups에서 조금 더 활발한 커뮤니티를 가지고 있다.
몽고이드랑 같이 가게 됐어요.
차이점.
몽고매퍼
- 관계형 어소시에이션을 보다 잘 지원한다고 주장합니다.
- 플러그인 아키텍처로 인해 확장성이 더 높다고 주장됩니다.
- 쿼리에 DSL을 사용합니다.
- MongoMapper에서는 다대다 어소시에이션이 단측만 갱신됩니다.
- 임베디드 문서에 대한 지원 기능이 떨어집니다.일부 속성만 수정된 경우에도 전체 모델을 업데이트합니다.
몽고이드
- 일화적 증거에 의해 MongoMapper보다 빠르다고 제안되었습니다.
- MongoDB 원자 연산($set, $push, $pull 등)을 사용하여 중첩된 문서를 인플레이스 업데이트하여 내장 문서를 더욱 강력하게 지원합니다.
- 양방향 다대다 어소시에이션을 지원합니다.
- 쿼리에는 체인 가능한 ARel과 같은 구문을 사용합니다.
유사점들
- MongoMapper와 Mongoid는 모두 좋은 문서를 가진 웹사이트를 가지고 있다.MongoMapper는 오랫동안 서류가 좋지 않다고 주장되어 왔지만, 그들의 새로운 웹사이트는 그 차이를 좁히는 것 같다.
- 둘 다 YAML 파일을 통해 구성할 수 있으며 둘 다 해당 파일에 대한 레일 생성기를 가지고 있습니다.
- 둘 다 레일 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
서드파티 라이브러리
양측 모두 제3자의 지원이 더 낫다고 주장해 왔다.Github은 다음을 나타냅니다.
- "Mongoid"를 검색하면 12671개의 결과를 얻을 수 있습니다.
- "MongoMapper"를 검색하면 4708개의 결과가 나타납니다.
특히 Gand는 MongoMapper를 지원하지 않습니다.
액티비티의 커밋
작년 한 해 동안, Mongoid는 MongoMapper보다 더 정기적으로 유지 보수되고 업데이트된 것으로 보인다.
몽고매퍼
몽고이드
제가 발견한 차이점은update_attribute
MongoMapper는 실제로 변경된 속성에 관계없이 문서 전체를 작성하는 것으로 보입니다.몽고이드이는 대규모 레코드의 경우 중대한 성능 문제가 될 수 있습니다.이것은 특히 임베디드 문서의 경우에 해당됩니다(여기서).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
합니다, Mongo Mapper는 Mongo Mapper를 저장합니다.profile
MongoId를 합니다.$set
위치 로직을 사용하여 변경된 라벨만 업데이트합니다.
반환할 필드를 선택하는 것도 문제입니다. 다 " " " 를 합니다.only
기준, 그러나 몽고이드 또한 지지한다.without
몽고몽고
Mongoid는 단지 더 둥글고 API가 완성되어 있기 때문에 더 큰 코드 베이스인 것 같습니다.또, 문서화되어 있는 것 같습니다.
mongo_ext는 설치하셨나요?매퍼 자체보다는 드라이버에 더 관련된 퍼포먼스라고 생각합니다.mongo log를 보면 확장자가 없어도 알 수 있고, 트랜스미터에 약간의 지연이 있는 것 같습니다.
또한 monogdb 사이트에서 권장하는 대로 필요한 필드만 선택합니다.
지난주에 MongoMapper에서 테스트를 해봤더니 안정적이었습니다만, 쿼리 인터페이스가 조금 한정되어 있었습니다(또한 AR 로직 중 일부는 변덕스러웠습니다). 오늘 Mongoid로 전환했습니다.사용하는 것이 훨씬 좋아졌습니다.AR에 익숙해지면 직관적으로 느껴집니다.
아직 속도 결론은 나지 않았지만 스위치 오버는 간단했습니다.Rails 3에서도 사용할 수 있습니다.
만약 당신이 Rails3를 사용한다면, Mongoid를 추천합니다.Mongoid는 클래스를 지속하기 위해 상속 "<" 대신 "include"를 사용합니다.Ruby에서는 "include"를 사용하는 것이 지속성을 높이기 위한 더 좋은 패러다임입니다.몽고이드는 Gand와 잘 어울려요.
퍼포먼스를 향상시키려면 Moped 등 하위 레벨의 액세스를 선택적으로 사용해 보십시오.이러한 액세스 속도는 최대 10배까지 빨라지는 것을 본 적이 있습니다.
둘 다 사용했는데 기능적으로는 거의 동일하지만 코드 통계를 보세요.
Mongo Mapper는 코드 품질이 훨씬 더 좋은 것 같습니다(더 적은 값으로 동일한 작업을 수행할 경우).
이 통계는 사용자가 직접 계산할 수 있습니다.여기 분석기 https://github.com/alexeypetrushin/code_stats가 있습니다.
저는 Mongoid가 구성과 매핑을 훨씬 더 잘하는 것 같아요.
이전 Mongo Mapper에서 Rails 3 지원이 부족하다는 것을 확인했을 때 성능은 동일할 것으로 예상되어 Mongoid를 현재 검토하고 있습니다.
sudo gem install mongo_ext
퍼포먼스를 얻기 위한 열쇠입니다.
MongoDB는 원시 속도 면에서 CouchDB를 압도합니다. CDB에는 독자적인 장점이 있습니다.
벤치마크: http://www.snailinaturtleneck.com/blog/?p=74
Gand는 Mongo Mapper를 지원하지 않았고, 저도 Rails3 방식으로 이동하는 것을 선호합니다.그래서 몽고이드로 바꿨어요.
몽고이드는 레일즈3와 아이덴티티 맵 기능을 전면 지원하고 있다.
상세한 것에 대하여는, http://mongoid.org 를 참조해 주세요.
퍼포먼스는 이쪽 http://mongoid.org/performance.html에서 보실 수 있습니다.
아래 점이 위의 답변에 가치를 더해주길 바랍니다.
1. Mongoid는 완전히 Rails 3과 호환되며, 모든 곳에서 Active Model을 사용하고 있습니다(검증, 시리얼화 등). MongoMapper는 여전히 Rails 2에 초점을 맞추고 있으며 검증에 유효한 보석을 사용하고 있습니다.
2. Mongoid는 공식적으로 Ruby 1.8.7, 1.9.1, 1.9.2 헤드를 지원하며 작동합니다.
3. Mongoid는 임베디드 문서를 더욱 강력하게 지원하며 계층의 모든 영역에서 내부적으로 MongoDB 원자 작업을 수행합니다.($set, $120, $pull 등)MM의 경우 이러한 작업을 수행하도록 명시적으로 지시해야 합니다.
4. Mongo Mapper는 더 나은 릴레이셔널 어소시에이션 지원을 가지고 있으며 기본적으로 이와 같이 동작합니다.
5. MongoMapper는 플러그인 아키텍처를 통해 확장성이 향상되어 사용자가 자신의 라이브러리로 쉽게 확장할 수 있습니다.몽고이드에는 이게 없어요.
6. MM은 아이덴티티 맵을 지원하지만 Mongoid는 지원하지 않습니다.
7.MM에는 대규모 커뮤니티가 있으며 서드파티 라이브러리의 지원도 더 많을 수 있습니다.나는 문서와 rdoc에 열광했다.
8. Mongoid는 마스터/슬레이브 복제 클러스터를 지원합니다. (마스터에 쓰기, 슬레이브에 라운드 로빈 읽기) MM은 지원하지 않습니다.
9. Mongoid는 매우 풍부한 ARel 스타일 기준 API를 가지고 있으며, MM은 AR2 스타일 파인더를 사용합니다.
언급URL : https://stackoverflow.com/questions/1958365/mongoid-or-mongomapper
'itsource' 카테고리의 다른 글
반응 양식에서 소품 변경에 대한 상태 (0) | 2023.04.02 |
---|---|
JSON 개체는 str, 바이트 또는 byearray여야 하며 dict가 아닙니다. (0) | 2023.04.02 |
PHP: 키를 어떻게 사용하고 유지합니까? (0) | 2023.03.28 |
부울에서의 ng-filter 필터 (0) | 2023.03.28 |
클래스 메서드에서 'this'가 사용되어야 합니다. (0) | 2023.03.28 |