web-dev-qa-db-ja.com

SQLiteと共有設定の長所と短所

SQLiteデータベースと共有設定に情報を保存する良いメカニズムは何ですか?

共有設定を使用する理由sqliteを使用する理由私はそれらの違いを見つけようとしましたが、これはデータを保存するためのより良いメカニズムですが、Googleで適切な答えを見つけることができません。例と説明を手伝ってください。

142
Rana.S

本当に保存したいデータに依存します。

SQLite

データベースはこの種のデータ用に設計されているため、大量の同じ構造化データをSQLiteデータベースに保存する必要があります。データはデータベースによって構造化および管理されるため、SQLなどのクエリ言語を使用して特定の条件に一致するデータのサブセットを取得するためにクエリを実行できます。これにより、データを検索できます。もちろん、大量のデータの管理と検索はパフォーマンスに影響するため、データベースからのデータの読み取りはSharedPreferencesからのデータの読み取りよりも遅くなる可能性があります。

SharedPreferences

SharedPreferencesは、特定のキーの下にデータを保存できるキー/値ストアです。ストアからデータを読み取るには、データのキーを知っている必要があります。これにより、データの読み取りが非常に簡単になります。しかし、1つのデータごとにキーを定義する必要があるため、少量のデータを格納するのは簡単ですが、大きな構造化データを格納および読み取るのは困難です。さらに、キーに名前を付けます。

151
Flo

この質問には受け入れられた答えがありますが、スピードに関しては、このトピックでもっと語るべきことがあると思います。

アプリケーションのSharedPreferencesとSqlite DBはどちらも単なるファイルであり、デバイスのファイルシステム上のアプリケーションのディレクトリに格納されます。データ量が大きすぎない場合、Sqliteオプションには、単純なアクセスのための処理オーバーヘッドの大きい、より大きく複雑なファイルが含まれます。

したがって、データの性質が選択を決定せず(受け入れられた回答で説明されているように)、速度が重要な場合は、SharedPreferencesを使用することをお勧めします。

また、一部のデータの読み取りは、主なアクティビティを表示するクリティカルパスにあることが多いため、速度が非常に重要であることが多いと思います。

速度と効率に関する最後の考え-構造化されたデータにSqliteデータベースを使用する必要がある場合は、2番目のファイルを開かないようにデータベースにユーザー設定を保存する方がおそらく効率的です。これはかなり小さな考慮事項です。主なアクティビティを表示する前に構造化データと設定の両方にアクセスする必要がある場合にのみ、おそらく検討する価値があります。

87
Tom

私の意見は、速度やサイズではなく、データに対して実行する操作の種類です。

データでjoinsortおよびその他のDB操作を実行する場合は、Sqliteに進みます。例は、日付によるデータのソートです。

単純な値(int、boolean、Stringなど)をマップする場合は、Preferencesを使用します。 DB操作はここでは機能せず、すべてのキーが必要であることは言うまでもありません。例は、ユーザーのパスワードまたはアプリの構成です。

Preferencesを採用する大きな誘惑は、フラット化されたPOJO(シリアル化されたJSONオブジェクト)をStringとして保存するために使用する場合です。このようなニーズがあることは、実際にはSqliteを使用するためのサインです。どうして ?複雑なデータには、最終的に複雑な操作が必要になるためです。単純な「SELECT ... WHERE id = 1」で処理できる特定のエントリを取得することを想像してください。 Preferencesパスでは、これはデシリアライズから結果の反復までの長いプロセスになります。

15
inmyth
  • 大量のデータを保存するには、SQLiteデータベースシステムを使用します。これにより、ユーザーはデータも検索できます。

  • 一方、少量のデータを保存するには、共有設定を選択します。この場合、巨大なデータベースシステムは不要です。これにより、ユーザーは単にデータを保存してロードすることができます。

3
Sami Al-Jabar