【问题标题】:SQLite INTEGER optimizationSQLite INTEGER 优化
【发布时间】:2016-04-14 17:51:10
【问题描述】:

我正试图从一个 SQLite 数据库中去除一些额外的大小,我从我的一个 Web 服务拉到一个 iOS 应用程序。我正在做一些单独的测试,是什么让表格变得比实际更大。

我有一个包含大约 223k 条记录的价格表。通过仅将 2 个 REAL 列转换为 INTEGER * 100,已经让我的表大小恢复了 34%(以千字节为单位)。这实际上令人震惊..

因为我注意到这种荒谬的差异,所以我检查了只有 1 个表,其中 1 个 INTEGER 类型的列具有相同的 (223k) 记录。

这就是我注意到的(每次测试后我VACUUM):

  • 使用 NULL01 填充所有行会生成 1.9MB 的文件
  • 100 填充所有行会产生一个 2.1MB 的文件
  • 1000-10000 填充所有行会产生一个 2.4MB 的文件
  • 100000 填充所有行会产生一个 3.0MB 的文件
  • 使用10000000 填充所有行会产生一个 3.1MB 的文件

我真的觉得 INTEGER 字段类型的动态存在开销。没有更便宜的方法可以在 SQLite 中存储 int 值,或者这是唯一可以使用的最终游戏?

【问题讨论】:

    标签: database-design sqlite database-optimization


    【解决方案1】:

    您已经正确推断出 SQLite 的record format 中使用的内部存储类型。

    减少要通过网络下载的数据大小的最佳方法是压缩文件。

    【讨论】:

    • 是的,我已经使用了 gzip 压缩,这是一个重大的胜利,但我只是非常失望地因为仅仅整数而丢失了如此多的千字节。我强烈考虑使用 JSON 来绕过这个。
    • @Allendar JSON 也有可变长度整数,因为它们存储为文本。仅用于存储 223k 10000000s 的整数位就需要 1.7MB 的空间。
    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多