J'ai une application utilisant SQLite3. Il fonctionne plutôt bien, mais j'aimerais avoir des suggestions sur l'accélération de l'accès SQLite (écriture). La plupart des opérations de base de données écrivent des triplets (int, int, double) de nombres, environ 20-50 triplets par seconde. Il y a une lecture occasionnelle, mais est à peu près aussi rare que les dents de poule (se produit principalement sur le chargement seulement).Optimiser SQLite3 sur iPhone
Est-ce que quelqu'un a des suggestions sur l'optimisation (ou la désimpression du code)? Tous les raccourcis SQLite3 que j'ai manqués? (L'utilisation de CoreData est due à d'autres éléments du programme.)
Je prépare l'instruction st1 pendant l'initialisation. Il est préparé à partir de
const char *sql = "insert into historic values (?, ?, ?)";
if (sqlite3_prepare_v2(database, sql, -1, &st1, NULL) == SQLITE_OK) ....
Cette préparation est à usage unique. L'extrait que j'utilise pour enregistrer est ci-dessous (j'ai supprimé l'erreur de vérification ici pour plus de clarté).
-(BOOL) saveHvalue:(int) fid time:(int) t value:(double) v type:(int) ftype
{
{
sqlite3_bind_int(st1, 1, fid);
sqlite3_bind_int(st1, 2, t);
sqlite3_bind_int(st1, 3, ftype);
sqlite3_step(st1);
sqlite3_reset(st1);
sqlite3_clear_bindings(st1);
}
return YES;
}
Je vais essayer. Merci. –
Cela a amélioré ma vitesse par des ordres de grandeur !! Merci! –
Bien sûr, si vous traitez 500 enregistrements à la fois et que vous insérez 50/sec, vous perdez (au plus) 10 secondes de données (je pense que les transactions non validées sont annulées si elles sont trouvées dans le journal?); mais cela pourrait ne pas être un gros problème pour votre application. – lapo