2

私は、300,000 行をはるかに超える SQLite データベースに基づく辞書アプリに取り組んでいます。

問題は、最終的な形式のデータベース ファイルがフルテキスト インデックス テーブルで構成され、150Mbをはるかに超えることです。

内容のない fts4 テーブルを作成することで、.db ファイルのサイズを最小限に抑えることができました。データベースをこれ以上小さくすることはできません。また、事前に入力されたデータベースをアプリに配置することもできましたが、正常に動作します。

問題は、最終的な .db ファイルを /assets に保持して、最初の実行時に SD カードにコピーできないことです。サイズが大きすぎるためです。また、最初の実行時にダウンロードしたくありません。

INSERTトランザクションとsqliteが最適化されていて、開始時にインデックスがない場合でも、データの一括処理には永遠にかかるため、オプションではありません。

良いことは、CSV形式で圧縮されたデータベースの構築に使用される生データが30Mbであり、sqliteのコマンドライン.importオプションが非常に高速であることです(〜1秒で100,000行)が...それなしではアプリからアクセスできませんルート権限。

/assets に圧縮された CSV ファイルをアプリにバンドルし、それらを解凍し、sdcard にデータベースを作成してから CSV をインポートしたいのですが、それは不可能に思えますまさにこれを行っているように見える多くの辞書アプリがありますが. (ダウンロードしたアプリは 12 メガバイトで、最初の実行時にデータベースを構築し、SD カードに数百メガバイトのスペースを必要とします)。

どうすればこれを達成できますか?

私は過去 2 週間これに取り組んできましたが、単にアイデアが尽きてしまいました。私はAndroid開発に不慣れなので、どんな助けでも大歓迎です。

4

2 に答える 2

2
  • プラン A: 圧縮された SQLite データベース ファイルを出荷し、インストール後に解凍します。インデックスを省略して後で再構築できるはずです。
  • プラン B: CSV インポーターの関連部分をアプリケーションにコピーし、圧縮された CSV ファイルを送信して、コマンド ライン ツールのように空のデータベースにロードします。公式ドキュメントページ。
于 2013-08-07T12:45:45.057 に答える
0

コンテンツ全体を csv ファイル (場合によっては複数の csv ファイル) に作成し、zip に圧縮します。圧縮後の 32 MB の csv ファイルで確認したところ、ファイルは 482 KB になりました。

例えば

data1.csv data2.csv data3.csv data4.csv data5.csv

インポート時にファイルを data.zip に圧縮し、ファイルをアセット フォルダーに配置します - zip からファイルを 1 つずつ抽出し、sqlite db に挿入します。

于 2013-08-07T12:42:47.670 に答える