1

私のアプリケーションには、データベースに対して挿入クエリと更新クエリを時々実行する必要があるという要件があります。さて、私の質問は、アプリケーション内でキャッシュを維持し、特定の間隔の後、または 20 エントリ後にキャッシュをデータベースにコミットすることです。

これがキャッシュを維持するシナリオである場合。それはアプリケーション レベルで行うべきですか、それともサービス内で行うべきですか?

アプリケーションが突然クラッシュし、キャッシュ内のデータが保持されなくなる可能性があります。

これについて考えられるシナリオは何ですか。

データベースを開いたり閉じたりするたびにオーバーヘッドが発生することをどこかで読んだことがあります。注: 私のデータベースは sdcard にあります。

ありがとう。

4

2 に答える 2

1

I have a requirement in my application wherein I have to every now and then perform insert and update queries on the database. Now, my question is shall maintain cache within the application and after specific intervals or may be after say 20 entries, commit the cache into the database?

挿入操作は、SQLite ではかなり高速です。db がオープン状態にならないように、finally ブロックでデータベースを閉じていることを確認してください。これにより、それ以上の挿入がブロックされる可能性があります。可能な限り、バッチ挿入を使用してください。はるかに高速です。こちらをご覧ください

If this is the scenario where shall I maintain the cache. Should it be on the application level or in the service?

サービスはアプリケーションレベルでも提供されます:)。サービスでキャッシュを維持し、別のプロセスでサービスを有効にする可能性があります。こちらをご覧ください。

There is a possibility that say the application abruptly crashes and hence the data that is there in the cache no longer persists.

残っている唯一のオプションは、他のプロセスでキャッシュを維持するか(これはいつでもクラッシュする可能性があります)、ディスク上に維持することです。内部ストレージである可能性があります。内部ストレージにキャッシュを維持することは、sqlite への書き込みと同じくらい良いか悪いかです。

What can be the possible scenarios for this.

キャッシュを実装するかしないかです。

I have read somewhere that everytime opening and closing the database is an overhead. Note: my database resides in the sdcard.

私の知る限り、SQLiteを開くことはファイルを開くことに匹敵し(少し遅くなりますが)、Oracleデータベースを開くことには匹敵しません。したがって、ほとんどの場合、データベースを開くのは手頃な価格ですが、パフォーマンスを向上させるために挿入をバッチ処理しても害はありません;)

于 2013-10-31T05:49:45.093 に答える
0

Android では、アプリケーションがいつでも強制終了される可能性があることに注意してください。したがって、すべてのデータを確実に保存したい場合は、データが入力されるたびにデータベースに保存し、キャッシュしないようにする必要があります。

データベースへのアクセスにはオーバーヘッドがあるため、UI スレッドでデータベースを更新しないようにしてください。正しく実行すれば、ユーザーのパフォーマンスが低下することはありません。

于 2013-10-31T05:31:29.583 に答える