2012-05-15 11 views
8

Jaki jest narzut korzystania z Java ORM dla MongoDB, czy lepiej, aby przejść na poziomie podstawowego sterownika do odczytu lub zapisu?Co za narzę dzie Java ORM dla MongoDB

Będziemy dodawać Mongo DB do jednego z naszych wymagań.

Istnieje kilka narzędzi mapowania ORM dla Java Java
-morphia
-spring-data
- others

Morphia Ostatnia wersja została wydana ponad rok temu
ale Wiosna dane aktywnie utrzymany. Którego należy użyć, jeśli mam zamiar rozpocząć teraz,

+1

Czy "R" w ORM nie oznacza "relacyjnej"? – duffymo

+1

Tak, jest to podstawa do mapowania obiektowego/relacyjnego, zwykle używana w relacyjnych bazach danych, ale ogólnie może być używana z dowolnym typem bazy danych. – mtariq

+0

@duffymo w tym przypadku Morphia faktycznie * nie * mapuje relacje między kolekcjami. Kilka wrapperów Ruby ma podobne cechy. –

Odpowiedz

11

Korzystanie z ORM zmniejsza wydajność, ale przyspiesza rozwój. Tu jest handel.

Dla narzędzi ORM, Morphia jest najbardziej stabilna. Here można znaleźć porównanie między Morphia i Basic Mongo Driver przez ich wydajność.

+2

Lepsze porównanie wydajności [link] (https://groups.google.com/forum/?fromgroups#!topic/morphia/kGCF2I3ZKRU) – mtariq

+0

Link dodany w Twojej odpowiedzi nie jest już dostępny. – sakura

4

Jest kilka rzeczy, o których warto tutaj wspomnieć. Porównywanie testów porównawczych jest dość trudne, ponieważ nie można tak naprawdę przetestować wydajności bez testowania konfiguracji MongoDB. W ten sposób można w dużym stopniu dostosowywać i dostosowywać środowisko w celu dostarczania pożądanych rezultatów.

Poza tym trzeba odróżnić wydajność odczytu i zapisu. Na szczególną uwagę zasługuje zastosowany model WriteConcern. Tak więc, co może być narzutem w wysokości 50% w scenariuszu WriteConcern.NONE można łatwo obniżyć do mniej niż 5% z WriteConcern.SAFE.

Tak, na pewno istnieje obciążenie w dowolnej implementacji ODM, ponieważ mapowanie obiektu ma na celu sprawdzenie otrzymania obiektu i ustawienie wartości zwykle za pomocą odbicia. Dlatego kluczowym punktem IMHO jest możliwość dołączania niestandardowych ręcznie kodowanych konwerterów, które możesz chcieć zapewnić dla obiektów krytycznych pod względem wydajności. W przypadku danych wiosennych po prostu zarejestrowanie niestandardowego EntityInstantiator, który wykonuje new Person(…) zamiast pozwalać domyślnej magii odbicia daje ogromny wzrost wydajności.

zespół The Spring danych ma build założyć wydajność build ważenia instancji OTS MongoDB dla zapisu przed różnymi WriteConcern s, a odczytu przez zwykłego kierowcy, MongoTemplate i abstrakcji repozytoriów. Liczby należy pobierać z przymrużeniem oka, ponieważ czasami pokazują repozytorium odczytujące dane szybciej niż szablony, które w jakiś sposób mają wpływ na infrastrukturę, ponieważ jest to prawie warstwa nad szablonem, ale nie robi tego ". t naprawdę dodaj jakiekolwiek buforowanie.

+1

Czy myślisz, że dane wiosenne mogą być szybsze niż morfina? – mtariq

+1

Oczywiście, że może. Ale oczywiście Morphia może być szybsza niż Spring Data. Myślę, że kluczową kwestią jest - jak zarysowano powyżej - jak daleko można ręcznie zakodować mapowanie obiektu na DBObject dla typów, które okazują się wąskimi gardłami, aby zapobiec zbyt dużej wpływowi ogólnej infrastruktury mapowania na wydajność. Jeśli utkniesz w przekonaniu, że podejście do mapowania nie jest konfigurowalne, jest to złe. –