2013-01-19 12 views
5

Próbuję dowiedzieć się przewagi Jongo nad po prostu unmarshalling polecenia json przy użyciu (DBObject) JSON.parse (...) i przy użyciu DBObject w poniższej mody.Jongo vs (DBObject) JSON.parse

Czy istnieje przewaga wydajności?

@Override 
public List<T> getEntityList(Integer limit, String query) throws Exception { 
    log.entering(DaoImpl.class.toString(), "getEntityList, with criteria of " + query); 
    DBObject criteriaObject = null; 
    ArrayList<T> list = new ArrayList<T>(); 

    if (query != null) 
     criteriaObject = (DBObject)JSON.parse(query); 

    DBCursor cursor = null; 

    try { 
     if (criteriaObject != null) { 
      log.log(Level.FINEST, "getting the objects using a search criteria: " + criteriaObject); 
      cursor = MongoDB.getInstance().getCollection(collection).find(criteriaObject); 
     } else { 
      log.log(Level.FINEST, "getting the objects without a criteria"); 
      cursor = MongoDB.getInstance().getCollection(collection).find(); 
     } 

     ............etc, etc, etc 

Dzięki!

Odpowiedz

2

Jongo .3 unmarshalls Zapytanie Mongo z tym samym JSON.parse(query). Zaletą jest sposób uzyskiwania wyników z bazy danych. W twoim przykładzie musisz przejść przez kursor, dostosowując każdą właściwość i pod-własność przez siebie.

DBObject dbo = JSON.parse("{age: 18}"); 
DBCursor results = users.find(dbo); 
for (DBObject result : results) { 
    User user = new User(); 
    user.setUsername((String) result.get("username")); 
    user.setAge((Integer) result.get("age")); 
    user.setAddress(new Address(..)); 
} 

Z Jongo bezpośrednio manipulować obiektami: wydajność

Iterable<User> users = collection.find("{age: 18}").as(User.class); 

Jongo jest prawie równa kierowcy.

+0

Używam gsona, aby anulować odpowiedź, więc nie muszę osobiście ustawiać każdej nieruchomości. Jongo również iteruje przez każdy wynik i odrzuca go za pomocą JSON. To nie jest problem: nowy DomainConverter (clazz) .getObject (entity.toString()) – Vladimir

+0

Użyłeś GSON, aby usunąć reakcję DBCursora? Czy możesz pokazać pełny przykład kodu? Zespół Jongo ciężko pracował, aby uczynić ten etap "niania" tak wydajnym, jak kierowca; czy obliczyłeś wydajność swojego rozwiązania? –

+0

Nie odejmuję kursora, a DBObject (y) zwracane przez kursor. – Vladimir

1

Oto lista kilku zalet korzystania jongo:

  • Prawie wszystkie pytania można matrycy:

    friends.find("{name:#, age:#}", "Joe", 18) 
    
  • zbindowanych parametry można BSON prymitywów lub dowolny złożony typ:

    friends.find("{address: #}", new Address(..)); 
    
  • Wysyłanie zapytań i rozpoczynanie misji jest tak szybkie, jak w przypadku kierowcy. Żaden proces Jackson dodatkowy koszt
  • Zastosowanie Jackson dysponuje na mapie Pojo: polimorfizm JsonView ...

BTW Twój GSON un/naziemnego mogą być zintegrowane Jongo poprzez wdrożenie Mapper.

+0

Templating upraszcza niektóre rzeczy, ale nadal nie widzę tego, aby był wystarczająco dobrym powodem, aby przejść na jongo - można to łatwo osiągnąć, zastępując ciąg. Tak czy inaczej, jeśli nikt inny nie udzieli lepszej odpowiedzi, przyjmę twoją. – Vladimir

Powiązane problemy