Tôi đã thử MongoMapper và nó đã hoàn thiện về tính năng (cung cấp gần như tất cả chức năng AR) nhưng tôi không hài lòng lắm với hiệu suất khi sử dụng bộ dữ liệu lớn. Có ai so sánh với Mongoid? Có tăng hiệu suất không?
Câu trả lời:
Tôi đã sử dụng MongoMapper một thời gian nhưng quyết định chuyển sang MongoId. Lý do là các vấn đề tiềm ẩn cộng với sự kiêu ngạo đối với người dùng. Tôi đã phải nhảy qua các vòng để MongoMapper hoạt động với Cucumber (cuối cùng đã thành công) và đặt một vài bản vá ngay cả khi dự án rất đơn giản, nhưng không phải là vấn đề. Khi tôi cố gắng gửi một bản sửa lỗi (do không tương thích với ActiveRecord), họ dường như đã bực mình vì tôi đã tìm thấy sự cố và tôi đã bị đẩy đi. Trong khi tôi đang thử nghiệm, tôi cũng gặp phải một lỗi lớn với việc triển khai truy vấn của họ, trong khi thử nghiệm của họ được điều chỉnh theo cách mà các thử nghiệm vượt qua. Sau kinh nghiệm lần trước của tôi, không dám nộp nó.
Họ có số lượng yêu cầu kéo và gửi lỗi / tính năng thấp hơn đáng kể so với MongoId, tức là sự tham gia của cộng đồng thấp hơn nhiều. Kinh nghiệm giống như của tôi?
Tôi không biết cái nào có nhiều tính năng hơn ngay bây giờ, nhưng tôi không thấy nhiều tương lai trong MongoMapper. Tôi không ngại tự mình khắc phục các sự cố và thêm chức năng, nhưng tôi lo lắng khi họ không sửa lỗi.
tôi đã sử dụng cả hai trong vài tuần qua. Mongomapper hỗ trợ tốt hơn cho các liên kết quan hệ (không nhúng) và có sự hỗ trợ của bên thứ ba nhiều hơn. Mongoid có hỗ trợ truy vấn tốt hơn, tài liệu tốt hơn nhiều (MM gần như không có, mặc dù một trang web được cho là đang hoạt động), hỗ trợ Rail 3 (và do đó hỗ trợ Devise) và một cộng đồng tích cực hơn một chút trên Google Groups.
Tôi đã kết thúc với Mongoid.
Sự khác biệt
MongoMapper
Mongoid
Điểm tương đồng
Cấu hình
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
Thư viện bên thứ 3
Cả hai bên đều tuyên bố có sự hỗ trợ của bên thứ 3 tốt hơn. Github tiết lộ những điều sau:
Đáng chú ý, Devise không hỗ trợ MongoMapper.
Hoạt động cam kết
Trong năm qua, có vẻ như Mongoid đã được bảo trì và cập nhật thường xuyên hơn MongoMapper.
MongoMapper
Mongoid
Một điểm khác biệt mà tôi tìm thấy là update_attribute
trong MongoMapper dường như viết toàn bộ tài liệu, bất kể thuộc tính nào thực sự đã thay đổi. Trong Mongoid, nó chỉ ghi các thuộc tính đã thay đổi. Đây có thể là một vấn đề hiệu suất đáng kể đối với các bản ghi lớn. Điều này đặc biệt đúng đối với các tài liệu nhúng (tại đây labels
), ví dụ:
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
Khi bật save
, MongoMapper sẽ lưu toàn bộ profile
bản ghi, nhưng MongoId sẽ sử dụng $set
toán tử với logic vị trí để chỉ cập nhật nhãn đã thay đổi.
Một vấn đề khác là chọn trường nào để trả về. Cả hai đều hỗ trợ một only
tiêu chí, nhưng Mongoid cũng hỗ trợ một without
tiêu chí, vốn được Mongo hỗ trợ.
Đối với tôi, có vẻ như Mongoid chỉ "tròn trịa" và hoàn thiện hơn trong API của nó, điều này có thể giải thích rằng đó là một cơ sở mã lớn hơn. Nó cũng xuất hiện tốt hơn.
Bạn đã cài đặt mongo_ext? Tôi nghĩ rằng hiệu suất liên quan đến trình điều khiển nhiều hơn là bản thân người lập bản đồ. Khi nhìn vào nhật ký mongo, tôi có thể thấy mà không có phần mở rộng, bộ chuyển đổi dường như có một số độ trễ.
Cũng làm như họ đề xuất trên trang monogdb, chỉ chọn những trường bạn cần.
mongo_ext
không cần thiết nữa và đã được cuộn thành mongo
viên ngọc cơ bản .
Đã thực hiện một số thử nghiệm với MongoMapper vào tuần trước, nó ổn định nhưng tôi thấy giao diện truy vấn hơi hạn chế (một số logic AR cũng kỳ quặc), hôm nay đã chuyển sang Mongoid và cảm thấy sử dụng tốt hơn nhiều - và trực quan hơn nếu bạn đã quen sang AR.
Chưa có kết luận về tốc độ - nhưng việc chuyển đổi không hề dễ dàng - nó cũng hoạt động với Rails 3.
Nếu bạn đang sử dụng Rails3, tôi khuyên bạn nên dùng Mongoid - nó cũng sử dụng "bao gồm" thay vì kế thừa "<" để duy trì các lớp - sử dụng "bao gồm" là mô hình tốt hơn trong Ruby để thêm tính bền bỉ. Mongoid hoạt động tốt với tôi với Devise.
Để cải thiện hiệu suất, hãy cố gắng sử dụng có chọn lọc quyền truy cập cấp thấp hơn, chẳng hạn như Moped - Tôi đã thấy điều này nhanh hơn tới 10 lần
Tôi đã sử dụng cả hai và chúng sắp bằng nhau về chức năng, nhưng hãy nhìn vào số liệu thống kê mã
Có vẻ như MongoMapper có chất lượng mã tốt hơn nhiều (nếu nó làm như vậy với ít hơn).
Bạn có thể tự mình tính toán số liệu thống kê này, đây là công cụ phân tích https://github.com/alexeypetrushin/code_stats
Tôi nghĩ Mongoid tốt hơn nhiều về cấu hình và ánh xạ.
Tôi mong đợi hiệu suất vẫn như cũ, lần trước tôi đã kiểm tra MongoMapper thiếu hỗ trợ Rails 3 - vì vậy tôi đang xem xét Mongoid bây giờ.
sudo gem install mongo_ext
là chìa khóa để đạt được hiệu suất.
MongoDB đánh bại CouchDB về tốc độ thô - mặc dù CDB có những ưu điểm riêng.
Điểm chuẩn: http://www.snailinaturtleneck.com/blog/?p=74
mongo_ext
không cần thiết nữa và đã được cuộn thành mongo
viên ngọc cơ bản .
Devise không hỗ trợ MongoMapper và tôi cũng thích di chuyển theo cách Rails3 hơn. Vì vậy, tôi chuyển sang mongoid.
Mongoid được hỗ trợ đầy đủ với Rails3 và có tính năng bản đồ nhận dạng.
Tài liệu khác tại http://mongoid.org
Xem hiệu suất tại đây http://mongoid.org/performance.html
Tôi hy vọng Điểm dưới đây bổ sung giá trị cho các câu trả lời trên.
1.Mongoid hoàn toàn tương thích với Rails 3 và sử dụng ActiveModel ở khắp mọi nơi (xác thực, tuần tự hóa, v.v.), trong đó MongoMapper vẫn tập trung vào Rails 2 và sử dụng gem có thể xác thực để xác nhận.
2.Mongoid chính thức hỗ trợ và hoạt động trên đầu Ruby 1.8.7, 1.9.1 và 1.9.2.
3.Mongoid hỗ trợ các tài liệu nhúng mạnh mẽ hơn, thực hiện các hoạt động nguyên tử MongoDB trên bất kỳ khu vực nào của hệ thống phân cấp trong nội bộ. ($ set, $ push, $ pull, v.v.). Với MM, bạn cần yêu cầu nó thực hiện các thao tác này một cách rõ ràng.
4.MongoMapper có hỗ trợ kết hợp quan hệ tốt hơn và hoạt động như thế này như mặc định.
5.MongoMapper có thể mở rộng hơn, với kiến trúc plugin giúp mọi người khá dễ dàng mở rộng nó với các thư viện của riêng họ. Mongoid không có điều này.
6.MM hỗ trợ bản đồ nhận dạng, Mongoid thì không.
7.MM có một cộng đồng lớn hơn, và có lẽ nhiều hỗ trợ thư viện của bên thứ 3 hơn. Tôi đã phát điên với tài liệu và rdoc.
8.Mongoid hỗ trợ các cụm sao chép Master / Slave. (Viết để làm chủ, đọc round robin cho nô lệ) MM không.
9.Mongoid có API tiêu chí kiểu ARel cực kỳ phong phú, MM sử dụng công cụ tìm kiểu AR2.