2016-11-23 3 views
0

Also mit iMessages herumspielen und über Wege nachdenken, sie zu sichern und verschiedene Dinge.iMessage App-Speicherort - warum wird chat.db-wal sofort aktualisiert, aber chat.db dauert eine Weile?

Ich fand ihren Standort bei ~/Library/Messages.

Es gibt drei Dateien

1. chat.db 
2. chat.db-wal 
3. chat.db-shm 

Wenn ich führen ein Knoten-Skript, das für Dateiänderungen beobachtet, während eine iMessage an jemanden zu senden ich chat.db-wal sehen geändert wird sofort aber chat.db dauert eine Weile zu aktualisieren .

Ich möchte die Nachrichten so schnell wie möglich erhalten, aber ich bin mir nicht sicher, ob ich die .db-wal-Datei lesen kann. Wer weiß, ob ich diese Datei lesen kann? Oder warum dauert die Aktualisierung der .db-Datei länger?

Danke.

Antwort

2

Alles ist in Ordnung. Deine Daten sind da. So funktioniert SQLite.

Um ACID-Transaktionen zu unterstützen, bei denen Ihre Daten im Falle von Abstürzen oder Stromausfällen garantiert ordnungsgemäß gespeichert werden, schreibt SQLite Ihre Daten zuerst in ein "Write-Ahead-Protokoll" (die *-wal-Datei). Wenn die Datenbank ordnungsgemäß geschlossen wird oder das Vorausschreibprotokoll zu voll wird, aktualisiert SQLite die Datenbankdatei mit dem Inhalt des Protokolls.

SQLite liest beim Lesen zuerst das Write-Ahead-Protokoll, auch wenn mehrere Verbindungen dieselbe Datenbank verwenden. Die Daten im Protokoll befinden sich immer noch in der Datenbank.

SQLite sollte das Protokoll beim Schließen der Datenbank auf die Datenbank anwenden. Ist dies nicht der Fall, können Sie PRAGMA wal_checkpoint; ausführen, um die Protokolldatei manuell zu überprüfen.

Korollar: löschen Sie nicht die Datei -wal, vor allem, wenn Sie die Datenbank beim letzten Mal nicht sauber geschlossen haben.

Mehr Informationen über Wal-Prinzip in SQLite in the SQLite documentation.

finden
Verwandte Themen