Moinsen,
eine App von mir, wo eine SQLite Datenbank im Mittelpunkt steht, ist über Jahre immer weiter gewachsen. Jetzt kommt der Zeitpunkt, wo ich mir über die Performance weitere Gedanken machen muss, einige DB-Funktionen wurden in verschiedene Threads ausgelagert.
Ich gehen von folgende Vorraussetzungen aus:
- Die App ist sandboxed
- Es wird nur die SQLite C API benutzt
- Die Datenbank ist sozusagen ein Dokument, welches der Nutzer frei wählen kann.
- Ca. 95% der Zugriffe sind nur lesend
- Verschiedene Threads benötigen Zugang
- Liegt die Datei im App Container, kann der WAL Mode genutzt werden, außerhalb nur der Memory Mode.
- Im Memory Mode können mehrere Threads lesend auf die DB zugreifen, oder es kann ein einzelner Scheibvorgang stattfinden.
- Im WAL Mode können mehrere Threads lesend auf die DB zugreifen und es kann zusätzlich ein einzelner Schreibvorgang stattfinden.
Um zu verhindern, dass mehrere Threads unerlaubter Weise zugreifen, teste ich z.Z. NSLock. Das funktioniert sicher, vergebe damit aber die Möglichkeit des parallelen Lesezugriffs.
Jetzt meine Frage: Ist der Einsatz von NSLock hier sinnvoll?
eine App von mir, wo eine SQLite Datenbank im Mittelpunkt steht, ist über Jahre immer weiter gewachsen. Jetzt kommt der Zeitpunkt, wo ich mir über die Performance weitere Gedanken machen muss, einige DB-Funktionen wurden in verschiedene Threads ausgelagert.
Ich gehen von folgende Vorraussetzungen aus:
- Die App ist sandboxed
- Es wird nur die SQLite C API benutzt
- Die Datenbank ist sozusagen ein Dokument, welches der Nutzer frei wählen kann.
- Ca. 95% der Zugriffe sind nur lesend
- Verschiedene Threads benötigen Zugang
- Liegt die Datei im App Container, kann der WAL Mode genutzt werden, außerhalb nur der Memory Mode.
- Im Memory Mode können mehrere Threads lesend auf die DB zugreifen, oder es kann ein einzelner Scheibvorgang stattfinden.
- Im WAL Mode können mehrere Threads lesend auf die DB zugreifen und es kann zusätzlich ein einzelner Schreibvorgang stattfinden.
Um zu verhindern, dass mehrere Threads unerlaubter Weise zugreifen, teste ich z.Z. NSLock. Das funktioniert sicher, vergebe damit aber die Möglichkeit des parallelen Lesezugriffs.
Jetzt meine Frage: Ist der Einsatz von NSLock hier sinnvoll?