web-dev-qa-db-ja.com

Google ChromeのIndexedDB / LevelDBファイルにアクセスする方法は?

Google ChromeのIndexedDBを使用して、クライアント側でデータを永続化したいと考えています。

アイデアは、後でNode.JSを介してChromeの外部でIndexedDBにアクセスすることです。背景は、使用状況の動作をローカルで追跡し、収集したデータをサーバーバックエンドなしで後で分析するためにクライアントに保存するという考えです。

私の理解では、indexedDBはLevelDBとして実装されています。ただし、 LevelUp / LevelDown または leveldb-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=の実装は、どういうわけか特別/異なるようです。

34
Chris

Leveldbのキーは任意のバイナリシーケンスです。クライアントは comparators を実装して、キー間の順序を定義します。 leveldbの デフォルトコンパレータ は、strncmpと同等のものです。インデックス付きDBのストアに対するChromeのコンパレーターはより複雑です。一見ランダムな順序でキーを観察することで作成されたものとは異なるコンパレーターでleveldbインスタンスを使用しようとすると、挿入は予測不可能であるか、破損を引き起こします-犬と猫が一緒に住んでいる、大量のヒステリー。したがって、leveldbを使用すると、(データベースに保持される)コンパレーターに名前を付けて、このエラーを検出して回避することができます。 Chromeのコードでは、インデックス付きDBのコンパレータに名前を付けています "idb_cmp1"。

chromeの外でChromeのインデックス付きDB leveldbインスタンスの1つを検査するには、互換性のあるコンパレータを実装する必要があります。コードは、content/browser/indexed_db/indexed_db_backing_store.ccにあるChromeの実装にあります。これがバージョン間で修正される保証はありません(もちろん、後方互換性は別として)

39
Joshua Bell