2012-03-04 62 views
2

我的應用程序使用SQLite數據庫與FTS3做產品搜索。我正在嘗試使用SQLCipher加密數據庫,但它會導致數據庫大小膨脹(7mb - >〜20mb)。壓縮加密的SQLite FTS3數據庫的iOS

看起來好像沒有很好的方法來壓縮加密的FTS SQLite數據庫。有沒有人有這方面的建議?我必須縮小它以保持應用程序在20mb 3g下載限制下。

謝謝!

回答

0

沒有理由使用SQLCipher的數據庫與不使用SQLCipher的數據庫相比會更大。 SQLCipher數據庫的每個頁面僅爲IV和HMAC使用48個字節的頁面。因此,對於1024字節的頁面大小,如果您有7mb未加密的數據庫,SQLCipher加密版本應該只有7.34 mb。

更可能的解釋是數據庫因刪除和插入而增長。如果數據庫未啓用auto vacuum,刪除的行可能會繼續佔用空間。嘗試在數據庫上運行VACUUM以回收空間。

如果抽真空數據庫沒有處理它,這裏有一些後續問題;

  1. 您確定FTS3索引不是簡單地對文件大小負責嗎?
  2. 您是否嘗試過在未加密的數據庫中使用FTS3創建相同的確切架構和表結構以比較文件大小,以確保這實際上是SQLCipher的問題? FTS3 7 MB的非加密數據庫?
  3. 如果對1和2的答案都是肯定的,可否請您提供確切步驟,以瞭解如何將未加密數據庫轉換爲加密數據庫?

要回答您的一般問題,SQLCipher數據庫可能無法很好地壓縮。如果文件大小增長實際上是FTS3而不是SQLCipher的結果,那麼您可以考慮在應用中傳送數據,然後在設備上構建FTS3虛擬表。

+0

您是否認爲它是因爲我將FTS與SQLCipher結合使用? – Rangers4me 2012-03-06 00:28:55

+0

從郵件列表跟帖發佈: – 2012-03-06 21:57:26

+0

嘿斯蒂芬 - 感謝您的所有建議。對應用程序大小的幾個故障: 1.未加密/非壓縮與FTS:21MB 2.未加密/壓縮與FTS:7MB 3.加密(SQLCipher)/壓縮與FTS:22MB 我不認爲問題在於SQLCipher - 我只是不知道如何同時加密和壓縮到應用程序內可用的大小。 – Rangers4me 2012-03-07 22:19:39