Einer der appropriate uses für sqlite3 ist "In-Memory-Datenbanken". Das klingt nach einem wirklich nützlichen Werkzeug für meine C++ Anwendungen. Hat jemand ein Beispiel dafür, wie das in C oder C++ gemacht wird? Ich suche speziell nach einer kanonischen Methode, mehrere Flat-Files in eine In-Memory-Datenbank zu schlürfen und dann einige Joins durchzuführen.Wie erstelle ich eine sqllite3 In-Memory-Datenbank?
Antwort
Es ist eigentlich ziemlich einfach. Geben Sie einfach ': memory:' als Datenbank-Dateinamen an, wenn Sie eine Datenbank mit der C/C++ - API öffnen. Es ist eine besondere Konstante, die der Motor erkennt. Dasselbe gilt auch für andere Sprachen wie Python oder Ruby, da sie normalerweise nur die C/C++ - API umschließen. Vollständige Details finden Sie unter http://sqlite.org/c3ref/open.html.
Öffnen Sie einfach die Datei: Speicher: und das sollte es tun (zumindest tut es in PHP).
Sie erwähnen, dass Sie mehrere flache Dateien einlesen und Joins auf ihnen durchführen möchten. Wenn es möglich ist, die flachen Dateien als SQLite-Datenbanken zu speichern, können Sie direkt mit beiden arbeiten von einem zum anderen Befestigung:
ATTACH foo.db AS foo
auf die Tabellen in foo beziehen sich dann etwa so:
SELECT * FROM foo.users
Diese So können Sie Ihre Joins erstellen, ohne eine In-Memory-Datenbank erstellen zu müssen.
Wenn Sie möchten, dass SQLite keine temporären Dateien als Journale verwendet, möchten Sie beispielsweise keine andere Dateiaktivität als manuell eine Verbindung anfordern, trennen, anhängen oder trennen. Verwenden Sie dann die folgenden zwei Pragmas zur Laufzeit, nachdem Sie eine Verbindung zu Ihrer Datenbank ": memory:" hergestellt haben.
PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;
Vom docs.