2

私は巨大なデータベースを持っており、アプリケーションができるだけ早くそれを使用できるようにしたいと考えています。私はアンドロイドを使用しているため、リソースはより制限されています。sqlite データベースに巨大なデータを保存するのは良い考えではないことはわかっていますが、これが必要です。

各データベースには 1 つのテーブルしか含まれておらず、私はそれを READ のみで使用しています。

データベースを可能な限り最適化するために、どのようなアドバイスをいただけますか? 私はすでにこの投稿を読みましたが、PRAGMA コマンドを除いて、他に何が使用できますか?

読み取り専用クエリに制限されている特別なタイプのテーブルがいくつかあるかもしれませんが、主に通常のテーブルタイプよりも高速ですか?

4

4 に答える 4

1

データベースがデバイスに適合する限り、問題はありません。他のアプリ用のスペースが少なくなります。

特別なテーブルタイプはありません。ただし、テーブルの列のサブセットのみを使用するクエリがあり、十分なスペースが残っている場合は、1 つ以上のカバリング インデックスを追加することを検討してください。

読み取り専用であるため、データベースを展開する前に、デスクトップ上でデータベースを最適化できます。

  • ページ サイズなどを設定します。
  • 便利なインデックスを作成します。
  • ANALYZE
  • VACUUM

アプリでページ キャッシュ サイズを増やしてみることもできますが、ワーキング セットが空きメモリよりも大きい場合は、いずれにせよ役に立ちません。いずれにせよ、フラッシュからのランダム読み取りは高速なので、それほど問題にはなりません。

于 2012-10-11T05:41:16.333 に答える
0

また、データは変更されないため、ジャーナリングのスイッチをオフにする必要がありますhttp://www.sqlite.org/pragma.html#pragma_journal_mode PRAGMA journal_mode=OFF

于 2013-09-09T09:18:04.357 に答える
0

多分私は明白なことを述べていますが、おそらくSQLITE_OPEN_READONLYフラグを付けて開く必要がありますsqlite3_open.SQLiteはこの事実を利用してエンジンの動作を最適化すると思います.

すべての通常の SQL(ite) 最適化のヒントが引き続き適用されることに注意してください (たとえば、データベースをファイナライズするための VACUUM、データベース作成時の正しいページ サイズの設定、適切なインデックスなど...)

SQLITE_OPEN_NOMUTEXさらに、アプリケーション内のデータベースに複数のスレッドがアクセスしている場合は、フラグとフラグも試してみることをお勧めしますSQLITE_OPEN_SHAREDCACHE(ただし、sqlite3_open_v2 が必要です)。

于 2012-10-14T06:52:23.717 に答える
0

巨大は相対的です。しかし最終的には、デバイスはストレージとメモリに制約されます。デバイスの一般的な制約を超えていると仮定すると、いくつかの選択肢があります。

最初のオプションは、巨大なデータセットをクラウドに保存することです。接続されたデバイスは、クラウドから RESTful API などのクラウド サービスを提供してデータをデバイスに提供することで、そのデータのビューを提供できます。デバイスとアプリが常に接続されていることに依存している場合、データをキャッシュする必要がない限り、それほど多くのローカル ストレージは必要ありません。

もう 1 つのアプローチは、時々接続される (オフラインの場合もある) デバイスであり、最も関連性の高いデータのスライスをプルダウンしてデバイスで作業します。そのモデルでは、オフラインで作業し、クラウドにプッシュ/プルバックできます。このモデルでは、sqlite は関連データのスライスを保持するためのストレージ メカニズムです。

コメントに基づいて編集:

デバイス上にあるものを最適化することに関しては、最適化に関する FAQ を参照してください:

http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

(効き目の大まかな順)

  1. インメモリ データベースを使用する
  2. BEGIN TRANSACTION と END TRANSACTION を使用する
  3. インデックスを使用 PRAGMA cache_size を使用
  4. PRAGMA synchronous=OFF を使用
  5. データベースを圧縮する
  6. メモリ割り当てライブラリを置き換える
  7. PRAGMA count_changes=OFF を使用
于 2012-10-11T03:24:18.887 に答える