"データ記憶装置において、データの断片化の最適化処理を行う最適化実行手段と、前記最適化処理が中断していることを検出する検出手段と、前記検出手段で検出された、中断している最適化処理を継続して再開可能か前記中断から更新されたデータの量により判定する判定手段と、を備え、前記最適化実行手段は、前記判定手段により最適化処理が再開可能であると判定された場合に、データの最適化処理を再開することを特徴とするデータ記憶装置。前記データ記憶装置の状態を検知する検知手段を更に備え、前記データ最適化実行手段は、前記検知手段で前記データ記憶装置の所定の状態を検知した場合に、データ最適化を中断することを特徴とする請求項1記載のデータ記憶装置。前記データ最適化実行手段は、前記検知手段で検知した前記データ記憶装置の状態に基づいて、データ最適化を計画し実行することを特徴とする請求項2記載のデータ記憶装置。前記検知手段が検知する状態は、給電状態、電気の残量、他装置との接続状態、データ状態、外部記憶部の状態、加速度センサ値、電波強度、通信状態、機器のリソース状態、外部からの指示、時刻のいずれか少なくとも1つであることを特徴とする請求項3記載のデータ記憶装置。前記データ最適化実行手段は、前記更新されたデータの量が少ない場合、前記中断前に最適化処理した部分に前記更新されたデータを適用して前記最適化処理した部分を更新することを特徴とする請求項1記載のデータ記憶装置。前記最適化処理を行うデータは、インデックスデータであることを特徴とする請求項1記載のデータ記憶装置。前記データ最適化実行手段は、最適化終了前の旧インデックスを残して最適化を実行し、最適化終了後に最適化した新インデックスと旧インデックスとを差し替えることを特徴とする請求項6記載のデータ記憶装置。前記最適化処理を行うデータは、サムネイル画像データであることを特徴とする請求項1記載のデータ記憶装置。データ記憶装置の制御方法において、データの断片化の最適化処理を行う最適化実行工程と、前記最適化処理が中断していることを検出する検出工程と、前記検出工程で検出された、中断している最適化処理を継続して再開可能か前記中断から更新されたデータの量により判定する判定工程と、を備え、前記最適化実行工程は、前記判定工程により最適化処理が再開可能であると判定された場合に、データの最適化処理を再開することを特徴とするデータ記憶装置の制御方法。データ記憶装置の制御方法をコンピュータに実行させるプログラムであって、データの断片化の最適化処理を行う最適化実行手順と、前記最適化処理が中断していることを検出する検出手順と、前記検出手順で検出された、中断している最適化処理を継続して再開可能か前記中断から更新されたデータの量により判定する判定手順と、を備え、前記最適化実行手順は、前記判定手順により最適化処理が再開可能であると判定された場合に、データの最適化処理を再開することをコンピュータに実行させることを特徴とするプログラム。さらに、データの最適化処理が中断された場合には、適切に処理を復帰して再開することが望まれる。最適化処理中断後の再開時には、途中まで最適化した最適化処理の結果を有効利用して継続するか、新たに最適化処理を開始するか判断して、適切に最適化処理を行うことが必要になる。本発明は上記の問題に鑑みてなされたものであり、計算資源が確保できない状況を検知したときに、最適化処理が中断されても適切に最適化処理を実施することで、応答性能を向上させ、利便性を高めることを目的とする。本発明に係るデータ記憶装置は、以下の構成を備える。即ち、データの断片化の最適化処理を行う最適化実行手段と、前記最適化処理が中断していることを検出する検出手段と、前記検出手段で検出された、中断している最適化処理を継続して再開可能か前記中断から更新されたデータの量により判定する判定手段。前記最適化実行手段は、前記判定手段により最適化処理が再開可能であると判定された場合に、データの最適化処理を再開する。本発明に依れば、データ最適化処理が中断されても、適切に最適化処理を再開するので、データの断片化を解消して応答性能を改善でき、ユーザの利便性が高まる。以下、本発明を適用した好適な実施形態を、添付図面を参照しながら詳細に説明する。第1の実施形態基本動作図1は本実施形態を適用する装置を示す構成図である。データ記憶装置1000はデータベース制御装置全体を示している。マイクロプロセッサCPUCentralProcessingUnit1001は,情報処理のための演算,論理判断等を行う。システムバス1010を介して,それらのバスに接続された各構成要素を制御する。読出し専用の固定メモリROMReadOnlyMemory1002は,本実施形態で実行される処理プログラム等の制御プログラムコードを記憶する。書き込み可能なRAMRandomAccessMemory1003は,各構成要素からの各種データの一時記憶に用いられる。入力部1004には,ユーザからの指示が入力される。電源部1005は、データ記憶装置1000に必要な電源を供給し、必要に応じて外部からの給電および充電に対応する。液晶パネル等の表示部1009では,その表示部における画像情報の表示を表示コントローラ1006で制御する。外部記憶部1007では,各種データ及び画像情報が格納される。また,これらのデータを格納する記憶媒体としては,メモリカード,HDD,DVD-RAMなどを用いることができる。通信部1008では,他の機器と接続することができる。前記の各構成要素からなるデータ記憶装置1000は,入力部1004からの各種の入力及び通信部1008から供給されるネットワーク経由の各種入力に応じて作動する。すなわち,入力部1004からの入力及び通信部1008からの入力が供給されると,まず,インタラプト信号がCPU1001に送られる。そして,そのCPU1001がROM1002,RAM1003,外部記憶部1007に記憶してある各種の制御信号を読出し,それらの制御信号に従って,各種の制御が行われる。また,本実施形態に係わるプログラムを格納した記憶媒体をシステムあるいは装置に供給し,そのシステムあるいは装置が,記憶媒体に格納されたプログラムコードを読み出し実行することによっても本実施形態は達成される。図2は本実施形態が効果的な状況を示したB-Tree構造のインデックス例である。例えば、図2aに示した初期状態のインデックスに対して、人名なしから人名太郎に更新するように属性値の付与を行うと、図2bに示すように更新前の属性値が格納されていた部分に空き領域が生まれる。検索対象のインデックスデータが分散してしまう。その結果アクセスデータ量が増え、検索及び更新時の応答性能が劣化してしまう。そこで適切なタイミングにおいてインデックス最適化処理を行い、図2cに示すように無駄な空き領域を整理する。空き領域を整理することによってアクセスデータ量を減少させ、応答性能を向上させることができる。図3aは外部記憶部1007の例として、デジタルカメラ向けメモリカードの内部構成を示した図である。メモリカード3000の内部には、写真や映像をはじめとした各種データがDCFDesignruleforCameraFilesystemに準拠した形で格納される3001。また、写真や映像のデータにはデータの内容を説明する付加情報である属性値が付与されている。写真データの場合、日付や撮影パラメータ、GPS座標などを格納する枠組みであるExifExchangeableimagefileformatが代表的な例である3002。図3bに示したのはExifが持つ属性値の一例であり、日付、GPS座標、地名、撮影機器メーカー、撮影機器機種名、人名等が格納されている。また、検索処理を高速に行えるようにするため、インデックス格納領域3003に、索引情報を格納した各種インデックス3004~3007をあらかじめ構築し、構築済みのインデックスを検索時に利用することで応答時間を短縮する手法が一般的である。インデックスはB-Treeやハッシュ等の論理構造を持ち、検索キーとデータを紐付けておくことで高速な検索が可能になる。インデックス格納領域3003には、日付のインデックス3004、GPS座標のインデックス3005、地名のインデックス3006、そして人名のインデックス3007を保持している。各インデックス3004~3007はデータベースファイル等の形式でインデックス格納領域3003に永続化される。図3cは地名インデックス3006が、B-Treeの構造をもつ場合の図である。B-Treeは階層構造を持つデータ構造であり、データの挿入、検索、及び削除が容易に行える特長を持つ。インデックスレコード3008は地名からデータファイル名へのインデックスレコードを表している。図4aはRAM1003の構成を表す図である。おもにファイルキャッシュ4001、及びデータベースキャッシュ4002から構成される。ファイルキャッシュ4001は、外部記憶部1007に対するアクセス要求データをRAM1003経由で受け渡しするようにして、データベースエンジン4004や検索アプリケーション4008からの要求に対して応答速度を向上させるために配置される。図4bは本実施形態に係る機能ブロック図である。機器状態変化検知部4003は、給電状態やリソース状態、通信状態、加速度センサ等を監視して、状態変化に応じた機器の動作を決定する。データ記憶装置の検索処理を実行する検索アプリケーション4008は、データ登録処理部4009及びデータ検索処理部4010から構成される。データベースエンジン4004は、検索処理を高速に行うために利用される。検索アプリケーション4008は、データベースエンジン4004を用いてデータ登録処理、およびデータ検索処理を行う。図5a中のデータ表5001は本実施形態に係る検索データベースの例である。各データを一意に区別するためのキーとしてRowIDを付与し、データベースファイル等に表形式で保存することを想定している。RowIDは、データベースあるいはテーブルにおいて重複しないようにユニークに発番付与される数値であり、一般的なデータベースエンジンで利用されている。図5bは本実施形態に係るインデックス格納領域3003に格納されたインデックスの例である。各データに付与されたExifデータ3002のインデックスを、インデックス登録処理部4005によって予め生成しておくことで検索条件に合致するデータを素早く発見し、高速に検索処理を実行できる。例えば日付インデックス3004は、日付とRowIDとを結びつけたデータマップを、人名インデックス3007は人名とRowIDとを結びつけたデータマップを保持している。結び付けられたRowIDからデータを一意に特定し、検索結果を提示することが可能である。データ記憶装置にはデータ検索機能に限らず、データ転送機能やデータ登録機能、撮像機能等さまざまな機能を搭載する場合がある。そのため、データ記憶装置は、機器の状態がどのようになっているかを検知し、適切な機能を選択して動作する。図7に示したのはデータ記憶装置1000の電源投入からの動作を示すフローチャートの例である。電源が投入されるとステップS7001において電源投入後の初期化処理を行う。続いてステップS7002では機器の状態変化あるいはユーザからの入力等のイベントを待機し、検知すると次のステップへ続く。機器の状態変化としては給電状態の変化や通信状態等が考えられる。ステップS7003では検知したイベントが何であるかを判別し、ステップS7004に受け渡す。ステップS7004で判別されたイベントに応じて適切な処理を行い、その結果がステップS7005において表示部1009に表示される。イベントの代表例としては、データ検索処理の起動命令、データ登録処理の起動命令が挙げられる。また、電源スイッチの入れ替え、給電状態の変化、他機器との接続状態の変化、外部記憶部状態変化、加速度変化、電波強度変化、通信状態変化、機器のリソース状態の変化、外部からの指示、時刻変化等も挙げられる。ここでインデックスを用いたデータ検索処理、データ登録処理、断片化が起こる過程、および断片化を解消するインデックス最適化処理の詳細を述べる。まず、データ検索処理について説明する。例えば、ユーザによってデータ検索処理を指示された場合は、図8に示したデータ検索処理のフローを呼び出し、データ検索処理部4010を起動する。データ検索処理部4010は検索条件入力部4011から受けた検索指示によって検索処理を実行し、検索結果表示制御部4012に検索処理の結果を返却する処理を行う。ステップS8001において検索条件入力部4011からの検索条件入力を受け付ける。続いてステップS8002において前記検索条件に基づき、データ検索処理部4010を発動させて検索処理を実行する。前記データ検索処理部4010は検索条件に応じてデータベースエンジン4004に内包されるインデックス検索処理部4006を呼び出し、検索条件に合致するデータを取得する。続いてステップS8003において取得した結果が検索結果表示制御部4012によってユーザに提示される。図6bに示したのは、前記データ検索処理の検索結果を表示したユーザインターフェースの例である。領域6001は検索条件表示領域である。ボックス6002はユーザが指定した検索条件を選択するドロップダウンボックスである。また、領域6003は検索条件に基づいて領域に検索結果をサムネイルで一覧表示する検索結果表示領域である。領域6004は検索結果のページ数を提示する検索結果情報表示領域である。図6aは検索条件入力部4011に対してユーザが与えた検索指示を表現したSQLStructuredQueryLanguage文の例である。ユーザが指定した検索条件に応じて検索条件入力部4011等で生成する。生成したSQL文はインデックス検索処理部4006によって解釈実行され、データ検索処理が行われる。続いてデータ登録機能について説明する。データ登録処理部4009は、撮像、外部からのデータ複製等のイベント発生時に実行される。前記データ登録処理部4009は、ステップS7004から呼び出されて実行され、データ格納部3001に登録、更新、または削除の要求を受けたデータを永続化する。また、前記データ登録処理部4009はインデックス登録処理部4005を呼び出して、検索処理の高速化のため、必要な各インデックス3004~3007を更新し、インデックス格納領域3003に格納する処理を行う。このように、ステップS7004で、各種イベントに対応した処理をし、呼び出されたデータ登録処理部4009、インデックス登録処理部4005の処理の結果、インデックスの断片化が生じる。一般的にインデックスを永続化するインデックスファイルは、一定量のブロック単位で管理される。また、その論理構造はハッシュ、AVLTree、B-Tree、ビットマップ等で表現される。例えば、図2に示すのは人名インデックス3007をB-Tree構造で表現したものである。一般的にB-Tree構造は大きく分けて、ルートノード、中間ノード、リーフノードの3要素からなる。ルートノードからリーフノードに向かって探索を行い、各ノードに格納されているデータを評価することにより、全走査を行うことなく検索条件に対応するデータを検索できる。但し、前記データ登録処理部4009で行われるインデックス登録処理において、インデックス内部の断片化に注意する必要がある。正しい検索結果を得るためには、検索対象となるデータが更新されるたびにインデックスも同様に更新する必要がある。図2aに示すインデックスでは人名太郎が付与されていない状態でインデックスが構築されている。このとき、人名認識処理等が行われて属性値がなしであるデータのいくつかに属性値太郎が付与されると、図2bのようにB-Tree構造が更新される。属性値太郎の木が構築される。一方で高速に応答してインデックス更新するため、属性値なしの部分に生じた空き領域は詰めずに終了する。このような断片化が生じている状態で検索処理または登録処理を行うと、処理対象のデータが広く分散するため必要なデータアクセス量が増加することにより、キャッシュが枯渇してしまう。その結果、外部記憶部1007へのアクセス要求が増えて処理終了が遅延してしまう。このような論理構造の断片化はB-Treeに限らず、ハッシュ、AVLTree、ビットマップ等においても発生する。また同様に、インデックスファイル自体についても、細かい更新を繰返すと単位ブロック内の空き領域の再利用率が落ちることによって断片化が発生する。特に書き換えが低速なフラッシュメモリを外部記憶部として利用する場合、既存領域の再利用よりも新規追記を優先する設計が行われることが多く、再利用率の低い更新が累積されて断片化の発生が顕著になる。断片化が多いインデックスファイルは読み出し量を多く必要とするため、機器のキャッシュメモリを枯渇させる原因となる。キャッシュメモリが枯渇すると外部記憶部へのアクセス頻度が高くなり、応答性能が劣化する。そこで断片化を解消するため、定期的にデータ最適化処理、すなわちインデックス最適化処理を行う必要がある。しかしながら、構造の組み替え処理はデータ全体を俯瞰する必要があるため、件数に応じてコストが増加し、デジタルカメラ等の計算資源に制限がある環境では写真撮影等の他機能の性能を劣化させる場合がある。加えて外部記憶部にフラッシュメモリを用いた場合には、インデックス対象の属性値のような小容量の読込及び書込処理が低速である。そのため、インデックス最適化処理はさらなる処理負荷となる。よって、デジタルカメラ等においてはインデックスの断片化を許容して検索処理を続行せざるを得ない。そこで、本実施形態においてはデータ最適化手段を用い、適切なタイミングでインデックス最適化処理を行う。機器状態変化検知部4003を用いて機器の状態を監視し、写真撮影等の他機能への影響がない時間を検知してインデックス最適化部4007を呼び出す。状態を監視する要素とはすなわち、給電状態、電池の残量、他機器との接続状態、データ状態、外部記憶部の状態、加速度センサ値、電波強度、通信状態、機器のリソース状態、外部からの指示、時刻等が挙げられる。前記状態検知結果のいずれかのうち、少なくとも一つを基にインデックス最適化処理を実施する。図9に示したのは、充電状態およびインデックスの更新回数を監視することによってインデックス最適化処理を実施する処理フローの例である。充電が開始されるとインデックス最適化処理を行い、終了すると電源を切る。デジタルカメラ等においては充電処理が行われている間、充電が完了するまで利用されない可能性が高いためである。ステップS9001において充電処理の開始を検知する。検知した場合にはステップS9002においてインデックスの更新回数が所定以上かを確認し、インデックス最適化処理が必要か否かを判断する。インデックスの更新回数が多ければ、インデックスの断片化が大量に発生している可能性が高いからである。インデックス最適化処理が必要である場合にはステップS9003においてインデックス最適化部4007を起動し、そうでない場合には何もしない。そして最後にステップS9004において機器終了処理を行い、機器の電源を切る。なお、インデックス最適化処理が必要か否かを判断する基準として、更新回数に限らず、機器の稼働時間や起動回数等を用いてもよい。インデックス更新頻度がほぼ一定である場合には、稼働時間を用いることにより、起動回数と更新回数の相関が高い場合には、起動回数を基準に用いることにより、それぞれ更新回数の計上コストを省略できる。最適化処理の実施を行う他の例を挙げる。他機器と長く繋がっている接続状態のときに行っても良い。データの利用頻度が低い時に行っても良い。外部記憶部の状態が空き容量の少ないときに行っても良い。加速度センサ値の変化が少なく安定して置かれていると判断できる時に行っても良い。電波強度が強くて安定しているときに行っても良い。通信が長く繋がっているときや、通信量が少ない時に行っても良い。機器のリソース状態を監視し負荷の低い時、未使用時に行っても良い。利用者が就寝している夜中に行っても良い。もちろん、利用者が明示的に指示を行ったときでもよい。ところで、小型のビューワやデジタルカメラ等において、充電を中断して持ち出し、利用するような状況では主機能の性能に影響を与えないようにするため、インデックス最適化処理を中断する必要がある。一方で中断状態のインデックスを放棄することは、インデックス最適化処理の効率上望ましくない。そのため、適切にデータ最適化中断と、中断後のデータ最適化再開を効率的に可能にする必要がある。図4cに示したのはインデックス最適化処理の中断および再開を行うインデックス最適化部4007を詳細化した機能ブロック図の一例である。動作例について、図10のインデックス最適化処理フローチャートを用いて詳細に説明する。まずステップS10001において、インデックス最適化スケジュール生成部4013を実行する。ここでは給電状態やリソース状態を参照分析することによって、機器状態に応じたインデックス最適化スケジューリングを行う。例えば、機器の電池残量が少なく残充電時間が長いと判断できる場合には、機器の利用される頻度が低くなると判断し、大規模なインデックス最適化処理をスケジューリングすることなどが考えられる。続いてインデックス最適化起動部4014においてスケジュールに対応したインデックス最適化処理を起動または再開する。ステップS10002において、以前にインデックス最適化処理が中断されたか否かを検出する。中断を検出した場合には、ステップS10003に遷移して最適化処理を継続して再開することを試み、そうでない場合はステップS10006において最初から新たにインデックス作成を開始する。ステップS10003では、検索対象のデータに中断時と比較してデータ更新による差分がどれくらいあるかを抽出する。ステップS10004では、インデックス最適化再開部4015を呼び出し、インデックス最適化処理の再開をする。抽出した差分量を基準に、インデックス最適化処理を継続して再開可能であるか否かを判定する。差分量の基準例としては、インデックスファイルサイズの変化、更新件数、中断時からの経過時間等を用いる。最適化処理の継続した再開可能の可否は、データの更新削除の件数によって判断する。データの更新削除件数が少ない時には、インデックス最適化済みの部分に対応するデータに対する更新や削除を検出し、それらに対応するインデックスを更新して、続きの最適化を再開する。データの大半が更新または削除されたときには、中断時までに最適化済みのインデックスデータは使わずに、最初から最適化を実行することになる。つまり、中断前に最適化済みの部分にデータの差分が存在した場合には、差分量が許容できる範囲内であれば最適化済みの部分に差分の適用を行うことになる。ステップS10004の結果が真である場合にはS10005においてインデックス作成を再開し、偽である場合にはステップS10006に遷移して新インデックスを作成する。ステップS10005またはステップS10006からの流れを受け、ステップS10007からステップS10011のループにおいてインデックス作成を行う。但し、ループ毎にステップS10007およびステップS10008において充電状態等の機器状態を監視し、インデックス最適化処理を中断すべきか否かを判断する。充電中断等によってインデックス最適化処理を中断すると判断された場合にはステップS10012においてインデックス最適化処理を中断する。中断方法としては、例えば最適化終了前の旧インデックスを残したまま新インデックス作成を行い、新インデックス構築完了後に、新旧インデックスを差し替える等の方法が考えられる。図2cは、前記インデックス最適化処理によって、図2bに示すインデックスの断片化を解消した例である。空き領域となっていた部分が再構築によって埋まり、全体のノード数が減っている。なお、B-Treeに限らず、AVLTree等他の論理構造を持つインデックスや、インデックスファイル自体に対しても同様に、再利用が行われない空き領域を整理する等の最適化処理を行うことで断片化を解消する。このことにより、検索及び登録時に必要なデータ量が削減され、応答時間が向上する。以上の処理により、インデックス最適化処理を、機器の状態に応じて任意のタイミングで中断および再開可能にする。新インデックス作成中には旧インデックスを上書きしないので突然の電源断や通信断絶時にも中断状態からの復帰が可能である。このことにより、機器の計算資源を効率よく利用してインデックスを最適化させることができる。その結果、データ検索時の応答速度が向上する。本実施形態は、フラッシュメモリ等の更新速度が遅い環境を前提にしたが、RAMドライブ、ハードディスクドライブ、或いは速度改善されたフラッシュメモリ等、任意の環境においても応答時間の向上に効果がある。本実施形態の応用例として、他機器との接続時等において、インデックス最適化処理を他機器と分散、あるいは委託して実施することも、計算資源を有効利用する点で効果的である。また、本実施形態はインデックス最適化処理に限らず、様々なユースケースにおいて適用できる。例えばファイルシステム最適化処理においても適用可能である。この場合、機器の状態検知結果を基に、適切なタイミングでデータ最適化処理の起動、中断及び再開処理を行う。その結果、主機能の性能を劣化させる事なく、外部記憶部1007の空き領域や登録データの断片化を解消する。こうすることで、データ走査時間や書き込み時間遅延を改善する効果がある。第2の実施形態次に、本発明の第2の実施形態として、サムネイル画像構築処理、すなわち縮小画像の作成によって検索応答速度の向上と閲覧画質を両立する方法について詳細に説明する。本実施形態は第1の実施形態と同様の構成を持つ。本実施形態は画像検索等において、閲覧用の縮小画像サムネイルの作成を行う。こうすることで、データ閲覧時の画質と、検索時の応答性能とを両立させることを目的とする。デジタルカメラ等の撮像機器においては、1000万画素を超える高解像度な画像を記録することができる。一方で、このような高画質な画像を閲覧するにはデータ量に比例した計算量が必要となり、多量のデータを連続閲覧する等のユースケースにおいては計算負荷が大きくなる。そのため、Exif領域にはあらかじめ縮小画像が格納されており、こちらを優先的に表示することで高速な画像切り替えを可能にしている。しかしながら、表示デバイスの進歩によって表示解像度が向上し、従来のExif規格の縮小画像を表示するだけでは十分な画質を確保できない場合がある。そこで、本実施形態では、機器状態検知を行うことにより、適切なタイミングで撮像元画像とExif縮小画像の中間解像度で縮小画像を構築しておき、閲覧時に優先的に閲覧することで画質と応答性能を両立する。本実施形態も図10に示したフローチャートの例において適用可能である。充電切断等、機器状態の変化を検知し、ステップS10012の中断処理を行う場合には、中間解像度縮小画像の作成進捗状況を保存しておく。次回の中間解像度縮小画像の作成開始時、ステップS10005において、進捗状況に応じて中間解像度縮小画像の作成を再開する。こうすることで中断時の状態を有効利用して中間解像度縮小画像の作成を円滑に実行できるし、検索時の応答性能と閲覧画質を両立することができる。また、動画データのダイジェスト画像作成処理等においても適用可能である。本実施例と同様に機器の状態に応じて作成することで、主機能の性能を劣化させることなくデータ検索時の利便性を向上させる点で効果的である。その他の実施例また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムを、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータまたはCPUやMPU等がプログラムを読み出して実行する処理である。"