Jakie są najlepsze praktyki, o których należy pamiętać podczas intensywnej pracy z SQLite na iPhone'ie? Porady/wskazówki/czynniki wygody są mile widziane.Najlepsze praktyki SQLite na iPhonie
Odpowiedz
Mogę polecić używanie FMDB jako ładnej owijki SQLite kakao.
Off szczycie mojej głowie:
- wykorzystywać transakcje.
- Upewnij się, że SQL wykorzystuje tabele w correct order.
- Nie dodawaj indeksów, których nie masz całkowitej pewności.
Być może nie tylko specyficzne dla iPhone'a, ale również dla urządzeń wbudowanych są pewne wspaniałe wskazówki: here.
Ta link dotyczy starszej wersji SQLite, ale nadal jest przydatna.
Wreszcie ten Stack Question ma również pewne dobre informacje.
Obecnie używamy SQLite z aplikacją .Net Compact Framework, a jej wydajność jest fantastyczna, a my poświęciliśmy trochę czasu na optymalizację, ale nie na tyle, na ile mogliśmy.
Powodzenia.
Zmierz ślad pamięci swojej aplikacji i poszukaj nieszczelności w Instrumentach. Następnie spróbuj go po wywołaniu sqlite3_exec z:
pragma cache_size=1
i/lub
pragma synchronous=0
YMMV. Istnieją doniesienia o zwiększeniu wydajności, znacznej redukcji zużycia pamięci RAM i mniejszej liczbie wycieków. Należy jednak zachować ostrożność podczas wprowadzania poprawek bez zrozumienia wpływu (na przykład: synchronous
wyłącza spłukiwanie, co znacznie przyspiesza działanie, ale może spowodować uszkodzenie DB, jeśli telefon jest wyłączany w niewłaściwym czasie).
Więcej tutaj: http://www.sqlite.org/pragma.html
+1 dla tego cache_size może pochłonąć sporo pamięci iPhone'a i zajęło mi trochę czasu, zanim to znalazłem. – paulthenerd
odkryłem, że często po prostu szybciej uzyskać identyfikatory szukam w złożonym zapytaniu, a następnie dostać resztę informacji na żądanie.
Tak na przykład:
SELECT person_id
FROM persons
WHERE (complex where clause)
a następnie wyświetlana jest jako każda osoba będę uruchomić
SELECT first_name, last_name, birth_date, ...
FROM persons
WHERE person_id = @person_id
I zazwyczaj znaleźć to sprawia, że prowadzony przez kwerendy w 1/2 czasu i wyszukiwania dla danej osoby są zwykle rzędu 2ms (jest to na tabelach z 17 tys. wierszy).
Twoje wrażenia mogą się różnić i powinieneś zrobić sobie czas.
Muszę również podziękować Wil Shipley za zaproponowanie tej techniki w jego wykładzie: http://www.vimeo.com/4421498.
Używam w dużym stopniu wzorca nawodnienia/odwodnienia z sqlitebooków, który jest nadzbiorem tej techniki.
Jestem leniwy i lubi trzymać w kodzie rdzenia jak najwięcej, dlatego lubię SQLitePersistentObjects narzędzie ORM:
http://code.google.com/p/sqlitepersistentobjects/
dokonaniu modelu domeny obiekty dziedziczą SQLitePersistentObject (ok trochę natrętne), a następnie możesz zachować/odzyskać swoje obiekty w razie potrzeby.
utrzymują:
[person save];
Ładowanie go z powrotem jest prawie tak samo łatwe. Każdy obiekt, który można utrwalić, dostaje do niego dodane metody klasy dynamicznej, aby umożliwić wyszukiwanie. Tak więc, możemy odzyskać wszystkie obiekty osoby, które miały na nazwisko „Smith” tak:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
Jedna inna opcja jeszcze nie próbował to Core Data (trzeba być iPhone Dev Apple), choć jego 3,0 funkcja i tak to zależy od aplikacji, czy to jest to opcja ..
Wszystkie bieżące aplikacje wymagają złożenia przy użyciu pakietu SDK 3.0, więc powiedziałbym, że Core Data to prawdopodobnie najlepsza opcja. –
Rozumiem, że zgłoszenie nie musi być tworzone w wersji 3.0, tylko zostanie przetestowane przeciwko niemu: "wszystkie zgłoszenia do sklepu App Store zostaną sprawdzone na najnowszej wersji beta systemu iPhone OS 3.0. Jeśli przesłanie aplikacji nie ma miejsca kompatybilny z iPhone OS 3.0, nie zostanie zatwierdzony. " –
PLDatabase jest alternatywą FMDB: http://code.google.com/p/pldatabase/
używałem go w jednym z moich projektów bez problemu.
- 1. Najlepsze praktyki testowania integracji
- 2. Najlepsze praktyki CoreData
- 3. Najlepsze praktyki fragmentów
- 4. Najlepsze praktyki scalania SVN
- 5. IBOutlet najlepsze praktyki
- 6. Najlepsze praktyki ASP.NET Security
- 7. Shared NSDateFormatter - najlepsze praktyki?
- 8. Najlepsze praktyki anulowania zadań:
- 9. Najlepsze praktyki LDAP
- 10. Najlepsze praktyki LinqToSql
- 11. Najlepsze praktyki dotyczące debugowania
- 12. OpenGL vào najlepsze praktyki
- 13. Android strings.xml Najlepsze praktyki?
- 14. Gulpfile.js oglądać najlepsze praktyki
- 15. Najlepsze praktyki wtrysku zależnego
- 16. Najlepsze praktyki ActionListener
- 17. DTO: najlepsze praktyki
- 18. CXF Wsdl2Java Najlepsze praktyki
- 19. Transakcje NHibernate Najlepsze praktyki
- 20. Najlepsze praktyki asynchronicznego Webrequestu
- 21. CSS Outline najlepsze praktyki
- 22. Najlepsze praktyki modelowania LDAP
- 23. C#: Najlepsze praktyki Debug.Print
- 24. Swagger Najlepsze praktyki
- 25. Najlepsze praktyki HttpRuntime.Cache
- 26. Najlepsze praktyki przechodzenia z Javy na Groovy
- 27. Rozszerzenia przeglądarki Firefox - najlepsze praktyki
- 28. Uwierzytelnianie usług sieciowych - najlepsze praktyki?
- 29. Właściwe wzorce użytkowania/najlepsze praktyki?
- 30. Standardy jQuery i najlepsze praktyki
Czy jesteś pewien, że jest wolny od wycieków pamięci, bezpieczny w użyciu itp.? Z pewnością nie jest kompletny i najwyraźniej nieobsługiwany. Mówię, idź z CoreData i dostroić wydajność, gdy (jeśli) robi się źle – melfar
Przeglądając moje aplikacje pod kątem przecieków, nigdy nie znalazłem żadnych wewnątrz biblioteki. – pgb
To może być lepszy link http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb –