【发布时间】:2012-03-04 23:13:18
【问题描述】:
我的应用使用带有 FTS3 的 SQLite 数据库进行产品搜索。我正在尝试使用 SQLCipher 加密数据库,但这会导致数据库大小膨胀(7mb --> ~20mb)。
似乎没有一种很好的方法来压缩加密的 FTS SQLite 数据库。有人对此有什么建议吗?我必须缩小它以将应用程序保持在 20mb 3g 下载限制以下。
谢谢!
【问题讨论】:
我的应用使用带有 FTS3 的 SQLite 数据库进行产品搜索。我正在尝试使用 SQLCipher 加密数据库,但这会导致数据库大小膨胀(7mb --> ~20mb)。
似乎没有一种很好的方法来压缩加密的 FTS SQLite 数据库。有人对此有什么建议吗?我必须缩小它以将应用程序保持在 20mb 3g 下载限制以下。
谢谢!
【问题讨论】:
与没有 SQLCipher 的数据库相比,没有理由使用 SQLCipher 的数据库会那么大。 SQLCipher 数据库的每个页面只使用 48 个字节的页面用于 IV 和 HMAC。因此,对于 1024 字节的页面大小,如果您有一个 7mb 的未加密数据库,则 SQLCipher 加密版本应该只有 7.34 mb。
更可能的解释是您的数据库因删除和插入而增长。如果数据库上没有启用auto vacuum,删除的行会继续占用空间。尝试在数据库上运行VACUUM 以回收空间。
如果清理数据库不能解决问题,这里有几个后续问题;
要回答您的一般问题,SQLCipher 数据库可能无法很好地压缩。如果文件大小的增长实际上是 FTS3 而不是 SQLCipher 的结果,那么您可以考虑在应用程序上传送数据,然后在设备上构建 FTS3 虚拟表。
【讨论】: