私のデータベースには巨大なデータ(メガバイトのデータ)があります。それらはすべて画像(url)です。そのデータを携帯電話(Android、iPhone)に表示するにはどうすればよいですか。そのデータを取得するためのより良い方法は何ですか?つまり、すべてのデータを表示しながらパフォーマンスを向上させる方法は?
教えてください。
NSThread を使用して i phone の他の関数を呼び出すよりも、データベースから画像の URL のみを取得すると、バックグラウンドで画像が読み込まれ、アプリのパフォーマンスが向上します。
必要なURLをDBに保存するだけで、画像バイナリでDBをオーバーロードすることなく、すでに適切な作業を行っています。それとは別に、パフォーマンスを向上させたい場合は、実行できます
1)インデックス作成-インデックスは、1つ以上の列(インデックスキー)の値に基づいて、テーブル内の行への高速アクセスパスを提供する単なるデータ構造です。これにより、テーブル全体を行ごとにスキャンするのではなく、高速検索手法を使用して値を見つけることができるため、データの取得がはるかに高速になります。これにより、環境のパフォーマンスが大幅に向上し、SELECTクエリを実行してデータを取得するのにかかる時間が短縮されます。
2)Amazon S3などのプラットフォームで画像をホストすると、読み込み時間が短縮され、パフォーマンスが確実に向上します。
人々が大きなバイナリ オブジェクトをデータベースに入れないように言う理由はたくさんありますが、これもその 1 つです。
データベースはファイルシステムではありません。バイナリ データではなく、リレーショナル データを格納するためのものです。ドキュメント ストアとして機能するデータベース プラットフォームは他にもありますが、これはここで必要なものです。
ある時点で、データベースをバックアップする必要があります。サイズが数百 GB の場合は、バックアップが難しく、CPU を集中的に使用することになります。復元にはさらに時間がかかります。これらがすべて通常のファイルである場合、この種の処理は簡単でrsync
、スクリプトを少し作成する必要があります。
私のアドバイスは、Amazon S3 のような既存のソリューションを活用するか、データベースにファイル パスを保存し、他の静的ファイルと同じようにファイルを公開 URL で利用できるようにすることです。ほとんどのモバイル アプリケーションはセッションや Cookie を効果的に使用しないため、ある程度のセキュリティが必要な場合は、通常、URL を十分にランダム化してそのコンテンツを遮断するだけで十分です。
あなたの質問から、データベースには実際の画像バイナリデータではなく画像 URL のみが含まれていることがわかりました。正しい?
その場合は、データベースから画像の URL を取得してから、インターネットから実際の画像を取得する必要があると思います。
ユーザーが表示する可能性が最も高い画像のキャッシュを検討するか、バックグラウンド サービスでそれらをプリフェッチすることもできます。
それらを表示するときは、アプリの応答性を維持するために専用のスレッドが必要です。
解決策は、データベースが静的か動的かによって異なります。データ全体が静的な場合は、Android の Assets フォルダーに圧縮し、そこから直接使用して、ネットワークの問題を回避します。
これが動的な場合、特定のビューに表示されているデータのみを取得するか、最初にすべてのデータを取得して後で差分同期のみを行う Web サービスを作成する必要があります。