(57)【要約】【課題】記憶装置に格納されたデータへのアクセス効率を向上させる。【解決手段】メモリ１２は、記憶装置１１のセグメント１１ａ，１１ｂ，１１ｃに対応する領域１２ａ，１２ｂ，１２ｃを含む。演算部１３は、発生した各アクセス命令を、領域１２ａ，１２ｂ，１２ｃのうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納する。演算部１３は、領域１２ａ，１２ｂ，１２ｃのうち選択した少なくとも１つの領域に対応するセグメントのデータを、記憶装置１１からメモリ１２上の領域１２ａ，１２ｂ，１２ｃと異なる他の領域にロードし、ロードしたセグメントのデータに対して、選択した領域に格納されているアクセス命令を実行する。【選択図】図１
2015095226.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する複数のセグメントを含む記憶装置と、
前記複数のセグメントに対応する複数の領域を含むメモリと、
発生した複数のアクセス命令を処理する演算部と、
を有し、前記演算部は、
発生した各アクセス命令について、当該アクセス命令を前記メモリ上の前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、情報処理装置。
【請求項２】
前記演算部は、単位時間当たりに発生するアクセス命令の数を監視し、
前記複数の領域のうち１回に選択する領域の数を、前記単位時間当たりに発生するアクセス命令の数に応じて決定する、請求項１記載の情報処理装置。
【請求項３】
前記演算部は、前記単位時間当たりに発生するアクセス命令の数の増加に応じて、前記１回に選択する領域の数を増加させる、請求項２記載の情報処理装置。
【請求項４】
前記演算部は、前記複数の領域のうち２以上の領域を１回に選択する場合、前記選択する２以上の領域を、前記記憶装置上で隣接して配置されている２以上のセグメントに対応する領域とする、請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
コンピュータが実行するデータアクセス方法であって、
前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、データアクセス方法。
【請求項６】
コンピュータに、
前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、データアクセス方法およびプログラムに関する。
【背景技術】
【０００２】
近年、演算装置の高速化・記憶装置の大容量化・ネットワークの広帯域化などのハードウェア性能の向上に伴い、大量のデータを収集して分析することが可能になっている。大量のデータを分析することで、収集したデータから価値ある情報を引き出すことができる場合がある。例えば、インターネットのショッピングサイトでは、ユーザにお勧めの商品を提示するレコメンデーションシステムが用いられることがある。レコメンデーションシステムは、Ｗｅｂサーバからユーザの閲覧履歴や購買履歴を示すログを収集し、ログを分析して同一ユーザが興味をもつ可能性の高い商品の組み合わせを抽出する。
【０００３】
データ分析は、例えば、バッチ処理として実現される。その場合、データ分析システムは、最初に分析対象のデータを収集して記憶装置に蓄積していく。十分なデータが収集されると、データ分析システムは、記憶装置に蓄積されたデータ全体の分析を開始する。このようなバッチ処理では、蓄積されるデータが増えるほど分析時間が長くなる。
【０００４】
大規模データ分析の時間を短縮する方法として、データを分割し、複数のコンピュータを用いて依存関係のないデータ処理を並列に実行することが考えられる。このような並列データ処理を行うプログラムの作成を支援するため、Ｈａｄｏｏｐなどのフレームワークが提案されている。並列データ処理用のフレームワークを用いることで、ユーザは、コンピュータ間の通信などの煩雑な処理の詳細を意識せずにプログラムを作成できる。
【０００５】
また、大規模データ分析の時間は、記憶装置の使用方法によっても変化し得る。これは、分析に使用される大量のデータは、ＨＤＤ（Hard Disk Drive）などランダムアクセスが比較的遅い記憶装置に蓄積されることが多いためである。もし、分析中に参照または更新されるデータを、参照または更新される順序に応じて予め記憶装置上でソートしておくことができれば、ランダムアクセスを減らしてデータアクセスを高速化できる。なお、データアクセスを効率化する方法に関して、次のような技術が提案されている。
【０００６】
例えば、磁気ディスクとキャッシュメモリとを備え、磁気ディスクに記憶されたデータの一部をキャッシュメモリに格納することで読み出しのアクセスを高速化するデータ記憶装置が提案されている。このデータ記憶装置は、同一データへの再アクセスや隣接データへのシーケンシャルアクセスなど、受け付けたアクセスの種別を記録しておき、使用するキャッシュメモリの領域のサイズをアクセスの種別に応じて変更する。
【０００７】
また、ディスク媒体とバッファメモリとを備え、バッファメモリを用いてディスク媒体へのデータ書込のオーバヘッドを低減するディスク記憶装置が提案されている。このディスク記憶装置は、所定サイズ以下のデータをディスク媒体に書き込むライトコマンドを受け付けた場合、当該データをバッファメモリに格納しておく。そして、ディスク記憶装置は、書き込み先のアドレスが近いデータ同士をグループ化し、あるグループに属するデータの量が所定量を超えると当該グループのデータを纏めてディスク媒体に書き込む。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１０−３０１８４７号公報
【特許文献２】特開平１１−３１７００８号公報
【非特許文献】
【０００９】
【非特許文献１】The Apache Software Foundation, "Welcome to Apache Hadoop!", [online], 2012年, [2013年7月23日検索], インターネット<URL: http://hadoop.apache.org/index.pdf>
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ところで、データ分析システムのユーザは、分析結果を１回取得した後に分析対象のデータが追加または更新されると、分析結果をアップデートしたいことが多い。例えば、レコメンデーションシステムは、Ｗｅｂサーバから新たな閲覧履歴や購入履歴を示すログを取得すると、新たな閲覧履歴や購入履歴を分析結果に反映することが好ましい。
【００１１】
このような分析結果のアップデートを従来のバッチ処理で行おうとすると、前回から変わっていない部分も含めて蓄積されたデータ全体を再分析することになる。これに対し、追加または更新された分析対象のデータに関連する分析結果のみアップデートする方法が考えられる。例えば、レコメンデーションシステムは、新たに閲覧または購入された商品と他の商品との組み合わせに限定して商品間の関連度を再計算することが考えられる。このようなデータ処理方法は、インクリメンタルなデータ処理ということもできる。
【００１２】
しかし、インクリメンタルなデータ処理では、記憶装置に格納されている分析対象や前回の分析結果のデータのいずれがアクセスされるかは、新たに収集された分析対象のデータに依存する。このため、インクリメンタルなデータ処理では、参照または更新される順序に応じて予め記憶装置上でデータをソートしておくことが難しく、ランダムアクセスが発生しやすい。よって、データへのアクセス効率が低下しやすいという問題がある。
【００１３】
なお、単に書き込み先のアドレスが近いライトコマンドを纏めて実行するだけでは、ディスク媒体への不連続な書き込みが発生し得ることから、データアクセスの効率に改善の余地がある。また、例えば、新たなログに基づいて商品の閲覧回数または購入数をインクリメントするなど、既存のデータを参照して当該データを更新するような複雑なアクセス命令を実行する場合には、アクセス効率が低下しやすい。
【００１４】
１つの側面では、本発明は、記憶装置に格納されたデータへのアクセス効率を向上できる情報処理装置、データアクセス方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
１つの態様では、記憶装置とメモリと演算部とを有する情報処理装置が提供される。記憶装置は、データを格納する複数のセグメントを含む。メモリは、複数のセグメントに対応する複数の領域を含む。演算部は、発生した複数のアクセス命令を処理する。上記の演算部は、発生した各アクセス命令について、当該アクセス命令をメモリ上の複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納する。演算部は、メモリ上の複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、記憶装置からメモリ上の複数の領域と異なる他の領域にロードし、ロードしたセグメントのデータに対して、選択した領域に格納されているアクセス命令を実行する。
【００１６】
また、１つの態様では、コンピュータが実行するデータアクセス方法が提供される。コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、コンピュータが備えるメモリに複数の領域を確保する。発生した複数のアクセス命令それぞれについて、当該アクセス命令を複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納する。メモリ上の複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、記憶装置からメモリ上の複数の領域と異なる他の領域にロードし、ロードしたセグメントのデータに対して、選択した領域に格納されているアクセス命令を実行する。また、１つの態様では、コンピュータに実行させるプログラムが提供される。
【発明の効果】
【００１７】
１つの側面では、記憶装置に格納されたデータへのアクセス効率が向上する。
【図面の簡単な説明】
【００１８】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】バッチ方式でデータの分析処理を実行する例を示す図である。
【図４】インクリメンタル方式でデータの分析処理を実行する例を示す図である。
【図５】サーバ装置のハードウェア例を示すブロック図である。
【図６】サーバ装置の機能例を示すブロック図である。
【図７】全体命令キューの例を示す図である。
【図８】キー情報テーブルの例を示す図である。
【図９】キャッシュ管理キューの例を示す図である。
【図１０】アクセス命令をセグメント別命令キューに振り分ける例を示す図である。
【図１１】キャッシュするセグメントの数を算出する例を示す図である。
【図１２】アクセス命令を実行する例を示す図である。
【図１３】アクセス命令を生成する処理の例を示すフローチャートである。
【図１４】アクセス命令を振り分ける処理の例を示すフローチャートである。
【図１５】アクセス命令を実行する処理の例を示すフローチャートである。
【図１６】アクセス命令を実行する処理の例を示すフローチャート（続き）である。
【発明を実施するための形態】
【００１９】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。
【００２０】
情報処理装置１０は、記憶装置１１、メモリ１２および演算部１３を有する。記憶装置１１は、メモリ１２よりもランダムアクセスが遅い記憶装置であり、例えば、ＨＤＤなどのディスク媒体を用いた不揮発性の記憶装置である。メモリ１２は、記憶装置１１よりもランダムアクセスが速い記憶装置であり、例えば、ＲＡＭ（Random Access Memory）などの揮発性または不揮発性の半導体メモリである。演算部１３は、例えば、プロセッサである。プロセッサは、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）であってもよく、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの集積回路を含んでもよい。プロセッサは、例えば、メモリ１２に記憶されたプログラムを実行する。また、「プロセッサ」は、２以上のプロセッサの集合（マルチプロセッサ）であってもよい。
【００２１】
記憶装置１１は、データを格納するセグメント１１ａ，１１ｂ，１１ｃを含む。セグメント１１ａ，１１ｂ，１１ｃのサイズは、全て同じでもよいし異なっていてもよい。セグメント１１ａ，１１ｂ，１１ｃに格納される各データ要素は、例えば、キーによって識別される。その場合、キーとセグメントとの対応関係が定義されている。例えば、キーＡ，Ｂのデータ要素はセグメント１１ａに格納され、キーＣ，Ｄのデータ要素はセグメント１１ｂに格納され、キーＥ，Ｆのデータ要素はセグメント１１ｃに格納されると定義される。キーとセグメントの対応関係は、機械的に決めてもよいしユーザが手動で決めてもよい。
【００２２】
メモリ１２は、領域１２ａ，１２ｂ，１２ｃおよびキャッシュ領域１２ｄを含む。領域１２ａ，１２ｂ，１２ｃは、セグメント１１ａ，１１ｂ，１１ｃと一対一に対応する。領域１２ａはセグメント１１ａに対応し、領域１２ｂはセグメント１１ｂに対応し、領域１２ｃはセグメント１１ｃに対応する。領域１２ａ，１２ｂ，１２ｃは、後述するアクセス命令を実行前に一時的に格納しておく。キャッシュ領域１２ｄは、演算部１３の制御に従って、記憶装置１１に含まれる１または２以上のセグメントのデータをキャッシュする。キャッシュ領域１２ｄのサイズは、例えば、メモリ１２の容量、セグメント１つ当たりのサイズ、記憶装置１１に含まれるセグメントの数などを考慮して予め定義される。
【００２３】
演算部１３は、データの到着に伴い発生した複数のアクセス命令を処理する。アクセス命令は、記憶装置１１に格納されたデータに対するアクセスの要求を示し、例えば、アクセス先のデータを識別するキーを含む。各アクセス命令は、単純な読出命令または書込命令であってもよい。また、各アクセス命令は、現在の値に基づいて更新後の値が決定される更新命令や比較命令など、演算および１回ずつのデータの読み書きを伴う命令であってもよい。アクセス命令は、異なるタイミングで適宜発生する。演算部１３は、他の情報処理装置からアクセス命令を適宜受け付けてもよいし、他の情報処理装置から適宜受信するデータに基づいて１または２以上のアクセス命令を生成してもよい。後者の場合として、新たなデータに基づいて、当該新たなデータに関連する既存のデータを更新する場合が挙げられる。
【００２４】
ここで、演算部１３は、１つのアクセス命令が発生すると、そのアクセス命令をすぐに実行するのではなく、当該アクセス命令をメモリ１２上の領域１２ａ，１２ｂ，１２ｃのいずれかに格納する。アクセス命令を格納する領域は、当該アクセス命令が示すアクセス先のデータに応じて決まる。例えば、アクセス命令にキーが含まれる場合、演算部１３は、キーとセグメントとの対応関係に基づいて、領域１２ａ，１２ｂ，１２ｃのうちアクセス先のデータが属するセグメントに対応する領域を判定する。
【００２５】
上記のようにして領域１２ａ，１２ｂ，１２ｃにアクセス命令が溜まると、演算部１３は、領域１２ａ，１２ｂ，１２ｃの一部である１または２以上の領域を選択する。１回に１または２以上の領域が選択され、その領域選択が繰り返し行われる。領域を選択するタイミングは、所定の周期に応じたタイミングでもよいし、１つ前に選択した領域についての下記の処理が完了したタイミングでもよい。また、領域を選択するタイミングは、領域１２ａ，１２ｂ，１２ｃに溜まっているアクセス命令の量に依存してもよい。
【００２６】
好ましくは、演算部１３は、領域１２ａ，１２ｂ，１２ｃのうち格納されているアクセス命令の量が多い領域を優先的に選択する。また、１回に複数の領域を選択する場合、好ましくは、演算部１３は、記憶装置１１上で隣接する複数のセグメントに対応する複数の領域を選択する。例えば、セグメント１１ａとセグメント１１ｂが隣接し、セグメント１１ｂとセグメント１１ｃが隣接しているとする。２つの領域を選択する場合、演算部１３は、領域１２ａと領域１２ｂを選択するか、領域１２ｂと領域１２ｃを選択することが好ましく、領域１２ａと領域１２ｃを選択することは避けた方が好ましい。
【００２７】
１または２以上の領域が選択されると、演算部１３は、選択した領域に対応するセグメントのデータを記憶装置１１からメモリ１２上のキャッシュ領域１２ｄにロードする。このとき、記憶装置１１は、シーケンシャルアクセスによって、対象のセグメントのデータ全体を読み出すことができると期待できる。演算部１３によって複数の領域が選択された場合であっても、当該複数の領域が隣接するセグメントに対応するものであれば、記憶装置１１はシーケンシャルアクセスによってデータを読み出し可能である。
【００２８】
そして、演算部１３は、キャッシュ領域１２ｄにロードされたデータに対して、選択した領域に格納されているアクセス命令（通常は、複数のアクセス命令）を実行する。例えば、演算部１３は、領域１２ｃを選択し、セグメント１１ｃのデータ全体をキャッシュ領域１２ｄにロードする。そして、演算部１３は、キャッシュしたデータに対して、領域１２ｃのアクセス命令を実行する。実行が完了したアクセス命令は、選択した領域から削除してよい。選択した領域のアクセス命令を全て実行した後、演算部１３は、キャッシュ領域１２ｄのデータを元のセグメントに書き戻してもよい。このとき、記憶装置１１は、シーケンシャルアクセスによってデータ全体を書き込むことができると期待できる。
【００２９】
第１の実施の形態の情報処理装置１０によれば、複数のアクセス命令が発生順に実行されるのではなく、セグメント１１ａ，１１ｂ，１１ｃと対応付けてメモリ１２上に設けられた領域１２ａ，１２ｂ，１２ｃに振り分けて格納される。そして、１または２以上のセグメントのデータが記憶装置１１からメモリ１２にロードされ、当該セグメントに対応する領域に溜まったアクセス命令が、ロードされたデータに対して纏めて実行される。
【００３０】
これにより、１または２以上のセグメント分のアクセス命令を纏めて実行するにあたり、記憶装置１１ではデータアクセスがシーケンシャルに行われることになる。例えば、メモリ１２上にある１または２以上の領域が１回選択される毎に、記憶装置１１は、高々１回のシーケンシャルな読み出しと高々１回のシーケンシャルの書き込みとを行えばよい。よって、ランダムアクセスが発生することによるアクセス効率の低下を抑制できる。また、ランダムアクセスが比較的速いメモリ１２にキャッシュされたセグメントのデータに対してアクセス命令が実行されるため、演算および１回ずつのデータの読み書きを伴うようなアクセス命令についても効率的に実行することが可能となる。
【００３１】
なお、演算部１３が１回に選択する領域の数を増やすほど、すなわち、纏めてデータをロードするセグメントの数を増やすほど、一定時間で記憶装置１１が行うシーケンシャルアクセスの回数を減らすことができる。よって、１回に選択する領域の数を増やすほど、記憶装置１１のデータアクセスのオーバヘッドが小さくなり、一定時間で処理できるアクセス命令の数（スループット）を増やすことができる。演算部１３は、単位時間当たりのアクセス命令の発生数に応じて、１回に選択する領域の数を調整してもよい。
【００３２】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムの例を示す図である。第２の実施の形態の情報処理システムは、ユーザに推奨する商品の情報を提示するレコメンデーションシステムである。また、第２の実施の形態の情報処理システムは、インターネットのショッピングサイトとしての機能を有する。以下、“ショッピングサイト”は、第２の実施の形態の情報処理システムを用いる、インターネット上のショッピングサイトを意味する。
【００３３】
第２の実施の形態の情報処理システムは、サーバ装置１００およびクライアント装置２００を有する。サーバ装置１００は、第１の実施の形態の情報処理装置１０の一例である。サーバ装置１００は、ネットワーク２０を介して、クライアント装置２００と接続している。サーバ装置１００の数は、複数であってもよい。
【００３４】
サーバ装置１００は、推奨する商品を分析するサーバコンピュータである。サーバ装置１００は、ショッピングサイトを利用するユーザの購入履歴情報を、定期的または不定期にクライアント装置２００から受信し、受信した購入履歴情報を蓄積する。分析するために十分な購入履歴情報が蓄積されたとき、サーバ装置１００は、蓄積された全購入履歴情報について、１回目の分析処理をバッチ方式により実行する。その後、サーバ装置１００は、２回目以降の購入履歴情報の分析処理を、インクリメンタル方式により定期的または不定期に実施する。インクリメンタル方式とは、前回の処理から新たに受信した購入履歴情報とそれに関係する情報に限定して処理を行うことである。また、サーバ装置１００は、分析結果を示す情報をクライアント装置２００に送信する。
【００３５】
クライアント装置２００は、購入履歴情報を、定期的または不定期にサーバ装置１００へ送信するクライアントコンピュータである。また、クライアント装置２００は、ショッピングサイトのサービスをユーザに提供するＷｅｂサーバとしての機能を有する。クライアント装置２００は、定期的または不定期に、ユーザによる商品の購入履歴情報をサーバ装置１００へ送信する。クライアント装置２００は、購入履歴情報の分析結果を示す情報をサーバ装置１００から受信する。また、クライアント装置２００は、受信した分析結果を示す情報に基づき推奨する商品に関する情報を生成し、生成した情報をユーザに提供する。推奨する商品に関する情報は、例えば、ショッピングサイトを介してユーザに提供されてもよいし、電子メールなどによりユーザに提供されてもよい。
【００３６】
サーバ装置１００が提供する購入履歴情報の分析結果は、任意の２つの商品の間の類似度を含む。類似度は、同じユーザが２つの商品の両方に興味を示す確率を示す。例えば、クライアント装置２００は、クライアント装置２００にアクセスしてきたユーザが過去に購入した商品を特定し、過去に購入された商品と類似度の高い他の商品を当該ユーザに推奨する。また、例えば、クライアント装置２００は、ユーザが現在閲覧している商品を特定し、閲覧中の商品と類似度の高い他の商品を当該ユーザに推奨する。
【００３７】
次に、図３〜４を用いて、サーバ装置１００が、ショッピングサイトにおける購入履歴情報を分析する例について説明する。なお、第２の実施の形態のシステムでは、分析の開始から終了までの時間は問わず、例えば、数分から数十分かかってもよいものとする。
【００３８】
図３は、バッチ方式でデータの分析処理を実行する例を示す図である。図３では、サーバ装置１００が、一定期間蓄積した購入履歴情報について、バッチ方式により分析処理を実行する方法について説明する。サーバ装置１００は、蓄積した購入履歴情報を以下のように分析する。
【００３９】
まず、サーバ装置１００は、蓄積した購入履歴情報から、ユーザ毎集計結果３１を生成する。ユーザ毎集計結果３１は、ショッピングサイトで購入可能な各商品について、一定期間内におけるユーザ毎の購入の有無を集計した結果を示す行列である。ユーザ毎集計結果３１の各行は、ショッピングサイトのユーザを表し、ユーザ毎集計結果３１の各列は、ショッピングサイトで購入可能な商品を表す。ユーザ毎集計結果３１の各成分は、一定期間内にユーザが商品を購入したか否かを表す。ユーザが商品を購入した場合はその成分を“○”（または“１”）で表し、ユーザが商品を購入しなかった場合はその成分を空欄（または“０”）で表す。ユーザ毎集計結果３１は、一般に、“○”の密度が小さい疎行列になる。以下、ユーザ毎集計結果３１において、ユーザを表す行および商品を表す列により対応付けられる成分を“購入フラグ（ユーザ，商品）”と記載する場合がある。
【００４０】
例えば、一定期間内において、ユーザｕ１が商品ｉ１，ｉ３，ｉ５を購入し、ユーザｕ２が商品ｉ４を購入したとする。また、ユーザｕ３が商品ｉ３，ｉ４，ｉ５を購入し、ユーザｕ４が商品ｉ４を購入し、ユーザｕ５が商品ｉ１，ｉ２，ｉ５を購入したとする。この場合、図３のユーザ毎集計結果３１が示すように、購入フラグ（ユーザｕ１，商品ｉ１）、購入フラグ（ユーザｕ１，商品ｉ３）、購入フラグ（ユーザｕ１，商品ｉ５）および購入フラグ（ユーザｕ２，商品ｉ４）は、“○”となる。また、購入フラグ（ユーザｕ３，商品ｉ３）、購入フラグ（ユーザｕ３，商品ｉ４）、購入フラグ（ユーザｕ３，商品ｉ５）および購入フラグ（ユーザｕ４，商品ｉ４）は、“○”となる。さらに、購入フラグ（ユーザｕ５，商品ｉ１）、購入フラグ（ユーザｕ５，商品ｉ２）および購入フラグ（ユーザｕ５，商品ｉ５）は、“○”となる。また、ユーザ毎集計結果３１において、上記以外の成分は、空欄となる。
【００４１】
次に、サーバ装置１００は、ユーザ毎集計結果３１から、商品ペア集計結果３２を生成する。商品ペア集計結果３２は、ショッピングサイトで購入可能な商品のペア（任意の２つの商品の組み合わせ）について、一定期間内にその両方を購入したユーザの数を集計した結果を示す対称行列である。商品ペア集計結果３２の各行および各列は、ショッピングサイトで購入可能な商品を表す。商品ペア集計結果３２の各成分は、２つの商品の両方を一定期間内に購入したユーザの数を表す。以下、商品ペア集計結果３２において、商品のペアに対応する成分を“ユーザ数（商品（行），商品（列））”と記載する場合がある。なお、同じ商品の組に対応する対角成分（例えば、ユーザ数（商品ｉ１，商品ｉ１））は、その商品を購入したユーザの数を表す。
【００４２】
例えば、図３のユーザ毎集計結果３１が示すように、商品ｉ１を購入したユーザは、ユーザｕ１およびユーザｕ５の２人である。そのため、図３の商品ペア集計結果３２が示すように、ユーザ数（商品ｉ１，商品ｉ１）は２となる。また、商品ｉ１および商品ｉ２を購入したユーザは、ユーザｕ５の１人である。そのため、ユーザ数（商品ｉ１，商品ｉ２）は１となる。同様に集計した結果、ユーザ数（商品ｉ１，商品ｉ３）は１となり、ユーザ数（商品ｉ１，商品ｉ４）は０となり、ユーザ数（商品ｉ１，商品ｉ５）は２となる。
【００４３】
また、ユーザ数（商品ｉ２，商品ｉ２）は１となる。また、ユーザ数（商品ｉ２，商品ｉ３）は０となり、ユーザ数（商品ｉ２，商品ｉ４）は０となり、ユーザ数（商品ｉ２，商品ｉ５）は１となる。また、ユーザ数（商品ｉ３，商品ｉ３）は２となり、ユーザ数（商品ｉ３，商品ｉ４）は１となり、ユーザ数（商品ｉ３，商品ｉ５）は２となる。さらに、ユーザ数（商品ｉ４，商品ｉ４）は３となり、ユーザ数（商品ｉ４，商品ｉ５）は１となり、ユーザ数（商品ｉ５，商品ｉ５）は３となる。
【００４４】
なお、ペアとなる商品の間の順序はユーザ数の集計に影響しないため、商品ペア集計結果３２は対称行列となる。このため、上記の各成分は、行と列を入れ替えた成分と同一の値となる。例えば、ユーザ数（商品ｉ１，商品ｉ２）とユーザ数（商品ｉ２，商品ｉ１）とは、同一の値となる。なお、商品ペア集計結果３２は、下三角の領域または上三角の領域を省略した三角行列であってもよい。この場合、対角成分を除き、上記の各成分について行と列とを入れ替えた成分には、０が設定される。
【００４５】
次に、サーバ装置１００は、商品ペア集計結果３２から、類似度集計結果３３を生成する。類似度集計結果３３は、ショッピングサイトで購入可能な商品のペアにおいて、２つの商品の間の類似度を示す対称行列である。類似度は、２つの商品の両方に同一ユーザが興味をもつ確率を示し、図３の計算方法では、２つの商品の両方を同一ユーザが購入する確率を示す。類似度を算出には、ｔａｎｉｍｏｔｏ係数を用いることができる。例えば、商品ｉ１と商品ｉ２の類似度についてｔａｎｉｍｏｔｏ係数を用いて表すと、“ユーザ数（商品ｉ１，商品ｉ２）÷（ユーザ数（商品ｉ１，商品ｉ１）＋ユーザ数（商品ｉ２，商品ｉ２）−ユーザ数（商品ｉ１，商品ｉ２））”となる。なお、類似度の算出には、ｏｃｈｉａｉ係数やｓｏｒｅｎｓｅｎ係数など別の係数が用いられてもよい。
【００４６】
類似度集計結果３３の各行および各列は、ショッピングサイトで購入可能な商品を表す。類似度集計結果３３の各成分は、２つの商品の間の類似度を表す。以下、類似度集計結果３３において、商品を表す行および列により対応付けられる成分を“類似度（商品（行），商品（列））”と記載する場合がある。なお、同じ商品の組（対角成分）については、類似度を計算しない。
【００４７】
例えば、図３の類似度集計結果３３が示すように、類似度（商品ｉ１，商品ｉ２）は、“１／（２＋１−１）＝１／２”となる。同様に集計した結果、類似度（商品ｉ１，商品ｉ３）は１／３となり、類似度（商品ｉ１，商品ｉ４）は０となり、類似度（商品ｉ１，商品ｉ５）は２／３となる。また、類似度（商品ｉ２，商品ｉ３）は０となり、類似度（商品ｉ２，商品ｉ４）は０となり、類似度（商品ｉ２，商品ｉ５）は１／３となる。また、類似度（商品ｉ３，商品ｉ４）は１／４となり、類似度（商品ｉ３，商品ｉ５）は２／３となる。さらに、類似度（商品ｉ４，商品ｉ５）は１／５となる。
【００４８】
なお、ペアとなる商品の間の順序は類似度の計算に影響しないため、類似度集計結果３３は対称行列となる。このため、上記の各成分は、行と列を入れ替えた成分と同一の値となる。例えば、類似度（商品ｉ１，商品ｉ２）と類似度（商品ｉ２，商品ｉ１）とは、同一の値となる。なお、類似度集計結果３３は、下三角の領域または上三角の領域を省略した三角行列であってもよい。この場合、対角成分を除き、上記の各成分について行と列とを入れ替えた成分には、０が設定される。
【００４９】
クライアント装置２００は、類似度集計結果３３をサーバ装置１００から受信する。クライアント装置２００は、例えば、ユーザがショッピングサイトにログインしたときに、ログインしたユーザの購入履歴情報および受信した類似度集計結果３３を示す情報に基づいて、以下のように推奨する商品を特定する。
【００５０】
まず、クライアント装置２００は、ショッピングサイトにログインしたユーザが過去に購入した商品毎に、類似度が閾値（例えば、１／２）より大きい他の商品を、推奨する商品と特定する。例えば、過去に商品ｉ１，ｉ２，ｉ５を購入したユーザｕ５がログインしたとする。この場合、図３の類似度集計結果３３が示すように、商品ｉ１との類似度が閾値より大きいのは商品ｉ５である。また、商品ｉ２との類似度が閾値より大きい商品は存在せず、商品ｉ５との類似度が閾値より大きいのは商品ｉ１，ｉ３である。そのため、クライアント装置２００は、例えば、ユーザｕ５がまだ購入していない商品ｉ３を推奨する商品と特定する。そして、特定された各商品の情報をユーザに提供する。この場合、例えば、ユーザｕ５がログイン後に閲覧するＷｅｂページには、商品ｉ３に関する情報が表示される。
【００５１】
また、クライアント装置２００は、ショッピングサイトについて、ユーザが閲覧している商品との類似度が高い他の商品を、推奨する商品として特定してもよい。この場合、ユーザに推奨する商品の情報は、例えば、ユーザが閲覧している商品の情報と合わせて同じＷｅｂページに表示される。
【００５２】
なお、サーバ装置１００がユーザに推奨する商品を特定してもよい。この場合、クライアント装置２００は、ログインしたユーザを示す情報やユーザが閲覧している商品を示す情報をサーバに送信する。そして、サーバ装置１００は、受信したユーザを示す情報や商品を示す情報などに基づき、上記のように推奨する商品を特定し、特定した商品を示す情報をクライアント装置２００に送信する。
【００５３】
ここで、クライアント装置２００は、サーバ装置１００が１回目の分析処理を行った後も、ショッピングサイトの運営に伴って購入履歴情報を継続して生成する。サーバ装置１００は、１回目の分析処理に利用した購入履歴情報に加えて、新たに生成された購入履歴情報も反映した、最新の分析結果をクライアント装置２００に提供することが好ましい。ただし、上記のようなバッチ方式による分析処理を繰り返すことは、複数回の分析処理の間で同じ購入履歴情報が重複して分析されることになり、効率性に改善の余地がある。分析結果に含まれるデータの中で、新たに生成された購入履歴情報の影響を受けるデータは一部分であるため、当該影響を受ける部分のみ更新できれば効率性が上がる。
【００５４】
そこで、第２の実施の形態のシステムでは、サーバ装置１００は、全ての商品のペアではなく、新たに受信した購入履歴情報が示す商品と他の商品とのペアに限定して、類似度を再計算するようにする。以下、このように、追加または更新された分析対象のデータに関連する分析結果のみ更新する分析処理の実行方式を、“インクリメンタル方式”と記載する場合がある。
【００５５】
図４は、インクリメンタル方式でデータの分析処理を実行する例を示す図である。
サーバ装置１００には、１回目の分析処理が行われることで、ユーザ毎集計結果３１と、商品ペア集計結果３２と、類似度集計結果３３とが記憶されている。この状態で、ユーザｕ４が商品ｉ２を購入したことを示す購入履歴情報が追加されたとき、サーバ装置１００は、以下のように、インクリメンタル方式による分析処理により、追加された購入履歴情報の影響を受ける類似度を更新する。
【００５６】
まず、サーバ装置１００は、図４のユーザ毎集計結果３１が示すように、購入フラグ（ユーザｕ４，商品ｉ２）を“○”で更新する。
次に、サーバ装置１００は、更新した購入フラグ（ユーザｕ４，商品ｉ２）に基づき、商品ペア集計結果３２を更新する。商品ペア集計結果の全成分うち、購入フラグ（ユーザｕ４，商品ｉ２）が影響する可能性のある成分は、ユーザ数（商品ｉ２，商品ｉ１〜ｉ５）およびユーザ数（商品ｉ１〜ｉ５，商品ｉ２）である。
【００５７】
また、図４のユーザ毎集計結果３１が示すように、ユーザｕ４が以前に購入した商品は、商品ｉ４である。そのため、サーバ装置１００は、上記の成分のうち、ユーザ数（商品ｉ２，商品ｉ２）、ユーザ数（商品ｉ２，商品ｉ４）およびユーザ数（商品ｉ４，商品ｉ２）を更新する。すなわち、ユーザｕ４が商品ｉ２を購入することに伴い、これらの商品ペアのユーザ数を１だけ加算（インクリメント）する。その結果、図４の商品ペア集計結果３２が示すように、ユーザ数（商品ｉ２，商品ｉ２）が１から２に更新され、ユーザ数（商品ｉ２，商品ｉ４）が０から１に更新され、ユーザ数（商品ｉ４，商品ｉ２）が０から１に更新される。
【００５８】
そして、サーバ装置１００は、更新したユーザ数（商品ｉ２，商品ｉ２）、ユーザ数（商品ｉ２，商品ｉ４）およびユーザ数（商品ｉ４，商品ｉ２）に基づき、類似度集計結果３３を更新する。類似度集計結果３３の全成分のうち、ユーザ数（商品ｉ２，商品ｉ２）が影響する成分は、類似度（商品ｉ２，商品ｉ１〜商品ｉ５）および類似度（商品ｉ１〜ｉ５，商品ｉ２）である。また、ユーザ数（商品ｉ２，商品ｉ４）およびユーザ数（商品ｉ４，商品ｉ２）が影響する成分も、上記範囲に含まれる。
【００５９】
そのため、サーバ装置１００は、類似度集計結果３３の全成分のうち上記の各成分を再計算する。ただし、ユーザ数（商品ｉ２，商品ｉ３）およびユーザ数（商品ｉ３，商品ｉ２）は０であるため、類似度（商品ｉ２，商品ｉ３）および類似度（商品ｉ３，商品ｉ２）の分子は０のままであり、再計算しなくてよい。その結果、図４の類似度集計結果３３が示すように、類似度（商品ｉ２，商品ｉ１）が１／２から１／３に更新され、類似度（商品ｉ２，商品ｉ４）が０から１／４に更新され、類似度（商品ｉ２，商品ｉ５）が１／３から１／４に更新される。また、類似度（商品ｉ１，商品ｉ２）も１／３に更新され、類似度（商品ｉ４，商品ｉ２）も１／４に更新され、類似度（商品ｉ５，商品ｉ２）も１／４に更新される。
【００６０】
このように、サーバ装置１００がバッチ方式による分析処理の実行の際にアクセスする行列の成分の数は、“５×５＋５×５＋４×５＝７０”となる。一方、サーバ装置１００がインクリメンタル方式による分析処理の実行の際にアクセスする行列の成分の数は、“１＋３＋６＝１０”となる。すなわち、中間処理結果や分析結果などのデータに含まれる７０の成分のうち、新たな購入履歴情報の受信に伴って実際に変更される成分の数は１０となる。そのため、２回目以降の分析処理をインクリメンタル方式により実行することで、更新対象となる行列の成分の数が減る。そのため、分析処理の効率が上がる。
【００６１】
ここで、購入履歴情報、ユーザ毎集計結果３１、商品ペア集計結果３２および類似度集計結果３３などのデータ（以下、分析データと言うことがある）は、サーバ装置１００の備えるＨＤＤなどの不揮発性の記憶装置に記憶される。
【００６２】
サーバ装置１００がバッチ方式で分析処理を行うとき、分析データは、分析処理によりアクセスされる順に予めソートしておき、ソートされた順に予めＨＤＤ上に物理的に配置しておくことが可能である。これにより、分析処理の際、シーケンシャルアクセスにより、分析データにアクセスできるため、効率よくＨＤＤへアクセスできる。
【００６３】
しかし、インクリメンタル方式による分析処理の場合、ＨＤＤに格納されている分析データのうちどのデータがアクセスされるかは、新たに購入履歴情報が受信されるまで分からない。このため、インクリメンタル方式では、参照または更新される順序に応じて予めＨＤＤ上で分析データをソートしておくことが難しく、ランダムアクセスが発生しやすい。よって、インクリメンタル方式は、バッチ方式に比べＨＤＤ上の分析データへのアクセス効率に改善の余地がある。
【００６４】
図５〜１４では、サーバ装置１００が、インクリメンタル方式による分析処理において、ＨＤＤへのランダムアクセスを抑制する方法について説明する。
図５は、サーバ装置のハードウェア例を示すブロック図である。サーバ装置１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６および通信インタフェース１０７を有する。これらのユニットは、サーバ装置１００内でバス１０８に接続されている。なお、プロセッサ１０１は、第１の実施の形態の演算部１３の一例である。また、ＲＡＭ１０２は、第１の実施の形態のメモリ１２の一例である。また、ＨＤＤ１０３は、第１の実施の形態の記憶装置１１の一例である。
【００６５】
プロセッサ１０１は、プログラムの命令を実行する演算器を含むプロセッサであり、例えばＣＰＵである。プロセッサ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードしてプログラムを実行する。なお、プロセッサ１０１は複数のプロセッサコアを備えてもよい。また、サーバ装置１００は、複数のプロセッサを備えてもよい。また、サーバ装置１００は、複数のプロセッサまたは複数のプロセッサコアを用いて並列処理を行ってもよい。また、２以上のプロセッサの集合、ＦＰＧＡやＡＳＩＣなどの専用回路、２以上の専用回路の集合、プロセッサと専用回路の組み合わせなどを「プロセッサ」と呼んでもよい。
【００６６】
ＲＡＭ１０２は、プロセッサ１０１が実行するプログラムやプログラムから参照されるデータを一時的に記憶する揮発性メモリである。なお、サーバ装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個の揮発性メモリを備えてもよい。
【００６７】
ＨＤＤ１０３は、ＯＳ（Operating System）やファームウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムおよびデータを記憶する不揮発性の記憶装置である。なお、サーバ装置１００は、フラッシュメモリなどの他の種類の記憶装置を備えてもよく、複数個の不揮発性の記憶装置を備えてもよい。
【００６８】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、サーバ装置１００に接続されたディスプレイ４１に画像を出力する。ディスプレイ４１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００６９】
入力信号処理部１０５は、サーバ装置１００に接続された入力デバイス４２から入力信号を取得し、プロセッサ１０１に通知する。入力デバイス４２としては、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００７０】
ディスクドライブ１０６は、記録媒体４３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体４３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、プロセッサ１０１からの命令に従って、記録媒体４３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００７１】
通信インタフェース１０７は、ネットワーク２０などのネットワークを介して他の情報処理装置（例えば、クライアント装置２００など）と通信を行う。
なお、サーバ装置１００はディスクドライブ１０６を備えていなくてもよく、専ら他の端末装置から制御される場合には、画像信号処理部１０４や入力信号処理部１０５を備えていなくてもよい。また、ディスプレイ４１や入力デバイス４２は、サーバ装置１００の筐体と一体に形成されていてもよい。
【００７２】
なお、クライアント装置２００も、サーバ装置１００と同様のハードウェアを用いて実現できる。
図６は、サーバ装置の機能例を示すブロック図である。サーバ装置１００は、分析データ記憶部１１０、全体命令キュー１２０、セグメント別命令キュー群１３０、管理情報記憶部１４０、キャッシュ領域１５０およびスケジューラ１６０を有する。分析データ記憶部１１０は、ＨＤＤ１０３に確保された記憶領域として実現される。全体命令キュー１２０、セグメント別命令キュー群１３０、管理情報記憶部１４０およびキャッシュ領域１５０は、ＲＡＭ１０２に確保された記憶領域として実現される。スケジューラ１６０は、プロセッサ１０１が実行するプログラムのモジュールとして実現される。
【００７３】
また、セグメント別命令キュー群１３０は、第１の実施の形態の領域１２ａ，１２ｂ，１２ｃの集合の一例である。また、キャッシュ領域１５０は、第１の実施の形態のキャッシュ領域１２ｄの一例である。
【００７４】
分析データ記憶部１１０は、分析処理に用いられる分析データを記憶する。分析データには、分析対象（例えば、購入履歴情報）、中間処理結果（例えば、ユーザ毎集計結果３１および商品ペア集計結果３２）および分析結果（例えば、類似度集計結果３３）が含まれ得る。分析データは、アクセス命令により参照および更新される。第２の実施の形態のシステムにおいて、アクセス命令の中には、分析データを取得し、取得した分析データについてアクセス命令で指定される四則演算などの演算を実行し、演算結果で分析データを更新することを１つの命令として表現したものが含まれる。すなわち、アクセス命令には、１回ずつのデータ入出力と演算とを伴う命令が含まれる。なお、アクセス命令は、上記のような演算を伴う命令の他、読出命令や書込命令などの単純な命令や、比較命令などであってもよい。なお、第２の実施の形態のシステムにおいて、あるアクセス命令の結果は、他のアクセス命令の結果に影響しないものとする。すなわち、同時期に生成された複数のアクセス命令は任意の順序で実行してよい。
【００７５】
１つのアクセス命令によるアクセス先の分析データ（１つの「バリュー」）は、キーによって識別される。キーによって識別される１つのバリューは、例えば、行列の１つの行を表すものであってもよいし、行列の１つの成分を表すものであってもよい。これらの各キーは、ＨＤＤ１０３上の複数のセグメントのいずれかに対応付けされる。セグメントとは、ＨＤＤ１０３上の記憶領域を所定のデータサイズに分割した記憶領域である。キーに対応するバリューは、複数のセグメントのうちキーに対応付けされたセグメントに配置される。なお、第２の実施の形態のシステムでは、各セグメントは、同じ容量で分割されているが、異なる容量で分割されていてもよい。
【００７６】
分析データを複数のセグメントに分散して配置する際、続けて更新される可能性の高い分析データを同じセグメントに配置することが好ましい。例えば、商品の識別情報をキーとすると、同じジャンルの商品についての分析データ（当該商品のキーに対応付けられたバリュー）を同じセグメントに配置するようにする。
【００７７】
キーとセグメントとの対応付けは、サーバ装置１００の管理者により任意に決定されてもよいし、同時期に更新された分析データに関する統計情報などを用いて機械的に決定されてもよい。
【００７８】
全体命令キュー１２０は、アクセス命令を格納するためのキューである。全体命令キュー１２０には、スケジューラ１６０により生成されるアクセス命令が格納される。
セグメント別命令キュー群１３０は、セグメント別命令キューの集合である。セグメント別命令キューは、全体命令キュー１２０と同様にアクセス命令が格納するためのキューである。複数のセグメント別命令キューには、全体命令キュー１２０上のアクセス命令がスケジューラ１６０により振り分けられる。また、セグメント別命令キューとＨＤＤ１０３上のセグメントとは、１対１に対応付けられている。また、複数のセグメント別命令キューは、セグメントがＨＤＤ１０３に配置されている物理的な順序と対応する順序で、ＲＡＭ１０２上の記憶領域に並べて配置されている。また、各セグメント別命令キューには、ＲＡＭ１０２上に配置されている順に連続した識別子（例えば、連続する識別番号）が割り当てられている。
【００７９】
管理情報記憶部１４０は、分析データのキーと当該分析データが格納されているセグメントとセグメント別命令キューとの対応関係を示す情報を格納するためのキー情報テーブルを記憶する。また、管理情報記憶部１４０は、キャッシュ領域１５０上にロードした（キャッシュされた）セグメントを管理するためのキャッシュ管理キューを記憶する。
【００８０】
キャッシュ領域１５０は、ＨＤＤ１０３上の全セグメントのうち、一部のセグメントにおける分析データをキャッシュするための領域である。なお、“キャッシュする”は、ＨＤＤ１０３からキャッシュ領域１５０へデータを一時的にロードすることを意味する。キャッシュ領域１５０には、スケジューラ１６０がアクセス命令によりアクセスしようとする分析データを含むセグメント全体がキャッシュされる。
【００８１】
スケジューラ１６０は、購入履歴情報の受信からアクセス命令の実行までの一連の処理を行う。スケジューラ１６０は、イベント処理部１６１、セグメント管理部１６２、キュー管理部１６３およびアクセス命令処理部１６４を有する。
【００８２】
イベント処理部１６１は、クライアント装置２００から購入履歴情報を受信する。イベント処理部１６１は、受信した購入履歴情報を分析しアクセス命令を生成する。生成されるアクセス命令は、１つの購入履歴情報に対して１つでもよいし複数でもよい。また、イベント処理部１６１は、受信した購入履歴情報を、所定のアプリケーションプログラムにより解析することで、アクセス命令を抽出してもよい。イベント処理部１６１は、生成したアクセス命令を全体命令キュー１２０へ格納する。
【００８３】
また、イベント処理部１６１は、全体命令キュー１２０からアクセス命令を取り出す。そして、イベント処理部１６１は、取り出したアクセス命令の振り分け先となるセグメント別命令キューの判定を、セグメント管理部１６２に要求する。また、イベント処理部１６１は、アクセス命令の振り分け先として判定されたセグメント別命令キューに、取り出したアクセス命令を振り分けるようキュー管理部１６３に要求する。
【００８４】
セグメント管理部１６２は、イベント処理部１６１の要求に応じて、キー情報テーブルに格納されている情報に基づき、取り出されたアクセス命令の振り分け先となるセグメント別命令キューを判定する。振り分け先のセグメント別命令キューは、アクセス先の分析データが格納されているセグメントに対応するセグメント別命令キューである。そして、セグメント管理部１６２は、振り分け先と判定したセグメント別命令キューを示す情報を、イベント処理部１６１へ出力する。
【００８５】
キュー管理部１６３は、イベント処理部１６１の要求に応じて、振り分け先と判定されたセグメント別命令キューに、アクセス命令を格納する。また、キュー管理部１６３は、単位時間当たりのセグメント別命令キューへのアクセス命令の入力命令数（以下、単位時間当たりの入力命令数と記載することがある）を監視する。また、キュー管理部１６３は、アクセス命令処理部１６４の要求に応じて、監視した単位時間当たりの入力命令数をアクセス命令処理部１６４へ出力する。
【００８６】
アクセス命令処理部１６４は、以下のようにセグメント別命令キュー内のアクセス命令を実行する。以下、セグメント別命令キュー内の各アクセス命令の実行処理を、“アクセス命令実行処理”と記載する場合がある。
【００８７】
まず、アクセス命令処理部１６４は、各セグメント別命令キュー内のアクセス命令の数に基づいて、１以上のセグメント別命令キューを選択する。選択するセグメント別命令キューの数は、キュー管理部１６３から出力された単位時間当たりの入力命令数値および、単位時間当たりの出力命令数に基づき、アクセス命令処理部１６４により算出される。“単位時間当たりの出力命令数”は、セグメント別命令キューから出力される（アクセス命令処理部１６４により処理される）ことが予想される単位時間当たりのアクセス命令の数を意味する。
【００８８】
次に、アクセス命令処理部１６４は、キャッシュ管理キュー内の情報が示すセグメントのキャッシュ状況に基づき、選択したセグメント別命令キューに対応するセグメントのデータをキャッシュする。この際、キャッシュするための空き領域がキャッシュ領域１５０上にない場合は、最も先にロードされた（古い）キャッシュ領域１５０上のセグメントのデータを、分析データ記憶部１１０に書き戻す。
【００８９】
そして、アクセス命令処理部１６４は、選択したセグメント別命令キュー内の各アクセス命令を、キャッシュされたセグメントのデータに対して纏めて実行する。
第２の実施の形態のシステムにおいて、アクセス命令実行処理は、例えば、前回選択したセグメント別命令キューについてのアクセス命令実行処理が終了する度に実行される。なお、イベント処理部１６１によりアクセス命令が生成される頻度が比較的低い場合、アクセス命令実行処理は、所定の周期で間欠的に実行されてもよい。
【００９０】
次に、図７〜９を用いて、サーバ装置１００が用いるテーブルやキューについて説明する。
図７は、全体命令キューの例を示す図である。全体命令キュー１２０は、イベント処理部１６１により生成されるアクセス命令を格納するためのキューである。図７で示すように、全体命令キュー１２０に格納されるアクセス命令は、先に格納された古いアクセス命令ほど下に記載され、後に格納された新しいアクセス命令ほど上に記載されるものとする。以下、他の図に記載されている全体命令キュー１２０やセグメント別命令キューについても同様である。
【００９１】
例えば、キーＢに対応する分析データ（キーＢによって識別されるバリュー）に対して５を減算するアクセス命令、キーＡに対応する分析データに対して１０を加算するアクセス命令の順に、アクセス命令が生成されたとする。この場合、図７の全体命令キュー１２０が示すように、まず、キーの項目が“キーＢ”であり、種別の項目が“減算”であり、パラメータの項目が“５”であるアクセス命令が格納される。続けてその上に、キーの項目が“キーＡ”であり、種別の項目が“加算”であり、パラメータの項目が“１０”であるアクセス命令が格納される。また、この場合、図７の全体命令キュー１２０からアクセス命令を取り出す際、古いアクセス命令から順に（キーの項目が“キーＢ”であるアクセス命令、キーの項目が“キーＡ”であるアクセス命令の順に）取り出される。
【００９２】
全体命令キュー１２０に格納されるアクセス命令は、キー、種別およびパラメータの項目を有する。また、セグメント別命令キュー内のアクセス命令についても同様である。
キーの項目には、アクセス先の分析データを識別するためのキーが設定される。種別の項目には、アクセス命令の種別が設定される。アクセス命令の種別としては、加算・減算・乗算・除算などの四則演算や、その他の演算の種別が挙げられる。パラメータの項目には、アクセス命令の種別に応じたパラメータ（例えば、加数・減数・乗数・除数など、現在のバリューと組み合わせて使用される演算のオペランド）が設定される。
【００９３】
例えば、図７の全体命令キュー１２０におけるキーの項目が“キーＡ”であるアクセス命令を実行する場合、まず、キーＡに対応する分析データを読み出し、読み出した分析データに対し１０を加算する処理を実行する。次に、加算処理の結果でキーＡに対応する分析データを更新する。また、キーの項目が“キーＢ”であるアクセス命令を実行する場合、まず、キーＢに対応する分析データを読み出し、読み出した分析データに対し５を減算する処理を実行する。次に、減算処理の結果でキーＢに対応する分析データを更新する。
【００９４】
なお、アクセス命令の種別は、四則演算命令の他、読出命令や書込命令などの単純な命令や、比較命令などのその他の命令であってもよい。
図８は、キー情報テーブルの例を示す図である。キー情報テーブル１４１は、分析データ記憶部１１０に記憶されている分析データのキーに関する情報を格納する。キー情報テーブル１４１は、管理情報記憶部１４０に記憶されている。
【００９５】
キー情報テーブル１４１は、キー、セグメントおよびキューの項目を有する。キーの項目には、分析データを識別するためのキーが設定される。セグメントの項目には、キーによって識別される分析データが格納されたセグメントの識別子が設定される。キューの項目には、セグメントに対応するセグメント別命令キューの識別子が設定される。セグメント管理部１６２は、キー情報テーブル１４１を参照して、アクセス命令に含まれるキーから、当該アクセス命令を格納するセグメント別命令キューを特定できる。
【００９６】
図９は、キャッシュ管理キューの例を示す図である。キャッシュ管理キュー１４２は、キャッシュ領域１５０上にロードされている（キャッシュされている）セグメントに関する情報を格納する。図９で示すように、キャッシュ管理キュー１４２に格納されるセグメントに関する情報は、先に格納された古いセグメントほど下に記載され、後に格納された新しいセグメントほど上に記載されるものとする。以下、他の図に記載されているキャッシュ管理キュー１４２についても同様である。
【００９７】
キャッシュ管理キュー１４２は、セグメントの項目を有する。セグメントの項目には、分析データがキャッシュ領域１５０に現在キャッシュされているセグメントを識別するための識別子が設定される。キャッシュ領域１５０からいずれかのセグメントの分析データを追い出す場合には、キャッシュ時期が古いセグメントから順に選択される。ただし、キャッシュ領域１５０上でのアクセス状況を考慮したＬＲＵ（Least Recently Used）アルゴリズムなど、他のキャッシュアルゴリズムを用いることもできる。
【００９８】
次に、図１０〜１２を用いて、サーバ装置１００の各機能について説明する。
図１０は、アクセス命令をセグメント別命令キューに振り分ける例を示す図である。図１０では、全体命令キュー１２０に格納されているアクセス命令を、セグメント別命令キュー１３１ａ，１３１ｂに振り分ける例について説明する。セグメント別命令キュー１３１ａ，１３１ｂは、セグメント別命令キュー群１３０に含まれるものであり、分析データ記憶部１１０上のセグメントＳＥＧ＃１，ＳＥＧ＃２に対応するものである。セグメント別命令キュー１３１ａの識別子は、“ＱＵＥ＃１”であり、セグメント別命令キュー１３１ｂの識別子は、“ＱＵＥ＃２”である。
【００９９】
全体命令キュー１２０に格納されているアクセス命令は、スケジューラ１６０により、アクセス命令に含まれるキーと対応付けられているセグメント別命令キューへ振り分けられる。キーとセグメント別命令キューとの対応関係は、キー情報テーブル１４１に記載されている。
【０１００】
例えば、キー情報テーブル１４１には、キーの項目に“キーＡ”が設定され、キューの項目に“ＱＵＥ＃１”が設定されているレコードが存在している。また、キー情報テーブル１４１には、キーの項目に“キーＢ”が設定され、キューの項目に“ＱＵＥ＃１”が設定されているレコードが存在している。さらに、キー情報テーブル１４１には、キーの項目に“キーＣ”が設定され、キューの項目に“ＱＵＥ＃２”が設定されているレコードが存在している。
【０１０１】
この状態で、キーの項目に“キーＡ”が設定されているアクセス命令と、キーの項目に“キーＢ”が設定されているアクセス命令と、キーの項目に“キーＣ”が設定されているアクセス命令とが、全体命令キュー１２０に格納されているとする。
【０１０２】
この場合、“キーＡ”および“キーＢ”に対応するキューは“ＱＵＥ＃１”であるため、“キーＡ”が設定されているアクセス命令と、“キーＢ”が設定されているアクセス命令とは、セグメント別命令キュー１３１ａに振り分けられる。また、“キーＣ”に対応するキューは“ＱＵＥ＃２”であるため、“キーＣ”が設定されているアクセス命令は、スケジューラ１６０によりセグメント別命令キュー１３１ｂに振り分けられる。
【０１０３】
図１１は、キャッシュするセグメントの数を算出する例を示す図である。セグメント１１１ａ，１１１ｂ，１１１ｃ，１１１ｄは、順に隣接したＨＤＤ１０３上の領域に配置されている。すなわち、セグメント１１１ａはセグメント１１１ｂと隣接し、セグメント１１１ｂはセグメント１１１ｃと隣接し、セグメント１１１ｃはセグメント１１１ｄと隣接する。セグメント１１１ａの識別子は、“ＳＥＧ＃１”であり、セグメント１１１ｂの識別子は、“ＳＥＧ＃２”である。また、セグメント１１１ｃの識別子は、“ＳＥＧ＃３”であり、セグメント１１１ｄの識別子は、“ＳＥＧ＃４”である。また、セグメント１１１ａには、“キーＡ”および“キーＢ”に対応する分析データが配置されている。また、セグメント１１１ｂには、“キーＣ”および“キーＤ”に対応する分析データが配置されている。また、セグメント１１１ｃには、“キーＥ”および“キーＦ”に対応する分析データが配置されている。また、セグメント１１１ｄには、“キーＧ”および“キーＨ”に対応する分析データが配置されている。
【０１０４】
また、キャッシュ領域１５０には、セグメント１１１ａ，１１１ｂの分析データがロードされている。また、セグメント別命令キュー群１３０には、セグメント別命令キュー１３１ａ〜１３１ｄが含まれる。セグメント別命令キュー１３１ｃの識別子は、“ＱＵＥ＃３”であり、セグメント別命令キュー１３１ｄの識別子は、“ＱＵＥ＃４”である。
【０１０５】
また、セグメント別命令キュー１３１ａには、２のアクセス命令が格納され、セグメント別命令キュー１３１ｂには１のアクセス命令が格納されている。セグメント別命令キュー１３１ｃには、３のアクセス命令が格納され、セグメント別命令キュー１３１ｄには２のアクセス命令が格納されている。
【０１０６】
また、セグメント別命令キュー１３１ａは、セグメント１１１ａに対応し、セグメント別命令キュー１３１ｂは、セグメント１１１ｂに対応する。セグメント別命令キュー１３１ｃは、セグメント１１１ｃに対応し、セグメント別命令キュー１３１ｄは、セグメント１１１ｄに対応する。
【０１０７】
なお、セグメント別命令キュー１３１ａ，１３１ｂ，１３１ｃ，１３１ｄは、順にＲＡＭ１０２上に並べて配置されていてもよいし、任意の順序で配置されていてもよい。また、セグメント別命令キュー１３１ａ，１３１ｂ，１３１ｃ，１３１ｄの配置順序は、セグメント１１１ａ，１１１ｂ，１１１ｃ，１１１ｄと対応してもよいし、任意の順序でもよい。
【０１０８】
このとき、アクセス命令処理部１６４は、以下のように、単位時間当たりの出力命令数ＰＲを算出する。
まず、アクセス命令処理部１６４は、ＨＤＤ１０３上のセグメントの分析データに対するアクセス処理時間ＰＴを算出する。アクセス処理時間ＰＴは、指定した数のＨＤＤ１０３上のセグメントのデータをキャッシュする時間と、キャッシュされたセグメントのデータをＨＤＤ１０３に書き戻す時間との合計である。具体的には、アクセス処理時間ＰＴは、“（レイテンシＬ＋平均データサイズＤ×１セグメント当たりのデータ数Ｓ×キューの選択数ＮＱ／スループットＴ）×２”により算出される。
【０１０９】
レイテンシＬは、ＨＤＤ１０３上の分析データに対してアクセス命令が要求されてから、ＨＤＤ１０３上の分析データへのアクセスが開始されるまでの間の遅延時間である。レイテンシＬには、例えば、ＨＤＤ１０３におけるヘッドのシーク時間やディスクの回転待ち時間などが含まれる。
【０１１０】
平均データサイズＤは、分析データ記憶部１１０内の１つのキーによって識別される１単位の分析データ（１つの「バリュー」）のサイズの平均値である。例えば、図１１では、データ（キーＡ〜Ｈ）それぞれのサイズの平均値となる。なお、“データ（キーＡ〜Ｈ）”は、キーＡ〜Ｈに対応する分析データを意味する。
【０１１１】
１セグメント当たりのデータ数Ｓは、１セグメントが収容するキーの数の平均値である。例えば、図１１に示すように、セグメント１１１ａ，１１１ｂ，１１１ｃ，１１１ｄそれぞれには２ずつのキーに対応するデータが配置されているため、１セグメント当たりのデータ数Ｓは、２となる。
【０１１２】
キューの選択数ＮＱは、アクセス命令処理部１６４が蓄積されたアクセス命令を実行する際に１回に選択するセグメント別命令キューの数である。アクセス命令処理部１６４は、キューの選択数ＮＱを可変として、アクセス処理時間ＰＴを計算する。例えば、図１１に示すように、セグメント別命令キュー群１３０に含まれるセグメント別命令キューの数は４つであるため、キューの選択数ＮＱの値が“１”〜“４”それぞれの場合について、アクセス処理時間ＰＴを計算する。
【０１１３】
スループットＴは、ＨＤＤ１０３からの読み出しおよび書き込みが可能な単位時間当たりのデータの量である。
なお、第２の実施の形態のシステムにおいて、平均データサイズＤおよび１セグメント当たりのデータ数Ｓには、予めユーザが指定した固定された値（予測値や期待値など）を用いてもよい。また、平均データサイズＤおよび１セグメント当たりのデータ数Ｓには、スケジューラ１６０がＨＤＤ１０３を監視することで算出した値（実測値）を用いてもよい。
【０１１４】
次に、アクセス命令処理部１６４は、単位時間当たりの出力命令数ＰＲを算出する。単位時間当たりの出力命令数ＰＲは、“平均命令数ＡＣ×キューの選択数ＮＱ／アクセス処理時間ＰＴ”により算出される。
【０１１５】
このとき、単位時間当たりの出力命令数ＰＲは、算出された各アクセス処理時間ＰＴについて算出される。また、キューの選択数ＮＱには、アクセス処理時間ＰＴを算出したときの値を用いる。
【０１１６】
平均命令数ＡＣは、過去のアクセス命令実行処理毎に出力されたセグメント別命令キュー毎のアクセス命令の数の平均値である。平均命令数ＡＣは、例えば、アクセス命令実行処理時に選択されたセグメント別命令キュー毎に、実行されたアクセス命令の数（当該セグメント別命令キューが選択された時点で蓄積されていたアクセス命令の数）を監視し、所定の期間内において監視されたアクセス命令の数の移動平均により算出できる。
【０１１７】
これにより、グラフ５１が示すように、各キューの選択数ＮＱについて、単位時間当たりの出力命令数ＰＲが算出される。具体的には、単位時間当たりの出力命令数ＰＲは、キューの選択数ＮＱの値の増加により単調に増加する。これは、１回にシーケンシャルに読み書きできる分析データの増大に伴い、アクセス処理時間ＰＴに占めるレイテンシＬの割合が小さくなるためである。ただし、キューの選択数ＮＱが大きくなるに従い、その傾き（微分値）は漸減する。
【０１１８】
次に、アクセス命令処理部１６４は、単位時間当たりの出力命令数ＰＲが単位時間当たりの入力命令数ＵＲ以上であるキューの選択数ＮＱを抽出する。グラフ５１が示すように、単位時間当たりの出力命令数ＰＲが単位時間当たりの入力命令数ＵＲ以上となるキューの選択数ＮＱは２〜４であるため、２〜４のキューの選択数ＮＱが抽出される。
【０１１９】
そして、アクセス命令処理部１６４は、抽出したキューの選択数ＮＱのうち、最も小さい値を、アクセス命令処理部１６４が選択するセグメント別命令キューの数として算出する。そのため、図１１では、アクセス命令処理部１６４が選択するキューの数として、２が算出される。
【０１２０】
アクセス命令処理部１６４は、蓄積されたアクセス命令を処理するにあたり、セグメント別命令キュー１３１ａ，１３１ｂ，１３１ｃ，１３１ｄのうち隣接するＮＱ個のセグメント別命令キューを１回に選択する。例えば、アクセス命令処理部１６４は、セグメント別命令キュー１３１ａ，１３１ｂの組、セグメント別命令キュー１３１ｂ，１３１ｃの組、または、セグメント別命令キュー１３１ｃ，１３１ｄの組を１回に選択する。すると、アクセス命令処理部１６４は、選択したＮＱ個のセグメントをキャッシュ領域１５０に読み込んだ際キャッシュ領域１５０があふれる場合は、キャッシュ領域１５０からＮＱ個のセグメントをＨＤＤ１３０に書き戻す。その書き戻すセグメントは、キャッシュ管理キューの古い方からＮＱ個選択する。その後、セグメント１１１ａ，１１１ｂ，１１１ｃ，１１１ｄのうち、隣接するＮＱ個のセグメントをシーケンシャルにキャッシュ領域１５０に読み込むことになる。隣接する複数のセグメント別命令キューを選択することで、複数のセグメントへのアクセスを１回のシーケンシャルアクセスで実現でき、レイテンシＬの影響を低減できる。
【０１２１】
以上のように、ＰＲ≧ＵＲとなるように１回に選択するセグメント別命令キューの数を決定することで、サーバ装置１００の負荷が高いときでも、セグメント別命令キュー１３１ａ，１３１ｂ，１３１ｃ，１３１ｄが溢れるのを抑制できる。また、できる限り１回に選択するセグメント別命令キューの数を小さくすることで、次に他のセグメント別命令キューを選択するまでのサイクルを短くできる。よって、セグメント別命令キュー１３１ａ，１３１ｂ，１３１ｃ，１３１ｄに蓄積されたアクセス命令の数の偏りの変化に柔軟に対応することができる。また、１回に選択するセグメント別命令キューの数が小さいほど、次に処理すべきセグメント別命令キューを選択する処理が簡潔になる。
【０１２２】
図１２は、アクセス命令を実行する例を示す図である。図１２では、セグメント別命令キューに格納された各アクセス命令を、キャッシュされたセグメントの分析データに対して実行する処理の例について説明する。図１２において、図１１と同様の事項については、説明を省略することがある。また、アクセス命令処理部１６４は、選択するセグメント別命令キューの数として、２を算出したものとする。
【０１２３】
以下、図１２に示す処理をステップ番号に沿って説明する。
（Ｓ１）アクセス命令処理部１６４は、算出した数分のセグメント別命令キューを、次のように選択する。
【０１２４】
例えば、まず、アクセス命令処理部１６４は、選択可能なセグメント別命令キューの組み合わせを算出する。この際、アクセス命令処理部１６４は、選択したセグメント別命令キューに対応する複数のセグメントがＨＤＤ１０３上で隣接した領域となるように、組み合わせを算出する。例えば、図１２では、各セグメントは、セグメント１１１ａ，１１１ｂ，１１１ｃ，１１１ｄの順に、ＨＤＤ１０３上の隣接した領域に配置されている。そのため、セグメント別命令キュー１３１ａ，１３１ｂの組み合わせと、セグメント別命令キュー１３１ｂ，１３１ｃの組み合わせと、セグメント別命令キュー１３１ｃ，１３１ｄの組み合わせとが算出される。
【０１２５】
次に、アクセス命令処理部１６４は、算出された組み合わせ毎に、その組み合わせに含まれる各セグメント別命令キュー内のアクセス命令の数の合計を算出する。そして、アクセス命令処理部１６４は、算出された合計が最大である組み合わせに含まれるセグメント別命令キューを選択する。例えば、図１２では、セグメント別命令キュー１３１ａ，１３１ｂのアクセス命令の数の合計は、“２＋１＝３”である。セグメント別命令キュー１３１ｂ，１３１ｃのアクセス命令の数の合計が“１＋３＝４”である。セグメント別命令キュー１３１ｃ，１３１ｄのアクセス命令の数の合計が“３＋２＝５”である。そのため、セグメント別命令キュー１３１ｃ，１３１ｄの組み合わせが、アクセス命令処理部１６４により選択される。
【０１２６】
（Ｓ２）アクセス命令処理部１６４は、選択されたセグメント別命令キュー１３１ｃ，１３１ｄに対応するセグメント１１１ｃ，１１１ｄをキャッシュするための空き領域が、キャッシュ領域１５０に存在するか判定する。図１２では、キャッシュ領域１５０の空き領域が存在しないため、ロード不可能と判定される。そのため、アクセス命令処理部１６４は、現在キャッシュされているセグメント１１１ａ，１１１ｂの分析データをＨＤＤ１０３に書き戻す。
【０１２７】
このとき、セグメント１１１ａ，１１１ｂは、ＨＤＤ１０３上で隣接した領域に配置されているため、２つのセグメント分の分析データをシーケンシャルアクセスによりＨＤＤ１０３へ書き戻すことができる。
【０１２８】
（Ｓ３）アクセス命令処理部１６４は、セグメント別命令キュー１３１ｃに対応するセグメント１１１ｃおよび、セグメント別命令キュー１３１ｄに対応するセグメント１１１ｄの分析データをキャッシュする。このとき、アクセス命令処理部１６４は、２つのセグメント分の分析データをシーケンシャルアクセスにより読み出すことができる。
【０１２９】
（Ｓ４，Ｓ４ａ）アクセス命令処理部１６４は、選択したセグメント別命令キュー１３１ｃ，１３１ｄ毎に、格納されているアクセス命令取り出す。そして、アクセス命令処理部１６４は、取り出したアクセス命令を、キャッシュ領域１５０にキャッシュしたセグメント１１１ｃ，１１１ｄの分析データに対して実行する。
【０１３０】
なお、以下の説明では、図１１で説明した方法で算出されるセグメント別命令キューの数は、２であるものとする。また、キャッシュ領域１５０に格納可能なセグメントの数は、２の倍数であるものとする。キャッシュ領域１５０上の各セグメントは、キャッシュされたときと同じ組み合わせで、ＨＤＤ１０３に書き戻されることになる。
【０１３１】
次に、図１３〜１４を用いて、スケジューラ１６０によるアクセス命令に関する処理について、フローチャートを用いて説明する。
図１３は、アクセス命令を生成する処理の例を示すフローチャートである。図１３の処理は、イベント処理部１６１がクライアント装置２００から購入履歴情報を受信したときに実行される。以下、図１３に示す処理をステップ番号に沿って説明する。
【０１３２】
（Ｓ１１）イベント処理部１６１は、クライアント装置２００から購入履歴情報を受信する。
（Ｓ１２）イベント処理部１６１は、受信した購入履歴情報に基づき、図４のような分析処理を実行することで、分析データ記憶部１１０内の分析データへのアクセス命令を１以上生成する。各アクセス命令には、アクセスする分析データを識別するためのキーを含む。
【０１３３】
（Ｓ１３）イベント処理部１６１は、生成した１以上のアクセス命令を全体命令キュー１２０に格納する。
図１４は、アクセス命令を振り分ける処理の例を示すフローチャートである。図１４の処理は、一定周期毎にスケジューラ１６０により実行される。以下、図１４に示す処理をステップ番号に沿って説明する。
【０１３４】
（Ｓ１５）イベント処理部１６１は、全体命令キュー１２０に格納されているアクセス命令を１つ取り出す。
（Ｓ１６）セグメント管理部１６２は、取り出されたアクセス命令の振り分け先のセグメント別命令キューを次のように判定する。
【０１３５】
まず、セグメント管理部１６２は、アクセス命令と同じキーを含むレコードをキー情報テーブル１４１から検索する。次に、セグメント管理部１６２は、検索したレコードのキューの項目に記載されたセグメント別命令キューを、振り分け先のセグメント別命令キューと判定する。
【０１３６】
（Ｓ１７）キュー管理部１６３は、取り出されたアクセス命令を、判定されたセグメント別命令キューに格納する。
このとき、キュー管理部１６３は、セグメント別命令キューに格納されたアクセス命令の数を監視し、単位時間当たりの入力命令数ＵＲを算出する。単位時間当たりの入力命令数ＵＲは、例えば、管理情報記憶部１４０に確保された記憶領域に記憶される。
【０１３７】
（Ｓ１８）アクセス命令処理部１６４は、全体命令キュー１２０が空か判定する。全体命令キュー１２０が空である場合、処理を終了する。全体命令キュー１２０にアクセス命令が存在する場合、処理をステップＳ１５へ進める。
【０１３８】
図１５は、アクセス命令を実行する処理の例を示すフローチャートである。図１５〜１６で説明するアクセス命令処理は、前回のアクセス命令処理が終了したことを契機として実行される。なお、アクセス命令が全体命令キュー１２０に格納される頻度が低い場合、一定周期毎に間欠的に実行するようにしてもよい。以下、図１５〜１６に示す処理をステップ番号に沿って説明する。
【０１３９】
（Ｓ２１）アクセス命令処理部１６４は、図１１で説明したように、“単位時間当たりの入力命令数ＵＲ≦単位時間当たりの出力命令数ＰＲ”となるようなキューの選択数ＮＱのうち、最小値を算出する。アクセス命令処理部１６４は、算出された値を、ステップＳ２２で選択するセグメント別命令キューの数とする。このとき、単位時間当たりの入力命令数ＵＲは、図１４のステップＳ１７でキュー管理部１６３により算出されたものが用いられる。
【０１４０】
なお、選択するセグメント別命令キューの数は、図１５のアクセス命令処理が実行される毎に（１以上のセグメント別命令キューを選択する毎に）算出してもよいし、間欠的に算出してもよい。また、セグメント別命令キューの数を決定するために用いる単位時間当たりの入力命令数ＵＲは、当該決定の毎に最新のものをキュー管理部１６３から取得してもよいし、間欠的にキュー管理部１６３から取得するようにしてもよい。
【０１４１】
（Ｓ２２）アクセス命令処理部１６４は、図１２のステップＳ１で説明したように、セグメント別命令キュー群１３０から、ステップＳ２１で算出した数分のセグメント別命令キューを次のように選択する。
【０１４２】
まず、アクセス命令処理部１６４は、選択可能なセグメント別命令キューの組み合わせを算出する。この際、各組み合わせに含まれるセグメント別命令キューに対応するセグメントが、ＨＤＤ１０３上で隣接した領域に配置されているようにする。２以上のセグメントが隣接しているかは、例えば、当該セグメントの識別子または当該セグメントに対応するセグメント別命令キューの識別子が連続した値か否かにより判断できる。例えば、“ＱＵＥ＃１”と“ＱＵＥ＃２”とは、識別子が連続していると判断する。また、“ＱＵＥ＃１”と“ＱＵＥ＃３”とは、識別子が連続していないと判断する。
【０１４３】
次に、アクセス命令処理部１６４は、算出された組み合わせ毎に、その組み合わせに含まれるセグメント別命令キュー内のアクセス命令の数の合計を算出する。そして、アクセス命令処理部１６４は、算出された合計が最大である組み合わせのセグメント別命令キューを、アクセス命令を取り出すセグメント別命令キューとして選択する。
【０１４４】
（Ｓ２３）アクセス命令処理部１６４は、キャッシュするセグメントを次のように特定する。まず、アクセス命令処理部１６４は、ステップＳ２２で選択した各セグメント別命令キューについて、その識別子を含むレコードをキー情報テーブル１４１から検索する。アクセス命令処理部１６４は、検索したレコードのセグメントの項目から、セグメントの識別子を読み出す。そして、アクセス命令処理部１６４は、読み出した識別子が示すセグメントを、キャッシュするセグメントと特定する。
【０１４５】
（Ｓ２４）アクセス命令処理部１６４は、ステップＳ２３で特定されたセグメントがいずれもキャッシュ済みか判定する。キャッシュ済みであるかは、特定されたセグメントの識別子が、キャッシュ管理キュー１４２に格納されているかで判定する。
【０１４６】
特定されたセグメントがいずれもキャッシュ済みである場合、処理をステップＳ３１へ進める。キャッシュ済みでないセグメント存在する場合、処理をステップＳ２５へ進める。
【０１４７】
（Ｓ２５）アクセス命令処理部１６４は、特定したセグメントの分析データをキャッシュするための空き領域がキャッシュ領域１５０に存在するか判定する。以下、キャッシュするための空き領域を“空きキャッシュ領域”と記載する場合がある。
【０１４８】
例えば、アクセス命令処理部１６４は、キャッシュ管理キュー１４２に格納可能な識別子の数から、キャッシュ管理キュー１４２に現在格納されている識別子の数を減算することで、追加でキャッシュできるセグメントの数を算出する。そして、アクセス命令処理部１６４は、キャッシュできるセグメントの数が、ステップＳ２３で特定したセグメントの数以上であれば、特定したセグメントの分析データをキャッシュするための空きキャッシュ領域が存在すると判定する。
【０１４９】
特定したセグメントのための空きキャッシュ領域が存在する場合、処理をステップＳ２８へ進める。特定した複数のセグメントのための空きキャッシュ領域が存在しない場合（空きキャッシュ領域が不足している場合）、処理をステップＳ２６へ進める。
【０１５０】
（Ｓ２６）アクセス命令処理部１６４は、キャッシュされているセグメントのうち、分析データ記憶部１１０に書き戻すセグメントを特定する。
具体的には、ステップＳ２１で算出した数分、セグメントの識別子をキャッシュ管理キュー１４２の先頭（図９の下側）から取り出す。アクセス命令処理部１６４は、取り出した識別子が示すセグメントを、分析データ記憶部１１０に分析データを書き戻すセグメントと特定する。
【０１５１】
（Ｓ２７）アクセス命令処理部１６４は、ステップＳ２６で特定されたキャッシュ領域１５０上のセグメントの分析データを、ＨＤＤ１０３の分析データ記憶部１１０へ書き戻す。このとき、書き戻すセグメントが２以上ある場合であっても、当該２以上のセグメントはＨＤＤ１０３上で隣接しているため、１回のシーケンシャルアクセスによって当該２以上のセグメントの分析データを書き戻すことができる。
【０１５２】
（Ｓ２８）アクセス命令処理部１６４は、ステップＳ２３で特定したセグメントの識別子をキャッシュ管理キュー１４２へ格納する。このとき、セグメントの配置されている順に、識別子をキャッシュ管理キュー１４２へ格納するようにする。
【０１５３】
そして、アクセス命令処理部１６４は、特定したセグメントの分析データを、ＨＤＤ１０３の分析データ記憶部１１０からキャッシュ領域１５０にキャッシュする。
図１６は、アクセス命令を実行する処理の例を示すフローチャート（続き）である。
【０１５４】
（Ｓ３１）アクセス命令処理部１６４は、ステップＳ２２で選択した今回処理するセグメント別命令キューの１つを選択する。
（Ｓ３２）アクセス命令処理部１６４は、選択したセグメント別命令キューからアクセス命令を１つ取り出す。
【０１５５】
（Ｓ３３）アクセス命令処理部１６４は、キャッシュ領域１５０上のセグメントの分析データに対し、取り出したアクセス命令を実行する。使用するセグメントは、アクセス命令が取り出されたセグメント別命令キューに対応するセグメントである。
【０１５６】
（Ｓ３４）アクセス命令処理部１６４は、ステップＳ３１で選択したセグメント別命令キューが空か判定する。すなわち、アクセス命令処理部１６４は、選択したセグメント別命令キューから全てのアクセス命令を取り出したか判定する。
【０１５７】
セグメント別命令キューが空の場合、処理をステップＳ３５へ進める。セグメント別命令キューにアクセス命令が存在する場合、処理をステップＳ３２へ進める。
（Ｓ３５）アクセス命令処理部１６４は、ステップＳ２２で選択した今回処理するセグメント別命令キューの全てを選択済か判定する。全てのセグメント別命令キューを選択済みの場合、処理を終了する。未選択のセグメント別命令キューが存在する場合、処理をステップＳ３１へ進める。
【０１５８】
第２の実施の形態のサーバ装置１００によれば、１または２以上のセグメントの分析データ全体を纏めてＲＡＭ１０２にキャッシュし、キャッシュした分析データに対して、セグメント別命令キューに溜まったアクセス命令を纏めて実行する。また、１または２以上のセグメントの分析データ全体を、ＲＡＭ１０２からＨＤＤ１０３に書き戻す。すなわち、複数のアクセス命令を実行することに伴うランダムアクセスは、ランダムアクセスが比較的低速なＨＤＤ１０３上で発生させる代わりに、ランダムアクセスが比較的高速なＲＡＭ１０２上で発生させるようにする。ＨＤＤ１０３上では、ランダムアクセスに代えてシーケンシャルアクセスが行われる。これにより、複数のアクセス命令を効率的に実行することができる。特に、現在の値を読み込んで演算を行い演算結果に応じて値を更新するような複雑なアクセス命令は、ＲＡＭ１０２上で効率的に実行できる。
【０１５９】
また、１回に複数のセグメントの分析データをキャッシュするとき、ＨＤＤ１０３上で隣接するセグメントを選択することで、複数のセグメントの分析データを１回のシーケンシャルアクセスで読み出すことができ、ＨＤＤ１０３でのアクセスを効率化できる。
【０１６０】
また、１回に処理するセグメント別命令キューの数を可変とすることができる。単位時間当たりに発生するアクセス命令が多いときは、１回に処理するセグメント別命令キューの数を多くすることで、シーク時間などのＨＤＤ１０３のレイテンシの影響を小さくし、単位時間当たりに処理できるアクセス命令を増やすことができる。また、単位時間当たりに発生するアクセス命令が少ないときは、１回に処理するセグメント別命令キューの数を小さくすることで、セグメント別命令キューを選択するサイクルを短くすることができる。これにより、アクセス命令の発生状況の変化に柔軟に対応でき、また、あるセグメント別命令キューに未処理の古いアクセス命令が長く滞留してしまう確率を低減できる。
【０１６１】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０にプログラムを実行させることで実現でき、第２の実施の形態の情報処理は、サーバ装置１００やクライアント装置２００にプログラムを実行させることで実現できる。このようなプログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体４３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【０１６２】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。コンピュータは、例えば、可搬記録媒体に記録されたプログラムを、記憶装置（例えば、ＨＤＤ１０３）に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよい。また、上記の情報処理の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤ（Programmable Logic Device）などの電子回路で実現することも可能である。
【０１６３】
以上の第１および第２の実施の形態を含む実施の形態に関し、さらに以下の付記を開示する。
（付記１）  データを格納する複数のセグメントを含む記憶装置と、
前記複数のセグメントに対応する複数の領域を含むメモリと、
発生した複数のアクセス命令を処理する演算部と、
を有し、前記演算部は、
発生した各アクセス命令について、当該アクセス命令を前記メモリ上の前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、情報処理装置。
【０１６４】
（付記２）  前記演算部は、単位時間当たりに発生するアクセス命令の数を監視し、
前記複数の領域のうち１回に選択する領域の数を、前記単位時間当たりに発生するアクセス命令の数に応じて決定する、付記１記載の情報処理装置。
【０１６５】
（付記３）  前記演算部は、前記単位時間当たりに発生するアクセス命令の数の増加に応じて、前記１回に選択する領域の数を増加させる、付記２記載の情報処理装置。
（付記４）  前記演算部は、前記複数の領域のうち２以上の領域を１回に選択する場合、前記選択する２以上の領域を、前記記憶装置上で隣接して配置されている２以上のセグメントに対応する領域とする、付記１乃至３のいずれか一項に記載の情報処理装置。
【０１６６】
（付記５）  前記発生した複数のアクセス命令は、前記複数のセグメントのいずれかに格納されているデータを用いて演算を行い、演算結果に応じて当該データを書き換えることを示すアクセス命令を含む、付記１乃至４のいずれか一項に記載の情報処理装置。
【０１６７】
（付記６）  コンピュータが実行するデータアクセス方法であって、
前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、データアクセス方法。
【０１６８】
（付記７）  コンピュータに、
前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも１つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、処理を実行させるプログラム。
【符号の説明】
【０１６９】
１０  情報処理装置
１１  記憶装置
１１ａ，１１ｂ，１１ｃ  セグメント
１２  メモリ
１２ａ，１２ｂ，１２ｃ  領域
１２ｄ  キャッシュ領域
１３  演算部
【図１】
2015095226.tif 000003
【図２】
2015095226.tif 000004
【図３】
2015095226.tif 000005
【図４】
2015095226.tif 000006
【図５】
2015095226.tif 000007
【図６】
2015095226.tif 000008
【図７】
2015095226.tif 000009
【図８】
2015095226.tif 000010
【図９】
2015095226.tif 000011
【図１０】
2015095226.tif 000012
【図１１】
2015095226.tif 000013
【図１２】
2015095226.tif 000014
【図１３】
2015095226.tif 000015
【図１４】
2015095226.tif 000016
【図１５】
2015095226.tif 000017
【図１６】
2015095226.tif 000018