代码之家  ›  专栏  ›  技术社区  ›  Joey Yi Zhao

如何计算Chrome中的索引数据库表大小?

  •  0
  • Joey Yi Zhao  · 技术社区  · 6 年前

    我正在使用 pouchDB IndexedDB 在Chrome浏览器上的适配器,我想计算每个数据库的大小。我使用的代码来自 https://github.com/jonnysmith1981/getIndexedDbSize/blob/master/getIndexedDbSize.js 做计算。

    我发现数据库的总大小远远大于webkit临时存储的使用量。

    下面的屏幕截图是我的应用程序使用的总存储空间(255MB)。

    enter image description here

    您将看到有5个数据库保存在 索引数据库 . 下面的输出是每个数据库大小的计算结果。您将看到总大小约为389MB。我想知道他们为什么大不相同。哪一个是正确的?

    --------- _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
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Joshua Bell    6 年前

    索引数据库API没有提供查询数据库(或存储/索引)大小的方法。将键和值转换为字节也是浏览器执行的操作,脚本不可见。因此,脚本必须做一个近似,例如在序列化为字符串时计算存储区中所有键和值的大小。

    chrome中的索引数据库实现使用了一个名为leveldb的后备存储,它具有各种大小优化,例如使用另一个名为“snappy”的库进行键前缀压缩和值压缩。字符串也可以以多种方式序列化为字节(例如,js字符串为每个字符16位,可以天真地存储为每个字符2字节,或者将utf-8编码为每个字符1-4字节)。当数据被删除或覆盖时,备份存储也会缓慢地压缩,因此它可能最终占用的空间超过临时需要的空间。

    这些优化都没有对脚本可见,所有都会改变交叉浏览器,所以近似将是…近似。考虑到所有这一切,估计浏览器的95MB和255MB的浏览器是相当不错的!

    在Chrome中,我们正在试验一种通过类型报告的每种类型的故障。 navigator.storage.estimate() 为每种存储类型提供确切值的API(例如,索引数据库vs.缓存vs…),尽管它仍然不会提供每数据库或每对象存储值。