Как получить доступ к файлам IndexedDB/LevelDB Google Chrome?

Я хочу использовать IndexedDB Google Chrome для сохранения данных на стороне клиента.

Идея состоит в том, чтобы позже получить доступ к IndexedDB за пределами Chrome через Node.JS. В основе лежит идея отслеживать поведение пользователей локально и сохранять собранные данные на клиенте для последующего анализа без серверной части.

Насколько я понимаю, indexedDB реализована как LevelDB. Однако я не могу открыть levelDB с помощью каких-либо инструментов/библиотек, таких как LevelUp/LevelDown или leveldb- json.

Я всегда получаю это сообщение об ошибке:

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 какая-то особенная/другая.


person Chris    schedule 29.01.2016    source источник
comment
В итоге я использовал localstorage в Chrome, который использует обычную базу данных SQLite, с которой было довольно легко работать.   -  person Chris    schedule 09.02.2016
comment
Другой вариант, возможно, заключается в использовании сервисного работника и выполнении последующей обработки в самом браузере.   -  person kichik    schedule 15.01.2018


Ответы (2)


Ключи в leveldb представляют собой произвольные двоичные последовательности. Клиенты реализуют компараторы для определения порядка ключей. компаратор по умолчанию для leveldb эквивалентен strncmp. Компаратор Chrome для хранилища Indexed DB более сложен. Если вы попытаетесь использовать экземпляр leveldb с компаратором, отличным от того, с которым он был создан, вы увидите ключи в, казалось бы, случайном порядке, вставка будет непредсказуемой или вызовет повреждение — собаки и кошки живут вместе, массовая истерия. Таким образом, leveldb позволяет вам назвать компаратор (сохраненный в базе данных), чтобы помочь обнаружить и избежать этой ошибки, которую вы видите. Кодовые названия Chrome компаратор для индексированной БД "idb_cmp1".

Чтобы проверить один из экземпляров leveldb Chrome Indexed DB за пределами Chrome, вам необходимо реализовать совместимый компаратор. Код находится в реализации Chrome по адресу content/browser/indexed_db/indexed_db_backing_store.cc — и обратите внимание, что нет гарантии, что это будет исправлено в разных версиях. (Кроме обратной совместимости, конечно)

person Joshua Bell    schedule 01.02.2016
comment
IndexedDB внутри среды nodejs будет потрясающим! - person Kyaw Tun; 03.02.2016
comment
спасибо Джошуа за это подробное описание вопроса! Для того, чего я пытаюсь достичь, для меня слишком много усилий, чтобы повторно реализовать необходимый компаратор. Но спасибо за обоснованное понимание! - person Chris; 09.02.2016
comment
Есть идеи, изменилось ли что-нибудь за последние три года? - person iMoses; 30.06.2019

Он уже реализован и доступен на github.

person daisy    schedule 06.03.2021