2016-01-29 23 views
23

Desidero utilizzare IndexedDB di Google Chrome per mantenere i dati sul lato client.Come accedere ai file IndexedDB/LevelDB di Google Chrome?

L'idea è accedere a IndexedDB all'esterno di chrome, tramite Node.JS, in seguito. Lo sfondo è l'idea per tenere traccia del comportamento di utilizzo localmente e archiviare i dati raccolti sul client per un'analisi successiva senza un back-end del server.

Dalla mia comprensione, il file indexedDB è implementato come LevelDB. Tuttavia, non posso aprire il livello DB con nessuno degli strumenti/librerie come LevelUp/LevelDown o leveldb-json.

che sto ottenendo sempre questo messaggio di errore:

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 

Qualcuno può per favore aiuto? Sembra che l'implementazione di Chrome sia in qualche modo speciale/diversa.

+0

Ho finito con l'utilizzo di localstorage in Chrome, che utilizza un normale database SQLite, che era piuttosto facile da usare. – Chris

+0

Un'altra opzione è forse l'utilizzo di un operatore del servizio e l'elaborazione successiva nel browser stesso. – kichik

risposta

23

Le chiavi in ​​leveldb sono sequenze binarie arbitrarie. I client implementano comparators per definire l'ordine tra le chiavi. Il default comparator per leveldb è qualcosa di equivalente a strncmp. Il comparatore di Chrome per l'archivio del DB indicizzato è più complicato. Se provi a usare un'istanza di leveldb con un comparatore diverso da quello con cui hai creato osserverai le chiavi in ​​ordine apparentemente casuale, l'inserimento sarebbe imprevedibile o causerebbe corruzione - cani e gatti che vivono insieme, isteria di massa. Quindi leveldb ti consente di nominare il comparatore (persistente nel database) per aiutare a rilevare ed evitare questo errore, che è ciò che stai vedendo. Chrome's code names its comparator for Indexed DB "idb_cmp1".

Per ispezionare una delle istanze di leveldb DB Indexed di Chrome al di fuori di Chrome, è necessario implementare un comparatore compatibile. Il codice risiede nell'implementazione di Chrome su content/browser/indexed_db/indexed_db_backing_store.cc e non c'è alcuna garanzia che questo sia corretto tra le versioni. (A parte la retrocompatibilità, ovviamente)

+0

IndexedDB all'interno dell'ambiente nodejs sarà fantastico! –

+0

grazie Joshua per questa descrizione dettagliata della questione! Per quello che sto cercando di ottenere, è un po 'troppo impegnativo per me reimplementare il comparatore necessario. Ma grazie per aver fornito una visione ben fondata! – Chris