2009-04-18 16 views

Antwort

4

SQLite schon hat seinen eigenen Cachen, die als etwas effizienter sein dürfte Sie implementieren können - Sie können here über die Schnittstelle lesen. Sie könnten an anderen Optimierungen interessiert sein - es gibt eine FAQ here.

1

zur Kasse wollen Da SQLite Transaktions ist, stützt sie sich auf fsync einen bestimmten Satz von Anweisungen abgeschlossen haben, um sicherzustellen, wenn eine Transaktion festgeschrieben wird. Die Geschwindigkeit und Implementierung von fsync variiert von Plattform zu Plattform.

Durch Stapelverarbeitung mehrerer Anweisungen innerhalb einer Transaktion können Sie die Geschwindigkeit erheblich erhöhen, da mehrere Datenblöcke geschrieben werden, bevor fsync aufgerufen wird.

Ein älterer sqlite Artikel here veranschaulicht diesen Unterschied zwischen mehreren INSERTs innerhalb und außerhalb von Transaktionen.

Wenn Sie jedoch eine Anwendung schreiben, die gleichzeitig auf Daten zugreifen muss, beachten Sie, dass alle Lesevorgänge (SELECT-Anweisungen) blockiert werden, wenn sqlite eine Schreibtransaktion startet. Möglicherweise möchten Sie Ihren Zwischenspeicher im Cache verwenden, um Daten abzurufen, während eine Schreibtransaktion stattfindet.

Mit diesem gesagt, ist es auch möglich, dass sqlite Caching-Schema das für Sie behandeln wird.

0

Warum möchten Sie das tun? Hast du Probleme mit der Leistung? Oder möchten Sie verhindern, dass andere Verbindungen Daten sehen, bis Sie sie auf den Datenträger übertragen?

In Bezug auf die Synchronisierung mit der Festplatte gibt es einen Kompromiss zwischen Datenbankintegrität und Geschwindigkeit. Was du willst, hängt von deiner Situation ab.

  1. Transaktionen verwenden. Vorteile: Hohe Zuverlässigkeit und einfach. Nachteile: Sobald Sie eine Transaktion starten, kann niemand sonst in die Datenbank schreiben, bis Sie COMMIT oder ROLLBACK. Dies ist normalerweise die beste Lösung. Wenn Sie viel Arbeit auf einmal erledigen müssen, beginnen Sie eine Transaktion, schreiben Sie alles, was Sie brauchen, und dann COMMIT. Alle Ihre Änderungen werden im RAM zwischengespeichert, bis Sie COMMIT, zu welcher Zeit die Datenbank explizit auf Festplatte synchronisiert wird.

  2. Verwenden Sie PRAGMA journal_mode=MEMORY und/oder PRAGMA synchronous=OFF. Vorteile: Schnell und einfach. Nachteile: Die Datenbank ist nicht mehr sicher gegen Stromausfall und Programmabstürze. Sie können Ihre gesamte Datenbank mit diesen Optionen verlieren. Sie vermeiden jedoch eine häufige explizite Synchronisierung mit dem Datenträger.

  3. Schreiben Sie Ihre Änderungen an eine in-memory database und manuell synchronisieren, wenn Sie möchten. Vorteile: Hohe Geschwindigkeit und Zuverlässigkeit. Nachteile: Kompliziert, und ein anderes Programm kann in die Datenbank schreiben, ohne dass Sie davon wissen. Wenn Sie in eine In-Memory-Datenbank schreiben, müssen Sie nie erst auf die Festplatte synchronisieren.Andere Programme können in die Datenbankdatei schreiben, und wenn Sie nicht vorsichtig sind, können Sie diese Änderungen überschreiben. Diese Option ist wahrscheinlich zu kompliziert, um es wert zu sein.

+1

Hallo, Ich möchte diese Datenbank in meinem arm9 Embedded Linux verwenden platform.Here i für die Daten storing.Flash Speicher einen Flash-Speicher bin mit habe eine Ausgabe von Schreib cycles.So i wrte wollen RAM und nachdem ich den ram gefüllt habe, möchte ich ihn auf die datenbank spülen.wie kann ich das implementieren? Irgendwelche probencodes oder irgendein dokument, das ich bekommen kann? –

Verwandte Themen