Как рассчитать размер таблицы indexedDB в Chrome? - PullRequest
0 голосов
/ 02 апреля 2019

Я использую pouchDB с IndexedDB адаптером в браузере Chrome и хочу рассчитать размер базы данных каждого IndexedDB. Я использую код из https://github.com/jonnysmith1981/getIndexedDbSize/blob/master/getIndexedDbSize.js, чтобы сделать расчет.

Я обнаружил, что общий размер баз данных намного больше, чем использование временного хранилища webkit.

Ниже снимок экрана - общий объем памяти (255 МБ), используемый моим приложением.

enter image description here

Вы увидите, что в IndexedDB сохранено 5 баз данных. А ниже выводится результат расчета размера каждой базы данных. Вы увидите, что общий размер составляет около 389 МБ. Интересно, почему они совсем разные? Какой из них правильный?

--------- _pouch_products -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 86.7 MB
VM1633:51  - detect-blob-support    : 2 B
VM1633:51  - document-store : 92.3 MB
VM1633:51  - local-store    : 6.1 KB
VM1633:51  - meta-store : 96 B
VM1633:57 TOTAL: 179.0 MB

--------- _pouch_transactions -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 13.7 KB
VM1633:51  - detect-blob-support    : 2 B
VM1633:51  - document-store : 2.2 KB
VM1633:51  - local-store    : 4.2 KB
VM1633:51  - meta-store : 96 B
VM1633:57 TOTAL: 20.2 KB

--------- _pouch_products-mrview-4c294f20854f412a71c9e7cf2f9cc58f -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 11.9 MB
VM1633:51  - detect-blob-support    : 0 B
VM1633:51  - document-store : 35.3 MB
VM1633:51  - local-store    : 15.1 MB
VM1633:51  - meta-store : 136 B
VM1633:57 TOTAL: 62.3 MB

--------- _pouch_products-mrview-fdca57d512425c6ed0f20311a4f8d6d1 -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 86.2 MB
VM1633:51  - detect-blob-support    : 0 B
VM1633:51  - document-store : 44.2 MB
VM1633:51  - local-store    : 17.4 MB
VM1633:51  - meta-store : 136 B
VM1633:57 TOTAL: 147.7 MB
--------- _product_alerts -------------
VM1633:57 TOTAL: 0 B

1 Ответ

1 голос
/ 05 апреля 2019

API индексированных БД не позволяет запрашивать размер баз данных (или хранилищ / индексов).Перевод ключей и значений в байты также выполняется браузером и невидим для сценария.Таким образом, сценарий должен выполнять приближение, например, вычисляя размер всех ключей и значений в хранилище при сериализации в виде строк.

Реализация индексированной БД в Chrome использует хранилище резервных копий под названием leveldb, которое имеет различные оптимизации размера, такие как сжатие префикса ключа и сжатие значения с использованием другой библиотеки, называемой "snappy".Строки также могут быть сериализованы в виде байтов различными способами (например, строки JS имеют размер 16 бит на символ, который может быть наивно сохранен как 2 байта на символ или кодируется в кодировке UTF-8 до 1-4 байта на символ).Резервное хранилище также лениво сжимается при удалении или перезаписи данных, поэтому может потребоваться больше места, чем требуется временно.

Ни одна из этих оптимизаций также не видна скрипту, и все будут различаться в разных браузерах, поэтомуприближение будет ... приблизительным.Учитывая все это, оценка в 389 МБ по сравнению с 255 МБ, которую сообщает браузер, довольно хорошая!

В Chrome мы экспериментируем с разбивкой по типам, сообщаемой через API navigator.storage.estimate(), которая даст точныйзначение для каждого типа хранилища (например, индексированная БД против кэша и ...), хотя оно по-прежнему не будет давать значения для хранилища для базы данных или для объекта.

...