2016-05-19 4 views
-1

小さな画像をブロブとして保存したSQLiteデータベースがあります。私は、これらの画像をできるだけ早く数十枚読んで、それらをユーザーインターフェースに表示する必要があります。SQLiteデータベースからブロブを読み取る際のパフォーマンスを向上させる

コードをプロファイリングすると、データベースから読み込むsqlite3_stepコールで大部分の時間が費やされたことが明らかになりました。

これらの読み取りのパフォーマンスを向上させるにはどうすればよいですか?

パフォーマンスを向上させるために同時に複数のスレッドをデータベースから読み取ることも考えられますが、SQLiteのthe threading documentationはあまり明確ではありません。データベースから複数のスレッドを一度に読み取ることは可能ですか、どのスレッドから来たものであろうと直列化されているか?

SQLiteデータベースからBLOBを読み取る処理量を改善する他の方法はありますか?

+1

最初に大きなブロブをデータベースに入れずに、ファイルシステム内に保持し、データベースへの参照を保持するだけです。これの理由は?パフォーマンス。 – trojanfoe

+0

@trojanfoe同意するが、これはこの特定のケースでは選択肢ではない。 – Bill

+0

次に、私はあなたが価格を支払わなければならないと思います。インサートのパフォーマンスを向上させる手法はありますが、パフォーマンスの読み込みができるとは思えません。 – trojanfoe

答えて

0

使用パターンに応じて、SQLiteデータベースから複数のスレッドを一度に読み取ることは可能ですが、必ずしも安全である必要はありません。

シリアル化モードを使用している場合、複数のスレッドは要求が並行して実行されないため、助けになりません。このドキュメントでは、マルチスレッドモードでは複数のスレッドを使用して並列に読み込むことができますが、各スレッドには独自のデータベース接続が必要であるため、試してみることもできます。私はあなたがデータベースにも書いていないなら、これがうまくいくと思っています。

アプリケーションの制限要因はディスクの読み取り速度です。この場合、スレッドはすべて同じディスク上の同じSQLiteデータベースファイルにアクセスするため、スレッドの手助けの方法はありません。

関連する問題