2013-02-08 2 views
18

Für eine unserer Insights-Plattform planen wir, zusammenfassende SQLite3-Datenbanken im Hintergrund zu generieren und diese im Browser als Diagramme darzustellen. Gegenwärtig beabsichtigen wir einen serverseitigen Endpunkt, der die Datenanforderung bedienen wird.Was ist der beste Weg, um Sqlite3 direkt im Browser mit Javascript zu lesen?

Wir versuchen, dies weiter zu optimieren, indem wir den serverseitigen Endpunkt vollständig eliminieren. Uns ist es gut (aus Sicherheitsgründen), die SQLite3 direkt auf S3 verfügbar zu machen und ein JavaScript-Modul zu lesen und die Diagramme zu generieren.

Die SQLite3-Dateien werden zu recht klein erwartet - vielleicht 4-6 Spalten und vielleicht 10-500 Zeilen von Daten, und alle von ihnen enthalten nur eine Tabelle. Testläufe zeigen Dateigrößen von weniger als 15 KB an. Wir beabsichtigen nicht, SQLite3 im Browser zu schreiben oder zu manipulieren. Wir müssen es nicht im Browser als WebSQL- oder IndexedDB-Formular zwischenspeichern, aber wir sind in Ordnung, wenn Sie es verwenden, wenn das erforderlich ist.

Von meinen Web-Suchen können wir keine Javascript-Bibliothek finden, die eine SQLite3-Datei lesen und nach Ergebnissen abfragen kann. Wenn Sie JavaScript-Bibliotheken kennen, die das können, lassen Sie es uns bitte wissen.

Auf der anderen Seite, wenn Sie denken, dass wir das aus irgendeinem Grund nicht tun sollten, dann werfen Sie sie bitte als Kommentare/Antworten auch, weil dies etwas ist, das wir zum ersten Mal versuchen und ein wenig heraus zu sein scheint -of-Box, so Feedback willkommen!

+1

Dies kann nicht getan werden, indem du JavaScript direkt verwenden - jedoch WebSQL/IndexedDB * könnte * Verwendung SQLite unterhalb; aber das ist ein Implementierungsdetail. (SQLite * benötigt in den meisten Fällen einen * prozessintegrierten Zugriff auf ein [lokales] Dateisystem.) –

+0

.. und ich kann mir ein * vollständiges Umschreiben * einer Datenbank-Engine nicht vorstellen, die SQLite-Daten in JavaScript lesen kann (z. B. in Speicherdaten) nur) wäre sehr praktisch, aber [ich war schon vorher überrascht] (http://bellard.org/jslinux/). –

+0

@pst in Bezug auf Ihren ersten Kommentar, ja, ich weiß, dass sie SQLite darunter verwenden, aber von unserer Seite, es vom Server zu bringen und mit einem WebSQL/IndexedDB zu synchronisieren scheint zu viel Mühe und Tugh in der langen zu halten Lauf. – Shreeni

Antwort

3

Ich kann nicht das Beste sagen, aber eins: Schreiben Sie eine JavaScript SQLite-Reader-Bibliothek selbst. Das wird eine mühsame Aufgabe, aber ich bin mir sicher, dass es getan werden kann. Einige coole Leute haben pdf.js getan, das ist ein JavaScript-Renderer für PDF-Dateien, die auch binäre BLOBs wie SQLite files sind.

Sie werden höchstwahrscheinlich mit dem FileReader API starten, um durch die SQLite-Datei zu gehen, dann erstellen Sie einige In-Memory-Darstellung des Inhalts, die Ihr Diagramm-Tool verwenden kann.

Haftungsausschluss: Sie möchten wahrscheinlich Ihr erstes Problem mit einer anderen Lösung lösen, wie von anderen vorgeschlagen, aber das beantwortet Ihre Frage.

+4

Wurde getan (mit Emscripten obwohl) https://github.com/kripken /sql.js – Prinzhorn

+0

Nur Wow! ........... – Marcel

+0

Ich nehme @ Marcel's Antwort an, da es im Moment keine bessere Antwort zu geben scheint (für Clientseite JS). – Shreeni

12

Es gibt eine Javascript-Bibliothek namens sql.js, die genau das tun kann, was Sie wollen. In Ihrem Fall würden Sie es so, dass bei http://lovasoa.github.io/sql.js/documentation

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/path/to/database.sqlite', true); 
xhr.responseType = 'arraybuffer'; 

xhr.onload = function(e) { 
    var uInt8Array = new Uint8Array(this.response); 
    var db = new SQL.Databse(uInt8Array); 
    var contents = db.exec("SELECT * FROM my_table"); 
    // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}] 
}; 
xhr.send(); 

finden Sie in der Dokumentation

+1

+10. Dies ist die Lösung. lovasoas Commits wurden mit dem ursprünglichen sql.js zusammengeführt, unter https://github.com/kripken/sql.js. Das obige Beispiel muss nur auf eine Art modifiziert werden: Fügen Sie oben '' var SQL = window.SQL; 'hinzu (nachdem Sie die Datei sql.js hinzugefügt und natürlich' my_table' geändert haben). Funktioniert super (ich habe Chrome benutzt). –