2016-01-29 28 views
23

Google ChromeのIndexedDBを使用して、クライアント側でデータを保持したいと考えています。Google ChromeのIndexedDB/LevelDBファイルにアクセスするには?

アイデアは、後でNode.JS経由でchrome以外のIndexedDBにアクセスすることです。 バックグラウンドは、サーバーのバックエンドなしで後で分析できるように、ローカルで使用状況を追跡し、収集したデータをクライアントに保存するという考えです。

私の理解では、indexedDBはLevelDBとして実装されています。しかし、私はLevelUp/LevelDownleveldb-jsonのようなツール/ライブラリのどれでもlevelDBを開くことができません。

私はいつも、このエラーメッセージが出てい:

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 

は誰も助けてくださいことはできますか? Chromeの実装が何らかの形で特別なものであるかのように見えます。

+0

私はChromeでlocalstorageを使用することになりました。これは通常のSQLiteデータベースを使用しています。 – Chris

+0

もう1つの選択肢は、おそらくサービスワーカーを使用して、ブラウザ自体で後の処理を行うことです。 – kichik

答えて

23

leveldbのキーは任意のバイナリシーケンスです。クライアントはcomparatorsを実装してキー間の順序付けを定義します。 leveldbのdefault comparatorstrncmpに相当します。インデックス付きDBのストア用のChromeのコンパレータは複雑です。あなたが作成したのとは違った比較器でleveldbインスタンスを使用しようとすると、一見無作為な順序でキーが観察されます。挿入が予測できないか、破損する可能性があります - 犬と猫が一緒に暮らしています。 leveldbを使用するとコンパレータの名前をデータベースに保存し、この間違いを検出して回避することができます。これはあなたが見ているものです。 Chrome's code names its comparator for Indexed DB "idb_cmp1"

クロムの外でChromeのIndexed DB leveldbインスタンスの1つを検査するには、互換性のあるコンパレータを実装する必要があります。このコードは、Chromeのコンテンツ実装/ browser/indexed_db/indexed_db_backing_store.ccに実装されていますが、これがバージョン間で固定されているという保証はありません。 (もちろん、下位互換性は別として)

+0

nodeeds内のIndexedDBはすばらしいでしょう! –

+0

問題の詳細な説明については、Joshuaに感謝します!私が達成しようとしていることについては、これは私に必要なコンパレータを再実装するには多すぎる努力です。しかし、よく確立された洞察力を提供してくれてありがとう! – Chris

関連する問題