【问题标题】:how to compress sqlite database如何压缩sqlite数据库
【发布时间】:2013-11-27 16:24:42
【问题描述】:

我的离线应用程序中有一个 sqlite 数据库,已达到 32mb。它是在启动时从大小为 6mb 的资产文件创建的。

是否有任何内置的压缩​​功能会永久导致数据库变小,我不介意读取时的性能损失。然后它将使用更少的用户手机内存。

有什么想法吗?

数据库有两个表,大部分是长文本字段。大小是首次应用启动时 7000+ 次插入的最终结果。

【问题讨论】:

  • SQLite 的 FTS4 扩展提供了一个压缩选项:sqlite.org/fts3.html#section_6_1。但是,该扩展显然只存在于自 API 级别 11 以来的 Android 中(请参阅此处:stackoverflow.com/questions/6339022/…)。或者,您可以在 Java 中进行压缩/解压缩。但是,这样您将无法使用 SQLite 搜索您的文本。
  • @NobuGames 可能值得一读,因为我的目标是 API 11+。谢谢。
  • @NobuGames 只是一个更新,它不可能使用该选项来压缩 FTS 表,因为 android 不支持自定义函数。

标签: android sqlite compression


【解决方案1】:

您可以尝试在您的数据库上使用 VACUUM。请参阅此处的 SQLite 文档:http://www.sqlite.org/lang_vacuum.html

【讨论】:

  • 是的,我看到了一篇关于这个的帖子,但对我来说它并不适用,因为这是我插入 7000 多次后的尺寸。除了书签之类的东西之外,数据库之后不会被真正写入。所以它不太可能会被分散到足以受到 VACUUM 的影响
【解决方案2】:

CEVFS: Compression & Encryption VFS for SQLite 3

CEVFS 是一个 SQLite 虚拟文件系统,它使用自己的分页器,并插入在 b-tree 使用的分页器(这里称为上分页器)和操作系统接口之间。这使它可以拦截对数据库的读/写操作,并无缝压缩/解压缩和加密/解密数据。

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多