3

私のアプリは、FTS3でSQLiteデータベースを使用して製品検索を行います。SQLCipherを使用してデータベースを暗号化しようとしていますが、データベースのサイズが膨らみます(7mb->〜20mb)。

暗号化されたFTSSQLiteデータベースを圧縮する優れた方法があるようには見えません。誰かがこれについて提案がありますか?アプリを20mb3gのダウンロード制限未満に保つには、縮小する必要があります。

ありがとう!

4

1 に答える 1

1

SQLCipher を使用するデータベースが、SQLCipher を使用しないデータベースと比較してそれほど大きくなる理由はありません。SQLCipher データベースの各ページは、IV と HMAC にページの 48 バイトのみを使用します。したがって、1024 バイトのページ サイズで、7 MB の暗号化されていないデータベースがある場合、SQLCipher で暗号化されたバージョンはわずか 7.34 MB になります。

より可能性の高い説明は、データベースが削除と挿入の結果として大きくなったということです。データベースで自動バキュームが有効になっていない場合、削除された行がスペースを占有し続ける可能性があります。データベースでVACUUMを実行して、スペースを再利用してみてください。

データベースをバキュームしても問題が解決しない場合は、いくつかのフォローアップの質問があります。

  1. FTS3 インデックスが単にファイル サイズの原因ではないことを確信していますか?
  2. 暗号化されていないデータベースで FTS3 を使用してまったく同じスキーマとテーブル構造を作成し、ファイル サイズを比較して、これが実際に SQLCipher の問題であることを確認しましたか? FTS3 の暗号化されていないデータベースは 7 MB ですか?
  3. 1 と 2 の両方の答えが「はい」の場合、暗号化されていないデータベースから暗号化されたデータベースに変換する方法の正確な手順を教えてください。

一般的な質問に答えると、SQLCipher データベースはおそらく十分に圧縮されません。ファイル サイズの増加が実際には SQLCipher ではなく FTS3 の結果である場合は、アプリでデータを配布してから、デバイスで FTS3 仮想テーブルを構築することを検討できます。

于 2012-03-05T19:42:20.703 に答える