Quali sono alcune best practice da tenere a mente quando si lavora ampiamente con SQLite su iPhone? Suggerimenti/trucchi/fattori di convenienza tutti apprezzati.Le migliori pratiche SQLite su iPhone
risposta
Posso consigliare l'utilizzo di FMDB come un bel wrapper Cocoa SQLite.
Fuori della parte superiore della mia testa:
- utilizzare le transazioni.
- Assicurati che SQL sfrutti le tabelle nello correct order.
- Non aggiungere indici di cui non sei sicuro di aver bisogno.
Forse non solo specifico per iPhone ma per dispositivi integrati ci sono alcuni ottimi consigli here.
Questo link appartiene a una versione precedente di SQLite ma risulta comunque utile.
Infine questo Stack Question ha anche alcune buone informazioni.
Utilizziamo SQLite con un'applicazione .Net Compact Framework al momento e le prestazioni sono fantastiche e abbiamo dedicato un po 'di tempo all'ottimizzazione, ma non quasi quanto potevamo.
Buona fortuna.
Misura l'ingombro della memoria della tua app e cerca eventuali perdite negli strumenti. Poi provarlo dopo aver richiamato sqlite3_exec con:
pragma cache_size=1
e/o
pragma synchronous=0
YMMV. Ci sono rapporti di aumenti delle prestazioni, grandi riduzioni nell'utilizzo della RAM e meno perdite. Tuttavia, fai attenzione a fare le regolazioni senza comprenderne l'impatto (ad esempio, synchronous
disattiva lo svuotamento che accelera di molto le cose, ma può causare danni al DB se il telefono viene spento e riacceso al momento sbagliato).
Maggiori informazioni qui: http://www.sqlite.org/pragma.html
+1 per questo cache_size può consumare un bel po 'di memoria su iphone e mi ci è voluto un po 'prima di aver trovato questo. – paulthenerd
ho scoperto che è spesso più veloce per ottenere solo gli ID che cerco in una query complessa e quindi ottenere il resto delle informazioni su richiesta.
Così, per esempio:
SELECT person_id
FROM persons
WHERE (complex where clause)
e poi come viene visualizzato ogni persona Corro
SELECT first_name, last_name, birth_date, ...
FROM persons
WHERE person_id = @person_id
Io di solito trovare questo rende il complesso query eseguita in 1/2 del tempo e le ricerche per una determinata persona sono in genere dell'ordine di 2 ms (questo è su tabelle con righe 17k).
La tua esperienza può variare e dovresti cronometrare le cose da solo.
Inoltre, devo dare credito a Wil Shipley per aver suggerito questa tecnica nel suo discorso qui: http://www.vimeo.com/4421498.
Uso effettivamente il modello di idratazione/disidratazione ampiamente dai sqlitebook che è un superset di questa tecnica.
Io sono pigro e piace a bastone nel codice di base, per quanto possibile, quindi mi piacciono le SQLitePersistentObjects strumento ORM:
http://code.google.com/p/sqlitepersistentobjects/
fate i vostri oggetti del modello del dominio ereditano da SQLitePersistentObject (ok un po ' invadente) e quindi puoi persistere/recuperare i tuoi oggetti secondo necessità.
a persistere:
[person save];
caricarla di nuovo in è quasi facile. Qualsiasi oggetto persistibile ottiene i metodi dinamici della classe aggiunti per consentire la ricerca. Quindi, potremmo recuperare tutti gli oggetti Person che avevano un cognome "Rossi" in questo modo:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
Un altra opzione che non ho ancora provato è Core Data (necessità di essere un iPhone Dev Apple), anche se la sua una caratteristica 3.0 e quindi dipende dalla vostra applicazione se questo è un'opzione ..
Tutte le richieste di app attuali richiedono di essere compilate con l'SDK 3.0, quindi direi che Core Data è probabilmente l'opzione migliore. –
A quanto ho capito, la presentazione non ha bisogno di essere compilata con 3.0, sarà solo testata contro di essa: "tutte le comunicazioni all'App Store saranno esaminate sull'ultima versione beta di iPhone OS 3.0. compatibile con iPhone OS 3.0, non sarà approvato. " –
PLDatabase è un'alternativa FMDB: http://code.google.com/p/pldatabase/
ho usato in uno dei miei progetti senza alcun problema.
- 1. Le migliori pratiche? iphone: sincronizzazione dati
- 2. Extend app per iPhone 5 - le migliori pratiche
- 3. Gulpfile.js guardano le migliori pratiche
- 4. Le migliori pratiche per le connessioni mobili persistenti su Android?
- 5. Le migliori pratiche sull'uso asincrona/attendono
- 6. Migliori pratiche .NET per le connessioni MongoDB?
- 7. Le migliori pratiche per il modello DAO?
- 8. migliori pratiche con le sessioni (Gorilla/sessioni)
- 9. Le migliori pratiche per l'API stored procedure?
- 10. Le migliori pratiche per l'utilizzo di window.onload
- 11. Ansible migliori pratiche per copiare le directory
- 12. Quali sono le migliori pratiche MEF?
- 13. Email che invia le migliori pratiche?
- 14. Partecipanti reattivi a Meteor: le migliori pratiche?
- 15. PHP include le migliori pratiche sull'estensione file
- 16. Le migliori pratiche sulla associazione vuoto belongs_to
- 17. L'unità Sencha Touch prova le migliori pratiche?
- 18. WPF themeing migliori pratiche
- 19. CSS Outline migliori pratiche
- 20. interfaccia Java migliori pratiche
- 21. Migliori pratiche del database
- 22. OpenGL VAO migliori pratiche
- 23. .htaccess migliori pratiche
- 24. Guida alle migliori pratiche: Swing
- 25. migliori font size pratiche per il mobile
- 26. Migliori pratiche di test di integrazione
- 27. Migliori pratiche Android - visualizzazioni/attività
- 28. Codifica delle migliori pratiche C++
- 29. Django Rest Framework: migliori pratiche?
- 30. Le migliori pratiche per interrogare il database SQLite in ListFragment con CursorLoader?
Sei sicuro che sia privo di memoria, sicuro da usare, ecc.? Certamente non è completo e apparentemente non supportato. Dico, vado con CoreData e sintonizzo le prestazioni quando (se) si fa male – melfar
Durante la revisione delle mie app per perdite, non ho mai trovato nessuno all'interno della libreria. – pgb
Questo potrebbe essere un link migliore http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb –