2012-07-13 10 views
11

Aktualnie mam aplikację, w której głównym problemem z wydajnością jest używanie opartej na plikach bazy danych składającej się z odpowiedzi JSON.Wybieranie projektu ORM dla systemu Android (min. Poziom API 7)

Chciałbym przerobić moją aplikację, aby korzystać z funkcji bazy danych SQLite.
Ponieważ jestem leniwy, chciałbym użyć jakiejś formy ORM.

Jak dotąd znalazłem tylko dwie wielkie biblioteki ORM:

Moim głównym celem jest wydajności raise na pracę z danymi tak jak możliwe

Ale znalazłem dwa możliwe problemy z tymi bibliotekami.

  • ORMLite wykorzystuje adnotacje, co jest dużym problemem wydajność w pre-plastra miodu powodu this bug

  • GreenDAO używa jakiś generator kodu, i że będzie zwalniać mnie na rozwoju, Musiałbym napisać generator, a następnie użyć wygenerowanego kodu. I nie podoba mi się ten pomysł.

  • db4o jest JPA, które zawsze uważane za powolny i ciężki na zużycie pamięci, dlatego nie nadają się do urządzeń low-end (pamiętaj Android API v7)


ad @ ChenKinnrot:
Szacowany ładunek powinien wystarczyć, aby myśleć o użyciu ORM.
W moim przypadku jest to około 25-30 unikalnych tabel i co najmniej 10 łączeń tabel (2 - 4 tabele na raz). Około 300-500 unikalne pola (kolumny)


Więc moje pytania to:

  1. powinienem używać ORM/WZP warstwy aplikacji w Android?
  2. Jeśli tak, to jakiej biblioteki poleciłbym używać? (i należy dodać kilka argumentów zbyt)
+0

Ile stołów mówimy? jak duże są twoje dane? –

+1

Po prostu dla zapisu, ORMLite obsługuje również konfigurację tabel dla typów, które działają w związku z problemami z wydajnością adnotacji. – Gray

+0

@ Dobrze jest usłyszeć, że jeśli jesteś zainteresowany, możesz wysłać odpowiedź z przykładem i porównaniem, ponieważ jesteś odpowiednią osobą, która powinna mieć te dane. –

Odpowiedz

4

Użyłem ORMLite i znalazłem to proste, gdy już się zawiesiłeś (kilka godzin), dość mocne i nie powodowało żadnych problemów z wydajnością (aplikacja testowana w Gingerbread na HTC i HTC Hero).

Będę używać go ponownie w każdym projekcie potrzebuję użyć DB dla.

+0

Podoba mi się, ale ponieważ JPA nie jest w pełni obsługiwany i warto wspomnieć, że będziesz musiał używać systemu adnotacji ormlite bardziej niż JPA. – Snicolas

+0

Czy istnieje również porównawcze porównanie innych bibliotek, takich jak SugarOrm? –

0

mam pewną wiedzę podzielić tak: ORM z definicji jest wolniejszy niż pisanie własnego sql, to przypuszczać, aby uprościć kodowanie dostępu do danych i zapewnienie ogólnego rozwiązania , generic = działa wolniej niż piszesz zapytania, jeśli dobrze znasz sql.

Prawdziwe pytanie brzmi: jak dobra wydajność chcesz uzyskać, jeśli jest to najlepsze możliwe, nie bierz pod uwagę struktury mapowania danych, tylko struktura generowania sql, która pomoże Ci szybciej pisać, ale daje Ci pełną kontrolę nad wszystkim .

Jeśli nie chcesz w pełni korzystać z db sq, użyj orm, nie mam doświadczenia z tym wspomniałem, więc nie mogę powiedzieć co wybrać.

A twój DB nie jest taki duży i złożony, więc czas, który zaoszczędzisz z orm, nie jest problemem.

2

Warstwa ORM jest atrakcyjna.

Jednak w praktyce piszę proste ORM samodzielnie lub używam paradygmatu Content Provider, który nie współpracuje dobrze z ORM.

Zajrzałem do niektórych istniejących bibliotek ORM (głównie ORMLite, activeAnroid), ale wszystkie mnie wystraszyły , ponieważ wydaje się, że nie są tak łatwe do rozpoczęcia.

„Mówimy o 25-30 unikatowe tabele, a co najmniej 10 tabel połączonych. Około 300-500 unikalne pola (kolumny)”

Jeśli trwałe i ograniczonych wzorców w jaki sposób dane będą sprawdzane, polecam napisanie ORM/sql.

Moje 2 centy.

1

Jeśli martwisz się o wydajność swojej aplikacji, polecam greenDAO. Oszczędzi ci to pisania wielu nudnych kodów, więc generowanie kodu nie powinno stanowić problemu. W zamian wygeneruje dla ciebie również jednostki i testy jednostkowe DB.

0

Z mojego doświadczenia wynika, że ​​miałem wiele korzyści z używania silników ORM. Jednak zdarzało się, że musiałem radzić sobie z problemami z wydajnością.

Musiałem załadować około 10 000 wierszy z bazy danych, a przy standardowej implementacji (korzystałem z ORMLite), trwało to około 1 minuty (zależy od procesora urządzenia).

Gdy trzeba odczytywać wiele danych z bazy danych, można wykonać zwykły SQL i samemu przeanalizować wyniki (w moim przypadku wystarczyło zapytać o 3 kolumny z tabeli). ORMLite pozwala również na pobieranie nieprzetworzonych wyników. W ten sposób wydajność wzrosła o 10 razy. Wszystkie 10 000 wierszy załadowano w 5 sekund lub mniej!

Powiązane problemy