SQLiteデータベースと共有設定の間で情報を保存するための適切なメカニズムは何ですか?
共有設定を使用する理由 sqliteを使用する理由 私はそれらの違いを見つけようとしました、そしてそれはデータ保存のためのより良いメカニズムですが、Googleで適切な答えを見つけることができません。例と説明で私を助けてください。
SQLiteデータベースと共有設定の間で情報を保存するための適切なメカニズムは何ですか?
共有設定を使用する理由 sqliteを使用する理由 私はそれらの違いを見つけようとしました、そしてそれはデータ保存のためのより良いメカニズムですが、Googleで適切な答えを見つけることができません。例と説明で私を助けてください。
回答:
保存するデータによって異なります。
SQLite
データベースはこの種のデータ用に設計されているため、同じ構造化データを大量にSQLiteデータベースに格納する必要があります。データはデータベースによって構造化および管理されるため、SQLなどのクエリ言語を使用して、特定の基準に一致するデータのサブセットを取得するためにクエリを実行できます。これにより、データ内を検索できます。もちろん、大きなデータセットの管理と検索はパフォーマンスに影響を与えるため、データベースからのデータの読み取りは、SharedPreferencesからのデータの読み取りよりも遅くなる可能性があります。
SharedPreferences
SharedPreferencesは、特定のキーの下にデータを保存できるキー/値ストアです。ストアからデータを読み取るには、データのキーを知っている必要があります。これにより、データの読み取りが非常に簡単になります。ただし、少量のデータを格納するのと同じくらい簡単で、単一のデータごとにキーを定義する必要があるため、大きな構造化データを格納して読み取るのは困難です。さらに、特定の概念がない限り、データ内を実際に検索することはできません。キーに名前を付けます。
この質問には受け入れられた答えがありますが、速度については、このトピックについて他に言うべきことがあると思います。
アプリケーションのSharedPreferencesとSqlite DBはどちらも単なるファイルであり、デバイスのファイルシステム上のアプリケーションのディレクトリに保存されます。データ量が多すぎない場合、Sqliteオプションには、単純なアクセスのための処理オーバーヘッドが大きくなる、より大きく複雑なファイルが含まれます。
したがって、データの性質が選択を決定せず(受け入れられた回答で説明されているように)、速度が重要である場合は、SharedPreferencesを使用することをお勧めします。
また、一部のデータを読み取ることは、主なアクティビティを表示するためのクリティカルパスにあることが多いため、速度が非常に重要になることがよくあります。
速度と効率に関する最後の1つの考え-構造化データにSqliteデータベースを使用する必要がある場合は、2番目のファイルを開かないようにデータベースにユーザー設定を保存する方がおそらくより効率的です。これはかなりマイナーな考慮事項です。メインのアクティビティを表示する前に構造化データと設定の両方にアクセスする必要がある場合にのみ、おそらく考慮する価値があります。
私の見解では、それは速度やサイズではなく、データに対して実行したい種類の操作です。
データに対して結合、並べ替え、その他のDB操作を行う場合は、Sqliteを使用してください。例としては、日付によるデータの並べ替えがあります。
単純な値(int、boolean、Stringなど)をマップする場合は、Preferencesを使用します。ここではDB操作は機能せず、すべてのキーが必要であることは言うまでもありません。例としては、ユーザーパスワードやアプリの設定があります。
Preferencesを採用する大きな誘惑は、それを使用してフラット化されたPOJO(シリアライズされたJSONオブジェクト)をStringとして格納する場合です。このような必要性は、実際にはSqliteを使用するための印です。どうして ?複雑なデータは最終的に複雑な操作が必要になるためです。単純な「SELECT ... WHERE id = 1」で処理できる特定のエントリを取得することを想像してみてください。設定パスでは、これはデシリアライズから結果の反復までの長いプロセスになります。
SharedPreferences
キー/値を一度にクリアして(たとえばuser
、password
キーとキーの両方)、両方のキーが設定されていないか、両方が設定されていることを確認できます。
大量のデータを保存するには、SQLiteデータベースシステムを使用します。これにより、ユーザーはデータを検索することもできます。
一方、少量のデータを保存する場合は、共有設定に移動します。この場合、巨大なデータベースシステムは不要です。これにより、ユーザーはデータを保存して読み込むだけで済みます。
SQLLiteを忘れてSharedPreferencesを忘れて、レルムを使用します。すべてのローカルストレージに対する単一のソリューション。プレーンな古いJavaオブジェクトをRealmObjectとして使用し、そこにデータを保存できます。選択したクエリをJSONファイルに変換できます。データベース全体を解析する必要はありません。このリンクを確認してください:https : //realm.io/news/introducing-realm/