Wypróbowałem MongoMapper i jest on kompletny (oferuje prawie wszystkie funkcje AR), ale nie byłem zbyt zadowolony z wydajności podczas korzystania z dużych zestawów danych. Czy ktoś porównał z Mongoidem? Jakieś korzyści z wydajności?
Używałem MongoMapper od jakiegoś czasu, ale zdecydowałem się na migrację do MongoId. Powodem są ukryte problemy i arogancja wobec użytkowników. Musiałem przeskoczyć przez obręcze, aby MongoMapper działał z Cucumber (ostatecznie się udało) i założyć kilka łatek, nawet projekt był prosty, ale nie o to chodzi. Kiedy próbowałem zgłosić błąd (z powodu niezgodności z ActiveRecord), najwyraźniej wkurzyli się, że znalazłem problem i zostałem popchnięty. Podczas testowania napotkałem również poważny błąd w ich implementacji zapytań, podczas gdy ich testowanie było dostrojone w taki sposób, że testy przechodzą. Po moim poprzednim doświadczeniu nie odważyłem się go przesłać.
Mają znacznie mniejszą liczbę żądań ściągnięcia i zgłoszeń błędów / funkcji niż MongoId, co oznacza, że udział społeczności jest znacznie niższy. Takie samo doświadczenie jak moje?
Nie wiem, który z nich ma teraz więcej funkcji, ale nie widzę wiele przyszłości w MongoMapper. Nie mam nic przeciwko samodzielnemu naprawianiu problemów i dodawaniu funkcjonalności, ale przeszkadzają mi sytuacje, w których nie naprawiliby błędów.
używam obu od kilku tygodni. Mongomapper ma lepsze wsparcie dla powiązań relacyjnych (nie osadzonych) i ma większe wsparcie dla stron trzecich. Mongoid ma lepszą obsługę zapytań, znacznie lepszą dokumentację (MM prawie jej nie ma, chociaż podobno działa strona internetowa), obsługę Rail 3 (a tym samym wsparcie Devise) i nieco bardziej aktywną społeczność na Grupach dyskusyjnych Google.
Skończyło się na Mongoid.
źródło
Różnice
MongoMapper
Mongoid
Podobieństwa
Konfiguracja
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
Biblioteki zewnętrzne
Obie strony twierdziły, że mają lepsze wsparcie innych firm. Github ujawnia następujące informacje:
Warto zauważyć, że Devise nie obsługuje MongoMapper.
Zatwierdź działanie
Wygląda na to, że w ciągu ostatniego roku Mongoid był bardziej regularnie konserwowany i aktualizowany niż MongoMapper.
MongoMapper
Mongoid
źródło
Różnica, którą znalazłem, polega na tym, że
update_attribute
w MongoMapper wydaje się pisać cały dokument, niezależnie od tego, jakie atrybuty faktycznie się zmieniły. W Mongoid zapisuje tylko zmienione atrybuty. Może to stanowić poważny problem z wydajnością w przypadku dużych rekordów. Dotyczy to zwłaszcza dokumentów osadzonych (tutajlabels
), npprofile = 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
W przypadku
save
MongoMapper zapisze całyprofile
rekord, ale MongoId użyje$set
operatora z logiką pozycyjną, aby zaktualizować tylko zmienioną etykietę.Kolejną kwestią jest wybór pól do zwrócenia. Oba obsługują
only
kryterium, ale Mongoid obsługuje równieżwithout
kryterium, które jest natywnie obsługiwane przez Mongo.Wydaje mi się, że Mongoid jest po prostu bardziej „zaokrąglony” i kompletny w swoim API, co prawdopodobnie wyjaśnia, że jest to większa baza kodu. Wydaje się również, że jest lepiej udokumentowany.
źródło
Czy zainstalowałeś mongo_ext? Myślę, że wydajność jest bardziej związana ze sterownikiem niż z samym maperem. Patrząc na dziennik mongo widzę bez rozszerzenia, że transer wydaje się mieć pewne opóźnienia.
Zrób również to, co zalecają na stronie monogdb, zaznacz tylko te pola, których potrzebujesz.
źródło
mongo_ext
nie jest już potrzebny i został dodany do podstawowegomongo
klejnotu.Przeprowadziłem kilka testów z MongoMapper w zeszłym tygodniu, był stabilny, ale uważałem, że interfejs zapytań jest trochę ograniczony (również niektóre z logiki AR były dziwne), przeszedłem dziś na Mongoid i czuje się znacznie lepiej w użyciu - i bardziej intuicyjny, jeśli jesteś używany do AR.
Brak wniosków dotyczących prędkości - ale przejście było bezbolesne - działa również z Rails 3.
źródło
Jeśli używasz Rails3, polecam Mongoid - używa on również „include” zamiast dziedziczenia „<” do utrwalania klas - użycie „include” jest lepszym paradygmatem w Ruby do dodawania trwałości. Mongoid działa dobrze dla mnie z Devise.
Aby poprawić wydajność, spróbuj selektywnie korzystać z dostępu niższego poziomu, np.Moped - widziałem, że jest to nawet 10x szybsze
źródło
Użyłem obu z nich i wkrótce będą miały taką samą funkcjonalność, ale spójrz na statystyki kodu
Wygląda na to, że MongoMapper ma znacznie lepszą jakość kodu (jeśli robi to samo z mniejszą ilością).
Możesz obliczyć te statystyki samodzielnie, oto analizator https://github.com/alexeypetrushin/code_stats
źródło
Myślę, że Mongoid jest znacznie lepszy w konfiguracji i mapowaniu.
źródło
Spodziewałbym się, że wydajność będzie taka sama, ostatnim razem, gdy sprawdzałem, że MongoMapper nie obsługuje Rails 3 - więc na razie patrzę na Mongoid.
źródło
sudo gem install mongo_ext
jest kluczem do uzyskania wydajności.MongoDB zdmuchuje CouchDB pod względem surowej szybkości - chociaż CDB ma swój własny zestaw zalet.
Benchmark: http://www.snailinaturtleneck.com/blog/?p=74
źródło
mongo_ext
nie jest już potrzebny i został dodany do podstawowegomongo
klejnotu.Devise nie wspierało MongoMapper, ja też wolę poruszać się po Rails3. Więc przeszedłem na mangusty.
źródło
Mongoid w pełni obsługuje Rails3 i ma funkcję mapy tożsamości.
Więcej dokumentów można znaleźć pod adresem http://mongoid.org
Zobacz wydajność tutaj http://mongoid.org/performance.html
źródło
Mam nadzieję, że poniższe punkty dodają wartości do powyższych odpowiedzi.
1.Mongoid jest w pełni kompatybilny z Rails 3 i używa ActiveModel w każdym miejscu (walidacja, serializacja itp.), Gdzie MongoMapper nadal koncentruje się na Railsach 2 i używa walidowalnego klejnotu do swoich walidacji.
2.Mongoid oficjalnie obsługuje i działa na głowicach Ruby 1.8.7, 1.9.1 i 1.9.2.
3. Mongoid bardziej solidnie obsługuje osadzone dokumenty, wykonując wewnętrznie niepodzielne operacje MongoDB na dowolnym obszarze hierarchii. ($ set, $ push, $ pull itp.). W przypadku MM musisz wyraźnie powiedzieć mu, aby wykonał te operacje.
4.MongoMapper ma lepsze wsparcie dla skojarzeń relacyjnych i domyślnie działa w ten sposób.
5.MongoMapper jest bardziej rozszerzalny dzięki architekturze wtyczek, która sprawia, że ludzie mogą łatwo rozszerzać go o własne biblioteki. Mongoid tego nie ma.
6.MM obsługuje mapy tożsamości, Mongoid nie.
7.MM ma większą społeczność i prawdopodobnie większe wsparcie bibliotek zewnętrznych. Oszalałem na punkcie dokumentacji i rdoc.
8. Mongoid obsługuje klastry replikacji typu Master / Slave. (Pisze do mistrza, okrężny czyta do niewolników) MM nie.
9. Mongoid ma niezwykle bogate API kryteriów w stylu ARel, MM używa wyszukiwarek w stylu AR2.
źródło