2016-01-29 16 views
23

Ich möchte die IndexedDB von Google Chrome verwenden, um Daten auf der Clientseite persistent zu machen.Zugriff auf die IndexedDB/LevelDB-Dateien von Google Chrome?

Idea ist der Zugriff auf die IndexedDB außerhalb von Chrome, über Node.JS, später. Der Hintergrund ist die Idee, das Nutzungsverhalten lokal zu verfolgen und die gesammelten Daten für eine spätere Analyse ohne Server-Backend auf dem Client zu speichern.

Aus meiner Sicht ist die indexedDB als LevelDB implementiert. Allerdings kann ich die LevelDB mit keiner der Tools/Bibliotheken wie LevelUp/LevelDown oder leveldb-json öffnen.

ich diese Fehlermeldung immer bekommen:

leveldb-dump-to-json --file test.json --db https_www.reddit.com_0.indexeddb.leveldb 

events.js:141 
    throw er; // Unhandled 'error' event 
     ^ OpenError: Invalid argument: idb_cmp1 does not match existing comparator : leveldb.BytewiseComparator 
     at /usr/local/lib/node_modules/leveldb- json/node_modules/levelup/lib/levelup.js:114:34 Christians-Air:IndexedDB 

Kann jemand bitte helfen? Es scheint, als ob die Chrome-Implementierung irgendwie speziell/anders ist.

+0

Ich habe am Ende Localstorage in Chrome verwendet, die eine normale SQLite-Datenbank verwendet, mit der ziemlich einfach zu arbeiten war. – Chris

+0

Eine andere Option ist vielleicht die Verwendung eines Service-Arbeiters und die spätere Verarbeitung im Browser selbst. – kichik

Antwort

23

Schlüssel in leveldb sind beliebige binäre Sequenzen. Clients implementieren comparators, um die Reihenfolge zwischen Schlüsseln zu definieren. Die default comparator für leveldb entspricht etwas strncmp. Der Komparator von Chrome für den Speicher der indizierten Datenbank ist komplizierter. Wenn Sie versuchen, eine leveldb-Instanz mit einem anderen Komparator zu verwenden, als mit dem sie erstellt wurde, werden Sie die Schlüssel in scheinbar zufälliger Reihenfolge beobachten. Das Einfügen wäre unberechenbar oder würde zu Korruption führen - zusammenlebende Hunde und Katzen, Massenhysterie. Mit leveldb können Sie also den Komparator benennen (in der Datenbank bleiben), um diesen Fehler zu erkennen und zu vermeiden. Chrome's code names its comparator for Indexed DB "idb_cmp1".

Um eine der indexierten DB leveldb-Instanzen von Chrome außerhalb von Chrome zu untersuchen, müssen Sie einen kompatiblen Vergleicher implementieren. Der Code befindet sich in der Chrome-Implementierung unter content/browser/indexed_db/indexed_db_backing_store.cc. Beachten Sie, dass es keine Garantie dafür gibt, dass dies in allen Versionen behoben wird. (Abgesehen von Rückwärtskompatibilität, natürlich)

+0

IndexedDB in nodejs Umgebung wird großartig sein! –

+0

danke Joshua für diese detaillierte Beschreibung der Sache! Für das, was ich zu erreichen versuche, ist dies ein bisschen zu viel Aufwand für mich, um den benötigten Komparator neu zu implementieren. Aber danke, dass Sie einen fundierten Einblick haben! – Chris