3

我的应用程序使用带有 FTS3 的 SQLite 数据库进行产品搜索。我正在尝试使用 SQLCipher 加密数据库,但这会导致数据库大小膨胀(7mb --> ~20mb)。

似乎没有一种很好的方法来压缩加密的 FTS SQLite 数据库。有人对此有什么建议吗?我必须缩小它以将应用程序保持在 20mb 3g 下载限制之下。

谢谢!

4

1 回答 1

1

与没有 SQLCipher 的数据库相比,使用 SQLCipher 的数据库没有理由那么大。SQLCipher 数据库的每个页面只使用 48 个字节的页面用于 IV 和 HMAC。因此,对于 1024 字节的页面大小,如果您有一个 7mb 的未加密数据库,则 SQLCipher 加密版本应该只有 7.34 mb。

更可能的解释是您的数据库因删除和插入而增长。如果数据库上没有启用自动清理,删除的行可能会继续占用空间。尝试在数据库上运行VACUUM以回收空间。

如果清理数据库不能解决问题,这里有几个后续问题;

  1. 您确定 FTS3 索引不只是对文件大小负责吗?
  2. 您是否尝试过在非加密数据库中使用 FTS3 创建完全相同的模式和表结构来比较文件大小以确保这实际上是 SQLCipher 的问题?FTS3 的非加密数据库是 7 MB 吗?
  3. 如果 1 和 2 的答案都是肯定的,您能否提供有关如何从未加密数据库转换为加密数据库的确切步骤?

要回答您的一般问题,SQLCipher 数据库可能无法很好地压缩。如果文件大小的增长实际上是 FTS3 而不是 SQLCipher 的结果,那么您可以考虑在应用程序上传送数据,然后在设备上构建 FTS3 虚拟表。

于 2012-03-05T19:42:20.703 回答