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