JP2015095226A - 情報処理装置、データアクセス方法およびプログラム - Google Patents

情報処理装置、データアクセス方法およびプログラム Download PDF

Info

Publication number
JP2015095226A
JP2015095226A JP2013235974A JP2013235974A JP2015095226A JP 2015095226 A JP2015095226 A JP 2015095226A JP 2013235974 A JP2013235974 A JP 2013235974A JP 2013235974 A JP2013235974 A JP 2013235974A JP 2015095226 A JP2015095226 A JP 2015095226A
Authority
JP
Japan
Prior art keywords
access
segment
data
product
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
JP2013235974A
Other languages
English (en)
Inventor
美穂 村田
Miho Murata
美穂 村田
敏章 佐伯
Toshiaki Saeki
敏章 佐伯
博道 小橋
Hiromichi Kobashi
博道 小橋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013235974A priority Critical patent/JP2015095226A/ja
Priority to US14/533,601 priority patent/US20150134919A1/en
Publication of JP2015095226A publication Critical patent/JP2015095226A/ja
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】記憶装置に格納されたデータへのアクセス効率を向上させる。
【解決手段】メモリ12は、記憶装置11のセグメント11a,11b,11cに対応する領域12a,12b,12cを含む。演算部13は、発生した各アクセス命令を、領域12a,12b,12cのうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納する。演算部13は、領域12a,12b,12cのうち選択した少なくとも1つの領域に対応するセグメントのデータを、記憶装置11からメモリ12上の領域12a,12b,12cと異なる他の領域にロードし、ロードしたセグメントのデータに対して、選択した領域に格納されているアクセス命令を実行する。
【選択図】図1

Description

本発明は情報処理装置、データアクセス方法およびプログラムに関する。
近年、演算装置の高速化・記憶装置の大容量化・ネットワークの広帯域化などのハードウェア性能の向上に伴い、大量のデータを収集して分析することが可能になっている。大量のデータを分析することで、収集したデータから価値ある情報を引き出すことができる場合がある。例えば、インターネットのショッピングサイトでは、ユーザにお勧めの商品を提示するレコメンデーションシステムが用いられることがある。レコメンデーションシステムは、Webサーバからユーザの閲覧履歴や購買履歴を示すログを収集し、ログを分析して同一ユーザが興味をもつ可能性の高い商品の組み合わせを抽出する。
データ分析は、例えば、バッチ処理として実現される。その場合、データ分析システムは、最初に分析対象のデータを収集して記憶装置に蓄積していく。十分なデータが収集されると、データ分析システムは、記憶装置に蓄積されたデータ全体の分析を開始する。このようなバッチ処理では、蓄積されるデータが増えるほど分析時間が長くなる。
大規模データ分析の時間を短縮する方法として、データを分割し、複数のコンピュータを用いて依存関係のないデータ処理を並列に実行することが考えられる。このような並列データ処理を行うプログラムの作成を支援するため、Hadoopなどのフレームワークが提案されている。並列データ処理用のフレームワークを用いることで、ユーザは、コンピュータ間の通信などの煩雑な処理の詳細を意識せずにプログラムを作成できる。
また、大規模データ分析の時間は、記憶装置の使用方法によっても変化し得る。これは、分析に使用される大量のデータは、HDD(Hard Disk Drive)などランダムアクセスが比較的遅い記憶装置に蓄積されることが多いためである。もし、分析中に参照または更新されるデータを、参照または更新される順序に応じて予め記憶装置上でソートしておくことができれば、ランダムアクセスを減らしてデータアクセスを高速化できる。なお、データアクセスを効率化する方法に関して、次のような技術が提案されている。
例えば、磁気ディスクとキャッシュメモリとを備え、磁気ディスクに記憶されたデータの一部をキャッシュメモリに格納することで読み出しのアクセスを高速化するデータ記憶装置が提案されている。このデータ記憶装置は、同一データへの再アクセスや隣接データへのシーケンシャルアクセスなど、受け付けたアクセスの種別を記録しておき、使用するキャッシュメモリの領域のサイズをアクセスの種別に応じて変更する。
また、ディスク媒体とバッファメモリとを備え、バッファメモリを用いてディスク媒体へのデータ書込のオーバヘッドを低減するディスク記憶装置が提案されている。このディスク記憶装置は、所定サイズ以下のデータをディスク媒体に書き込むライトコマンドを受け付けた場合、当該データをバッファメモリに格納しておく。そして、ディスク記憶装置は、書き込み先のアドレスが近いデータ同士をグループ化し、あるグループに属するデータの量が所定量を超えると当該グループのデータを纏めてディスク媒体に書き込む。
特開平10−301847号公報 特開平11−317008号公報
The Apache Software Foundation, "Welcome to Apache Hadoop!", [online], 2012年, [2013年7月23日検索], インターネット<URL: http://hadoop.apache.org/index.pdf>
ところで、データ分析システムのユーザは、分析結果を1回取得した後に分析対象のデータが追加または更新されると、分析結果をアップデートしたいことが多い。例えば、レコメンデーションシステムは、Webサーバから新たな閲覧履歴や購入履歴を示すログを取得すると、新たな閲覧履歴や購入履歴を分析結果に反映することが好ましい。
このような分析結果のアップデートを従来のバッチ処理で行おうとすると、前回から変わっていない部分も含めて蓄積されたデータ全体を再分析することになる。これに対し、追加または更新された分析対象のデータに関連する分析結果のみアップデートする方法が考えられる。例えば、レコメンデーションシステムは、新たに閲覧または購入された商品と他の商品との組み合わせに限定して商品間の関連度を再計算することが考えられる。このようなデータ処理方法は、インクリメンタルなデータ処理ということもできる。
しかし、インクリメンタルなデータ処理では、記憶装置に格納されている分析対象や前回の分析結果のデータのいずれがアクセスされるかは、新たに収集された分析対象のデータに依存する。このため、インクリメンタルなデータ処理では、参照または更新される順序に応じて予め記憶装置上でデータをソートしておくことが難しく、ランダムアクセスが発生しやすい。よって、データへのアクセス効率が低下しやすいという問題がある。
なお、単に書き込み先のアドレスが近いライトコマンドを纏めて実行するだけでは、ディスク媒体への不連続な書き込みが発生し得ることから、データアクセスの効率に改善の余地がある。また、例えば、新たなログに基づいて商品の閲覧回数または購入数をインクリメントするなど、既存のデータを参照して当該データを更新するような複雑なアクセス命令を実行する場合には、アクセス効率が低下しやすい。
1つの側面では、本発明は、記憶装置に格納されたデータへのアクセス効率を向上できる情報処理装置、データアクセス方法およびプログラムを提供することを目的とする。
1つの態様では、記憶装置とメモリと演算部とを有する情報処理装置が提供される。記憶装置は、データを格納する複数のセグメントを含む。メモリは、複数のセグメントに対応する複数の領域を含む。演算部は、発生した複数のアクセス命令を処理する。上記の演算部は、発生した各アクセス命令について、当該アクセス命令をメモリ上の複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納する。演算部は、メモリ上の複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、記憶装置からメモリ上の複数の領域と異なる他の領域にロードし、ロードしたセグメントのデータに対して、選択した領域に格納されているアクセス命令を実行する。
また、1つの態様では、コンピュータが実行するデータアクセス方法が提供される。コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、コンピュータが備えるメモリに複数の領域を確保する。発生した複数のアクセス命令それぞれについて、当該アクセス命令を複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納する。メモリ上の複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、記憶装置からメモリ上の複数の領域と異なる他の領域にロードし、ロードしたセグメントのデータに対して、選択した領域に格納されているアクセス命令を実行する。また、1つの態様では、コンピュータに実行させるプログラムが提供される。
1つの側面では、記憶装置に格納されたデータへのアクセス効率が向上する。
第1の実施の形態の情報処理装置を示す図である。 第2の実施の形態の情報処理システムの例を示す図である。 バッチ方式でデータの分析処理を実行する例を示す図である。 インクリメンタル方式でデータの分析処理を実行する例を示す図である。 サーバ装置のハードウェア例を示すブロック図である。 サーバ装置の機能例を示すブロック図である。 全体命令キューの例を示す図である。 キー情報テーブルの例を示す図である。 キャッシュ管理キューの例を示す図である。 アクセス命令をセグメント別命令キューに振り分ける例を示す図である。 キャッシュするセグメントの数を算出する例を示す図である。 アクセス命令を実行する例を示す図である。 アクセス命令を生成する処理の例を示すフローチャートである。 アクセス命令を振り分ける処理の例を示すフローチャートである。 アクセス命令を実行する処理の例を示すフローチャートである。 アクセス命令を実行する処理の例を示すフローチャート(続き)である。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。
情報処理装置10は、記憶装置11、メモリ12および演算部13を有する。記憶装置11は、メモリ12よりもランダムアクセスが遅い記憶装置であり、例えば、HDDなどのディスク媒体を用いた不揮発性の記憶装置である。メモリ12は、記憶装置11よりもランダムアクセスが速い記憶装置であり、例えば、RAM(Random Access Memory)などの揮発性または不揮発性の半導体メモリである。演算部13は、例えば、プロセッサである。プロセッサは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)であってもよく、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を含んでもよい。プロセッサは、例えば、メモリ12に記憶されたプログラムを実行する。また、「プロセッサ」は、2以上のプロセッサの集合(マルチプロセッサ)であってもよい。
記憶装置11は、データを格納するセグメント11a,11b,11cを含む。セグメント11a,11b,11cのサイズは、全て同じでもよいし異なっていてもよい。セグメント11a,11b,11cに格納される各データ要素は、例えば、キーによって識別される。その場合、キーとセグメントとの対応関係が定義されている。例えば、キーA,Bのデータ要素はセグメント11aに格納され、キーC,Dのデータ要素はセグメント11bに格納され、キーE,Fのデータ要素はセグメント11cに格納されると定義される。キーとセグメントの対応関係は、機械的に決めてもよいしユーザが手動で決めてもよい。
メモリ12は、領域12a,12b,12cおよびキャッシュ領域12dを含む。領域12a,12b,12cは、セグメント11a,11b,11cと一対一に対応する。領域12aはセグメント11aに対応し、領域12bはセグメント11bに対応し、領域12cはセグメント11cに対応する。領域12a,12b,12cは、後述するアクセス命令を実行前に一時的に格納しておく。キャッシュ領域12dは、演算部13の制御に従って、記憶装置11に含まれる1または2以上のセグメントのデータをキャッシュする。キャッシュ領域12dのサイズは、例えば、メモリ12の容量、セグメント1つ当たりのサイズ、記憶装置11に含まれるセグメントの数などを考慮して予め定義される。
演算部13は、データの到着に伴い発生した複数のアクセス命令を処理する。アクセス命令は、記憶装置11に格納されたデータに対するアクセスの要求を示し、例えば、アクセス先のデータを識別するキーを含む。各アクセス命令は、単純な読出命令または書込命令であってもよい。また、各アクセス命令は、現在の値に基づいて更新後の値が決定される更新命令や比較命令など、演算および1回ずつのデータの読み書きを伴う命令であってもよい。アクセス命令は、異なるタイミングで適宜発生する。演算部13は、他の情報処理装置からアクセス命令を適宜受け付けてもよいし、他の情報処理装置から適宜受信するデータに基づいて1または2以上のアクセス命令を生成してもよい。後者の場合として、新たなデータに基づいて、当該新たなデータに関連する既存のデータを更新する場合が挙げられる。
ここで、演算部13は、1つのアクセス命令が発生すると、そのアクセス命令をすぐに実行するのではなく、当該アクセス命令をメモリ12上の領域12a,12b,12cのいずれかに格納する。アクセス命令を格納する領域は、当該アクセス命令が示すアクセス先のデータに応じて決まる。例えば、アクセス命令にキーが含まれる場合、演算部13は、キーとセグメントとの対応関係に基づいて、領域12a,12b,12cのうちアクセス先のデータが属するセグメントに対応する領域を判定する。
上記のようにして領域12a,12b,12cにアクセス命令が溜まると、演算部13は、領域12a,12b,12cの一部である1または2以上の領域を選択する。1回に1または2以上の領域が選択され、その領域選択が繰り返し行われる。領域を選択するタイミングは、所定の周期に応じたタイミングでもよいし、1つ前に選択した領域についての下記の処理が完了したタイミングでもよい。また、領域を選択するタイミングは、領域12a,12b,12cに溜まっているアクセス命令の量に依存してもよい。
好ましくは、演算部13は、領域12a,12b,12cのうち格納されているアクセス命令の量が多い領域を優先的に選択する。また、1回に複数の領域を選択する場合、好ましくは、演算部13は、記憶装置11上で隣接する複数のセグメントに対応する複数の領域を選択する。例えば、セグメント11aとセグメント11bが隣接し、セグメント11bとセグメント11cが隣接しているとする。2つの領域を選択する場合、演算部13は、領域12aと領域12bを選択するか、領域12bと領域12cを選択することが好ましく、領域12aと領域12cを選択することは避けた方が好ましい。
1または2以上の領域が選択されると、演算部13は、選択した領域に対応するセグメントのデータを記憶装置11からメモリ12上のキャッシュ領域12dにロードする。このとき、記憶装置11は、シーケンシャルアクセスによって、対象のセグメントのデータ全体を読み出すことができると期待できる。演算部13によって複数の領域が選択された場合であっても、当該複数の領域が隣接するセグメントに対応するものであれば、記憶装置11はシーケンシャルアクセスによってデータを読み出し可能である。
そして、演算部13は、キャッシュ領域12dにロードされたデータに対して、選択した領域に格納されているアクセス命令(通常は、複数のアクセス命令)を実行する。例えば、演算部13は、領域12cを選択し、セグメント11cのデータ全体をキャッシュ領域12dにロードする。そして、演算部13は、キャッシュしたデータに対して、領域12cのアクセス命令を実行する。実行が完了したアクセス命令は、選択した領域から削除してよい。選択した領域のアクセス命令を全て実行した後、演算部13は、キャッシュ領域12dのデータを元のセグメントに書き戻してもよい。このとき、記憶装置11は、シーケンシャルアクセスによってデータ全体を書き込むことができると期待できる。
第1の実施の形態の情報処理装置10によれば、複数のアクセス命令が発生順に実行されるのではなく、セグメント11a,11b,11cと対応付けてメモリ12上に設けられた領域12a,12b,12cに振り分けて格納される。そして、1または2以上のセグメントのデータが記憶装置11からメモリ12にロードされ、当該セグメントに対応する領域に溜まったアクセス命令が、ロードされたデータに対して纏めて実行される。
これにより、1または2以上のセグメント分のアクセス命令を纏めて実行するにあたり、記憶装置11ではデータアクセスがシーケンシャルに行われることになる。例えば、メモリ12上にある1または2以上の領域が1回選択される毎に、記憶装置11は、高々1回のシーケンシャルな読み出しと高々1回のシーケンシャルの書き込みとを行えばよい。よって、ランダムアクセスが発生することによるアクセス効率の低下を抑制できる。また、ランダムアクセスが比較的速いメモリ12にキャッシュされたセグメントのデータに対してアクセス命令が実行されるため、演算および1回ずつのデータの読み書きを伴うようなアクセス命令についても効率的に実行することが可能となる。
なお、演算部13が1回に選択する領域の数を増やすほど、すなわち、纏めてデータをロードするセグメントの数を増やすほど、一定時間で記憶装置11が行うシーケンシャルアクセスの回数を減らすことができる。よって、1回に選択する領域の数を増やすほど、記憶装置11のデータアクセスのオーバヘッドが小さくなり、一定時間で処理できるアクセス命令の数(スループット)を増やすことができる。演算部13は、単位時間当たりのアクセス命令の発生数に応じて、1回に選択する領域の数を調整してもよい。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムの例を示す図である。第2の実施の形態の情報処理システムは、ユーザに推奨する商品の情報を提示するレコメンデーションシステムである。また、第2の実施の形態の情報処理システムは、インターネットのショッピングサイトとしての機能を有する。以下、“ショッピングサイト”は、第2の実施の形態の情報処理システムを用いる、インターネット上のショッピングサイトを意味する。
第2の実施の形態の情報処理システムは、サーバ装置100およびクライアント装置200を有する。サーバ装置100は、第1の実施の形態の情報処理装置10の一例である。サーバ装置100は、ネットワーク20を介して、クライアント装置200と接続している。サーバ装置100の数は、複数であってもよい。
サーバ装置100は、推奨する商品を分析するサーバコンピュータである。サーバ装置100は、ショッピングサイトを利用するユーザの購入履歴情報を、定期的または不定期にクライアント装置200から受信し、受信した購入履歴情報を蓄積する。分析するために十分な購入履歴情報が蓄積されたとき、サーバ装置100は、蓄積された全購入履歴情報について、1回目の分析処理をバッチ方式により実行する。その後、サーバ装置100は、2回目以降の購入履歴情報の分析処理を、インクリメンタル方式により定期的または不定期に実施する。インクリメンタル方式とは、前回の処理から新たに受信した購入履歴情報とそれに関係する情報に限定して処理を行うことである。また、サーバ装置100は、分析結果を示す情報をクライアント装置200に送信する。
クライアント装置200は、購入履歴情報を、定期的または不定期にサーバ装置100へ送信するクライアントコンピュータである。また、クライアント装置200は、ショッピングサイトのサービスをユーザに提供するWebサーバとしての機能を有する。クライアント装置200は、定期的または不定期に、ユーザによる商品の購入履歴情報をサーバ装置100へ送信する。クライアント装置200は、購入履歴情報の分析結果を示す情報をサーバ装置100から受信する。また、クライアント装置200は、受信した分析結果を示す情報に基づき推奨する商品に関する情報を生成し、生成した情報をユーザに提供する。推奨する商品に関する情報は、例えば、ショッピングサイトを介してユーザに提供されてもよいし、電子メールなどによりユーザに提供されてもよい。
サーバ装置100が提供する購入履歴情報の分析結果は、任意の2つの商品の間の類似度を含む。類似度は、同じユーザが2つの商品の両方に興味を示す確率を示す。例えば、クライアント装置200は、クライアント装置200にアクセスしてきたユーザが過去に購入した商品を特定し、過去に購入された商品と類似度の高い他の商品を当該ユーザに推奨する。また、例えば、クライアント装置200は、ユーザが現在閲覧している商品を特定し、閲覧中の商品と類似度の高い他の商品を当該ユーザに推奨する。
次に、図3〜4を用いて、サーバ装置100が、ショッピングサイトにおける購入履歴情報を分析する例について説明する。なお、第2の実施の形態のシステムでは、分析の開始から終了までの時間は問わず、例えば、数分から数十分かかってもよいものとする。
図3は、バッチ方式でデータの分析処理を実行する例を示す図である。図3では、サーバ装置100が、一定期間蓄積した購入履歴情報について、バッチ方式により分析処理を実行する方法について説明する。サーバ装置100は、蓄積した購入履歴情報を以下のように分析する。
まず、サーバ装置100は、蓄積した購入履歴情報から、ユーザ毎集計結果31を生成する。ユーザ毎集計結果31は、ショッピングサイトで購入可能な各商品について、一定期間内におけるユーザ毎の購入の有無を集計した結果を示す行列である。ユーザ毎集計結果31の各行は、ショッピングサイトのユーザを表し、ユーザ毎集計結果31の各列は、ショッピングサイトで購入可能な商品を表す。ユーザ毎集計結果31の各成分は、一定期間内にユーザが商品を購入したか否かを表す。ユーザが商品を購入した場合はその成分を“○”(または“1”)で表し、ユーザが商品を購入しなかった場合はその成分を空欄(または“0”)で表す。ユーザ毎集計結果31は、一般に、“○”の密度が小さい疎行列になる。以下、ユーザ毎集計結果31において、ユーザを表す行および商品を表す列により対応付けられる成分を“購入フラグ(ユーザ,商品)”と記載する場合がある。
例えば、一定期間内において、ユーザu1が商品i1,i3,i5を購入し、ユーザu2が商品i4を購入したとする。また、ユーザu3が商品i3,i4,i5を購入し、ユーザu4が商品i4を購入し、ユーザu5が商品i1,i2,i5を購入したとする。この場合、図3のユーザ毎集計結果31が示すように、購入フラグ(ユーザu1,商品i1)、購入フラグ(ユーザu1,商品i3)、購入フラグ(ユーザu1,商品i5)および購入フラグ(ユーザu2,商品i4)は、“○”となる。また、購入フラグ(ユーザu3,商品i3)、購入フラグ(ユーザu3,商品i4)、購入フラグ(ユーザu3,商品i5)および購入フラグ(ユーザu4,商品i4)は、“○”となる。さらに、購入フラグ(ユーザu5,商品i1)、購入フラグ(ユーザu5,商品i2)および購入フラグ(ユーザu5,商品i5)は、“○”となる。また、ユーザ毎集計結果31において、上記以外の成分は、空欄となる。
次に、サーバ装置100は、ユーザ毎集計結果31から、商品ペア集計結果32を生成する。商品ペア集計結果32は、ショッピングサイトで購入可能な商品のペア(任意の2つの商品の組み合わせ)について、一定期間内にその両方を購入したユーザの数を集計した結果を示す対称行列である。商品ペア集計結果32の各行および各列は、ショッピングサイトで購入可能な商品を表す。商品ペア集計結果32の各成分は、2つの商品の両方を一定期間内に購入したユーザの数を表す。以下、商品ペア集計結果32において、商品のペアに対応する成分を“ユーザ数(商品(行),商品(列))”と記載する場合がある。なお、同じ商品の組に対応する対角成分(例えば、ユーザ数(商品i1,商品i1))は、その商品を購入したユーザの数を表す。
例えば、図3のユーザ毎集計結果31が示すように、商品i1を購入したユーザは、ユーザu1およびユーザu5の2人である。そのため、図3の商品ペア集計結果32が示すように、ユーザ数(商品i1,商品i1)は2となる。また、商品i1および商品i2を購入したユーザは、ユーザu5の1人である。そのため、ユーザ数(商品i1,商品i2)は1となる。同様に集計した結果、ユーザ数(商品i1,商品i3)は1となり、ユーザ数(商品i1,商品i4)は0となり、ユーザ数(商品i1,商品i5)は2となる。
また、ユーザ数(商品i2,商品i2)は1となる。また、ユーザ数(商品i2,商品i3)は0となり、ユーザ数(商品i2,商品i4)は0となり、ユーザ数(商品i2,商品i5)は1となる。また、ユーザ数(商品i3,商品i3)は2となり、ユーザ数(商品i3,商品i4)は1となり、ユーザ数(商品i3,商品i5)は2となる。さらに、ユーザ数(商品i4,商品i4)は3となり、ユーザ数(商品i4,商品i5)は1となり、ユーザ数(商品i5,商品i5)は3となる。
なお、ペアとなる商品の間の順序はユーザ数の集計に影響しないため、商品ペア集計結果32は対称行列となる。このため、上記の各成分は、行と列を入れ替えた成分と同一の値となる。例えば、ユーザ数(商品i1,商品i2)とユーザ数(商品i2,商品i1)とは、同一の値となる。なお、商品ペア集計結果32は、下三角の領域または上三角の領域を省略した三角行列であってもよい。この場合、対角成分を除き、上記の各成分について行と列とを入れ替えた成分には、0が設定される。
次に、サーバ装置100は、商品ペア集計結果32から、類似度集計結果33を生成する。類似度集計結果33は、ショッピングサイトで購入可能な商品のペアにおいて、2つの商品の間の類似度を示す対称行列である。類似度は、2つの商品の両方に同一ユーザが興味をもつ確率を示し、図3の計算方法では、2つの商品の両方を同一ユーザが購入する確率を示す。類似度を算出には、tanimoto係数を用いることができる。例えば、商品i1と商品i2の類似度についてtanimoto係数を用いて表すと、“ユーザ数(商品i1,商品i2)÷(ユーザ数(商品i1,商品i1)+ユーザ数(商品i2,商品i2)−ユーザ数(商品i1,商品i2))”となる。なお、類似度の算出には、ochiai係数やsorensen係数など別の係数が用いられてもよい。
類似度集計結果33の各行および各列は、ショッピングサイトで購入可能な商品を表す。類似度集計結果33の各成分は、2つの商品の間の類似度を表す。以下、類似度集計結果33において、商品を表す行および列により対応付けられる成分を“類似度(商品(行),商品(列))”と記載する場合がある。なお、同じ商品の組(対角成分)については、類似度を計算しない。
例えば、図3の類似度集計結果33が示すように、類似度(商品i1,商品i2)は、“1/(2+1−1)=1/2”となる。同様に集計した結果、類似度(商品i1,商品i3)は1/3となり、類似度(商品i1,商品i4)は0となり、類似度(商品i1,商品i5)は2/3となる。また、類似度(商品i2,商品i3)は0となり、類似度(商品i2,商品i4)は0となり、類似度(商品i2,商品i5)は1/3となる。また、類似度(商品i3,商品i4)は1/4となり、類似度(商品i3,商品i5)は2/3となる。さらに、類似度(商品i4,商品i5)は1/5となる。
なお、ペアとなる商品の間の順序は類似度の計算に影響しないため、類似度集計結果33は対称行列となる。このため、上記の各成分は、行と列を入れ替えた成分と同一の値となる。例えば、類似度(商品i1,商品i2)と類似度(商品i2,商品i1)とは、同一の値となる。なお、類似度集計結果33は、下三角の領域または上三角の領域を省略した三角行列であってもよい。この場合、対角成分を除き、上記の各成分について行と列とを入れ替えた成分には、0が設定される。
クライアント装置200は、類似度集計結果33をサーバ装置100から受信する。クライアント装置200は、例えば、ユーザがショッピングサイトにログインしたときに、ログインしたユーザの購入履歴情報および受信した類似度集計結果33を示す情報に基づいて、以下のように推奨する商品を特定する。
まず、クライアント装置200は、ショッピングサイトにログインしたユーザが過去に購入した商品毎に、類似度が閾値(例えば、1/2)より大きい他の商品を、推奨する商品と特定する。例えば、過去に商品i1,i2,i5を購入したユーザu5がログインしたとする。この場合、図3の類似度集計結果33が示すように、商品i1との類似度が閾値より大きいのは商品i5である。また、商品i2との類似度が閾値より大きい商品は存在せず、商品i5との類似度が閾値より大きいのは商品i1,i3である。そのため、クライアント装置200は、例えば、ユーザu5がまだ購入していない商品i3を推奨する商品と特定する。そして、特定された各商品の情報をユーザに提供する。この場合、例えば、ユーザu5がログイン後に閲覧するWebページには、商品i3に関する情報が表示される。
また、クライアント装置200は、ショッピングサイトについて、ユーザが閲覧している商品との類似度が高い他の商品を、推奨する商品として特定してもよい。この場合、ユーザに推奨する商品の情報は、例えば、ユーザが閲覧している商品の情報と合わせて同じWebページに表示される。
なお、サーバ装置100がユーザに推奨する商品を特定してもよい。この場合、クライアント装置200は、ログインしたユーザを示す情報やユーザが閲覧している商品を示す情報をサーバに送信する。そして、サーバ装置100は、受信したユーザを示す情報や商品を示す情報などに基づき、上記のように推奨する商品を特定し、特定した商品を示す情報をクライアント装置200に送信する。
ここで、クライアント装置200は、サーバ装置100が1回目の分析処理を行った後も、ショッピングサイトの運営に伴って購入履歴情報を継続して生成する。サーバ装置100は、1回目の分析処理に利用した購入履歴情報に加えて、新たに生成された購入履歴情報も反映した、最新の分析結果をクライアント装置200に提供することが好ましい。ただし、上記のようなバッチ方式による分析処理を繰り返すことは、複数回の分析処理の間で同じ購入履歴情報が重複して分析されることになり、効率性に改善の余地がある。分析結果に含まれるデータの中で、新たに生成された購入履歴情報の影響を受けるデータは一部分であるため、当該影響を受ける部分のみ更新できれば効率性が上がる。
そこで、第2の実施の形態のシステムでは、サーバ装置100は、全ての商品のペアではなく、新たに受信した購入履歴情報が示す商品と他の商品とのペアに限定して、類似度を再計算するようにする。以下、このように、追加または更新された分析対象のデータに関連する分析結果のみ更新する分析処理の実行方式を、“インクリメンタル方式”と記載する場合がある。
図4は、インクリメンタル方式でデータの分析処理を実行する例を示す図である。
サーバ装置100には、1回目の分析処理が行われることで、ユーザ毎集計結果31と、商品ペア集計結果32と、類似度集計結果33とが記憶されている。この状態で、ユーザu4が商品i2を購入したことを示す購入履歴情報が追加されたとき、サーバ装置100は、以下のように、インクリメンタル方式による分析処理により、追加された購入履歴情報の影響を受ける類似度を更新する。
まず、サーバ装置100は、図4のユーザ毎集計結果31が示すように、購入フラグ(ユーザu4,商品i2)を“○”で更新する。
次に、サーバ装置100は、更新した購入フラグ(ユーザu4,商品i2)に基づき、商品ペア集計結果32を更新する。商品ペア集計結果の全成分うち、購入フラグ(ユーザu4,商品i2)が影響する可能性のある成分は、ユーザ数(商品i2,商品i1〜i5)およびユーザ数(商品i1〜i5,商品i2)である。
また、図4のユーザ毎集計結果31が示すように、ユーザu4が以前に購入した商品は、商品i4である。そのため、サーバ装置100は、上記の成分のうち、ユーザ数(商品i2,商品i2)、ユーザ数(商品i2,商品i4)およびユーザ数(商品i4,商品i2)を更新する。すなわち、ユーザu4が商品i2を購入することに伴い、これらの商品ペアのユーザ数を1だけ加算(インクリメント)する。その結果、図4の商品ペア集計結果32が示すように、ユーザ数(商品i2,商品i2)が1から2に更新され、ユーザ数(商品i2,商品i4)が0から1に更新され、ユーザ数(商品i4,商品i2)が0から1に更新される。
そして、サーバ装置100は、更新したユーザ数(商品i2,商品i2)、ユーザ数(商品i2,商品i4)およびユーザ数(商品i4,商品i2)に基づき、類似度集計結果33を更新する。類似度集計結果33の全成分のうち、ユーザ数(商品i2,商品i2)が影響する成分は、類似度(商品i2,商品i1〜商品i5)および類似度(商品i1〜i5,商品i2)である。また、ユーザ数(商品i2,商品i4)およびユーザ数(商品i4,商品i2)が影響する成分も、上記範囲に含まれる。
そのため、サーバ装置100は、類似度集計結果33の全成分のうち上記の各成分を再計算する。ただし、ユーザ数(商品i2,商品i3)およびユーザ数(商品i3,商品i2)は0であるため、類似度(商品i2,商品i3)および類似度(商品i3,商品i2)の分子は0のままであり、再計算しなくてよい。その結果、図4の類似度集計結果33が示すように、類似度(商品i2,商品i1)が1/2から1/3に更新され、類似度(商品i2,商品i4)が0から1/4に更新され、類似度(商品i2,商品i5)が1/3から1/4に更新される。また、類似度(商品i1,商品i2)も1/3に更新され、類似度(商品i4,商品i2)も1/4に更新され、類似度(商品i5,商品i2)も1/4に更新される。
このように、サーバ装置100がバッチ方式による分析処理の実行の際にアクセスする行列の成分の数は、“5×5+5×5+4×5=70”となる。一方、サーバ装置100がインクリメンタル方式による分析処理の実行の際にアクセスする行列の成分の数は、“1+3+6=10”となる。すなわち、中間処理結果や分析結果などのデータに含まれる70の成分のうち、新たな購入履歴情報の受信に伴って実際に変更される成分の数は10となる。そのため、2回目以降の分析処理をインクリメンタル方式により実行することで、更新対象となる行列の成分の数が減る。そのため、分析処理の効率が上がる。
ここで、購入履歴情報、ユーザ毎集計結果31、商品ペア集計結果32および類似度集計結果33などのデータ(以下、分析データと言うことがある)は、サーバ装置100の備えるHDDなどの不揮発性の記憶装置に記憶される。
サーバ装置100がバッチ方式で分析処理を行うとき、分析データは、分析処理によりアクセスされる順に予めソートしておき、ソートされた順に予めHDD上に物理的に配置しておくことが可能である。これにより、分析処理の際、シーケンシャルアクセスにより、分析データにアクセスできるため、効率よくHDDへアクセスできる。
しかし、インクリメンタル方式による分析処理の場合、HDDに格納されている分析データのうちどのデータがアクセスされるかは、新たに購入履歴情報が受信されるまで分からない。このため、インクリメンタル方式では、参照または更新される順序に応じて予めHDD上で分析データをソートしておくことが難しく、ランダムアクセスが発生しやすい。よって、インクリメンタル方式は、バッチ方式に比べHDD上の分析データへのアクセス効率に改善の余地がある。
図5〜14では、サーバ装置100が、インクリメンタル方式による分析処理において、HDDへのランダムアクセスを抑制する方法について説明する。
図5は、サーバ装置のハードウェア例を示すブロック図である。サーバ装置100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、ディスクドライブ106および通信インタフェース107を有する。これらのユニットは、サーバ装置100内でバス108に接続されている。なお、プロセッサ101は、第1の実施の形態の演算部13の一例である。また、RAM102は、第1の実施の形態のメモリ12の一例である。また、HDD103は、第1の実施の形態の記憶装置11の一例である。
プロセッサ101は、プログラムの命令を実行する演算器を含むプロセッサであり、例えばCPUである。プロセッサ101は、HDD103に記憶されているプログラムやデータの少なくとも一部をRAM102にロードしてプログラムを実行する。なお、プロセッサ101は複数のプロセッサコアを備えてもよい。また、サーバ装置100は、複数のプロセッサを備えてもよい。また、サーバ装置100は、複数のプロセッサまたは複数のプロセッサコアを用いて並列処理を行ってもよい。また、2以上のプロセッサの集合、FPGAやASICなどの専用回路、2以上の専用回路の集合、プロセッサと専用回路の組み合わせなどを「プロセッサ」と呼んでもよい。
RAM102は、プロセッサ101が実行するプログラムやプログラムから参照されるデータを一時的に記憶する揮発性メモリである。なお、サーバ装置100は、RAM以外の種類のメモリを備えてもよく、複数個の揮発性メモリを備えてもよい。
HDD103は、OS(Operating System)やファームウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムおよびデータを記憶する不揮発性の記憶装置である。なお、サーバ装置100は、フラッシュメモリなどの他の種類の記憶装置を備えてもよく、複数個の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、プロセッサ101からの命令に従って、サーバ装置100に接続されたディスプレイ41に画像を出力する。ディスプレイ41としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部105は、サーバ装置100に接続された入力デバイス42から入力信号を取得し、プロセッサ101に通知する。入力デバイス42としては、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
ディスクドライブ106は、記録媒体43に記録されたプログラムやデータを読み取る駆動装置である。記録媒体43として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。ディスクドライブ106は、プロセッサ101からの命令に従って、記録媒体43から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク20などのネットワークを介して他の情報処理装置(例えば、クライアント装置200など)と通信を行う。
なお、サーバ装置100はディスクドライブ106を備えていなくてもよく、専ら他の端末装置から制御される場合には、画像信号処理部104や入力信号処理部105を備えていなくてもよい。また、ディスプレイ41や入力デバイス42は、サーバ装置100の筐体と一体に形成されていてもよい。
なお、クライアント装置200も、サーバ装置100と同様のハードウェアを用いて実現できる。
図6は、サーバ装置の機能例を示すブロック図である。サーバ装置100は、分析データ記憶部110、全体命令キュー120、セグメント別命令キュー群130、管理情報記憶部140、キャッシュ領域150およびスケジューラ160を有する。分析データ記憶部110は、HDD103に確保された記憶領域として実現される。全体命令キュー120、セグメント別命令キュー群130、管理情報記憶部140およびキャッシュ領域150は、RAM102に確保された記憶領域として実現される。スケジューラ160は、プロセッサ101が実行するプログラムのモジュールとして実現される。
また、セグメント別命令キュー群130は、第1の実施の形態の領域12a,12b,12cの集合の一例である。また、キャッシュ領域150は、第1の実施の形態のキャッシュ領域12dの一例である。
分析データ記憶部110は、分析処理に用いられる分析データを記憶する。分析データには、分析対象(例えば、購入履歴情報)、中間処理結果(例えば、ユーザ毎集計結果31および商品ペア集計結果32)および分析結果(例えば、類似度集計結果33)が含まれ得る。分析データは、アクセス命令により参照および更新される。第2の実施の形態のシステムにおいて、アクセス命令の中には、分析データを取得し、取得した分析データについてアクセス命令で指定される四則演算などの演算を実行し、演算結果で分析データを更新することを1つの命令として表現したものが含まれる。すなわち、アクセス命令には、1回ずつのデータ入出力と演算とを伴う命令が含まれる。なお、アクセス命令は、上記のような演算を伴う命令の他、読出命令や書込命令などの単純な命令や、比較命令などであってもよい。なお、第2の実施の形態のシステムにおいて、あるアクセス命令の結果は、他のアクセス命令の結果に影響しないものとする。すなわち、同時期に生成された複数のアクセス命令は任意の順序で実行してよい。
1つのアクセス命令によるアクセス先の分析データ(1つの「バリュー」)は、キーによって識別される。キーによって識別される1つのバリューは、例えば、行列の1つの行を表すものであってもよいし、行列の1つの成分を表すものであってもよい。これらの各キーは、HDD103上の複数のセグメントのいずれかに対応付けされる。セグメントとは、HDD103上の記憶領域を所定のデータサイズに分割した記憶領域である。キーに対応するバリューは、複数のセグメントのうちキーに対応付けされたセグメントに配置される。なお、第2の実施の形態のシステムでは、各セグメントは、同じ容量で分割されているが、異なる容量で分割されていてもよい。
分析データを複数のセグメントに分散して配置する際、続けて更新される可能性の高い分析データを同じセグメントに配置することが好ましい。例えば、商品の識別情報をキーとすると、同じジャンルの商品についての分析データ(当該商品のキーに対応付けられたバリュー)を同じセグメントに配置するようにする。
キーとセグメントとの対応付けは、サーバ装置100の管理者により任意に決定されてもよいし、同時期に更新された分析データに関する統計情報などを用いて機械的に決定されてもよい。
全体命令キュー120は、アクセス命令を格納するためのキューである。全体命令キュー120には、スケジューラ160により生成されるアクセス命令が格納される。
セグメント別命令キュー群130は、セグメント別命令キューの集合である。セグメント別命令キューは、全体命令キュー120と同様にアクセス命令が格納するためのキューである。複数のセグメント別命令キューには、全体命令キュー120上のアクセス命令がスケジューラ160により振り分けられる。また、セグメント別命令キューとHDD103上のセグメントとは、1対1に対応付けられている。また、複数のセグメント別命令キューは、セグメントがHDD103に配置されている物理的な順序と対応する順序で、RAM102上の記憶領域に並べて配置されている。また、各セグメント別命令キューには、RAM102上に配置されている順に連続した識別子(例えば、連続する識別番号)が割り当てられている。
管理情報記憶部140は、分析データのキーと当該分析データが格納されているセグメントとセグメント別命令キューとの対応関係を示す情報を格納するためのキー情報テーブルを記憶する。また、管理情報記憶部140は、キャッシュ領域150上にロードした(キャッシュされた)セグメントを管理するためのキャッシュ管理キューを記憶する。
キャッシュ領域150は、HDD103上の全セグメントのうち、一部のセグメントにおける分析データをキャッシュするための領域である。なお、“キャッシュする”は、HDD103からキャッシュ領域150へデータを一時的にロードすることを意味する。キャッシュ領域150には、スケジューラ160がアクセス命令によりアクセスしようとする分析データを含むセグメント全体がキャッシュされる。
スケジューラ160は、購入履歴情報の受信からアクセス命令の実行までの一連の処理を行う。スケジューラ160は、イベント処理部161、セグメント管理部162、キュー管理部163およびアクセス命令処理部164を有する。
イベント処理部161は、クライアント装置200から購入履歴情報を受信する。イベント処理部161は、受信した購入履歴情報を分析しアクセス命令を生成する。生成されるアクセス命令は、1つの購入履歴情報に対して1つでもよいし複数でもよい。また、イベント処理部161は、受信した購入履歴情報を、所定のアプリケーションプログラムにより解析することで、アクセス命令を抽出してもよい。イベント処理部161は、生成したアクセス命令を全体命令キュー120へ格納する。
また、イベント処理部161は、全体命令キュー120からアクセス命令を取り出す。そして、イベント処理部161は、取り出したアクセス命令の振り分け先となるセグメント別命令キューの判定を、セグメント管理部162に要求する。また、イベント処理部161は、アクセス命令の振り分け先として判定されたセグメント別命令キューに、取り出したアクセス命令を振り分けるようキュー管理部163に要求する。
セグメント管理部162は、イベント処理部161の要求に応じて、キー情報テーブルに格納されている情報に基づき、取り出されたアクセス命令の振り分け先となるセグメント別命令キューを判定する。振り分け先のセグメント別命令キューは、アクセス先の分析データが格納されているセグメントに対応するセグメント別命令キューである。そして、セグメント管理部162は、振り分け先と判定したセグメント別命令キューを示す情報を、イベント処理部161へ出力する。
キュー管理部163は、イベント処理部161の要求に応じて、振り分け先と判定されたセグメント別命令キューに、アクセス命令を格納する。また、キュー管理部163は、単位時間当たりのセグメント別命令キューへのアクセス命令の入力命令数(以下、単位時間当たりの入力命令数と記載することがある)を監視する。また、キュー管理部163は、アクセス命令処理部164の要求に応じて、監視した単位時間当たりの入力命令数をアクセス命令処理部164へ出力する。
アクセス命令処理部164は、以下のようにセグメント別命令キュー内のアクセス命令を実行する。以下、セグメント別命令キュー内の各アクセス命令の実行処理を、“アクセス命令実行処理”と記載する場合がある。
まず、アクセス命令処理部164は、各セグメント別命令キュー内のアクセス命令の数に基づいて、1以上のセグメント別命令キューを選択する。選択するセグメント別命令キューの数は、キュー管理部163から出力された単位時間当たりの入力命令数値および、単位時間当たりの出力命令数に基づき、アクセス命令処理部164により算出される。“単位時間当たりの出力命令数”は、セグメント別命令キューから出力される(アクセス命令処理部164により処理される)ことが予想される単位時間当たりのアクセス命令の数を意味する。
次に、アクセス命令処理部164は、キャッシュ管理キュー内の情報が示すセグメントのキャッシュ状況に基づき、選択したセグメント別命令キューに対応するセグメントのデータをキャッシュする。この際、キャッシュするための空き領域がキャッシュ領域150上にない場合は、最も先にロードされた(古い)キャッシュ領域150上のセグメントのデータを、分析データ記憶部110に書き戻す。
そして、アクセス命令処理部164は、選択したセグメント別命令キュー内の各アクセス命令を、キャッシュされたセグメントのデータに対して纏めて実行する。
第2の実施の形態のシステムにおいて、アクセス命令実行処理は、例えば、前回選択したセグメント別命令キューについてのアクセス命令実行処理が終了する度に実行される。なお、イベント処理部161によりアクセス命令が生成される頻度が比較的低い場合、アクセス命令実行処理は、所定の周期で間欠的に実行されてもよい。
次に、図7〜9を用いて、サーバ装置100が用いるテーブルやキューについて説明する。
図7は、全体命令キューの例を示す図である。全体命令キュー120は、イベント処理部161により生成されるアクセス命令を格納するためのキューである。図7で示すように、全体命令キュー120に格納されるアクセス命令は、先に格納された古いアクセス命令ほど下に記載され、後に格納された新しいアクセス命令ほど上に記載されるものとする。以下、他の図に記載されている全体命令キュー120やセグメント別命令キューについても同様である。
例えば、キーBに対応する分析データ(キーBによって識別されるバリュー)に対して5を減算するアクセス命令、キーAに対応する分析データに対して10を加算するアクセス命令の順に、アクセス命令が生成されたとする。この場合、図7の全体命令キュー120が示すように、まず、キーの項目が“キーB”であり、種別の項目が“減算”であり、パラメータの項目が“5”であるアクセス命令が格納される。続けてその上に、キーの項目が“キーA”であり、種別の項目が“加算”であり、パラメータの項目が“10”であるアクセス命令が格納される。また、この場合、図7の全体命令キュー120からアクセス命令を取り出す際、古いアクセス命令から順に(キーの項目が“キーB”であるアクセス命令、キーの項目が“キーA”であるアクセス命令の順に)取り出される。
全体命令キュー120に格納されるアクセス命令は、キー、種別およびパラメータの項目を有する。また、セグメント別命令キュー内のアクセス命令についても同様である。
キーの項目には、アクセス先の分析データを識別するためのキーが設定される。種別の項目には、アクセス命令の種別が設定される。アクセス命令の種別としては、加算・減算・乗算・除算などの四則演算や、その他の演算の種別が挙げられる。パラメータの項目には、アクセス命令の種別に応じたパラメータ(例えば、加数・減数・乗数・除数など、現在のバリューと組み合わせて使用される演算のオペランド)が設定される。
例えば、図7の全体命令キュー120におけるキーの項目が“キーA”であるアクセス命令を実行する場合、まず、キーAに対応する分析データを読み出し、読み出した分析データに対し10を加算する処理を実行する。次に、加算処理の結果でキーAに対応する分析データを更新する。また、キーの項目が“キーB”であるアクセス命令を実行する場合、まず、キーBに対応する分析データを読み出し、読み出した分析データに対し5を減算する処理を実行する。次に、減算処理の結果でキーBに対応する分析データを更新する。
なお、アクセス命令の種別は、四則演算命令の他、読出命令や書込命令などの単純な命令や、比較命令などのその他の命令であってもよい。
図8は、キー情報テーブルの例を示す図である。キー情報テーブル141は、分析データ記憶部110に記憶されている分析データのキーに関する情報を格納する。キー情報テーブル141は、管理情報記憶部140に記憶されている。
キー情報テーブル141は、キー、セグメントおよびキューの項目を有する。キーの項目には、分析データを識別するためのキーが設定される。セグメントの項目には、キーによって識別される分析データが格納されたセグメントの識別子が設定される。キューの項目には、セグメントに対応するセグメント別命令キューの識別子が設定される。セグメント管理部162は、キー情報テーブル141を参照して、アクセス命令に含まれるキーから、当該アクセス命令を格納するセグメント別命令キューを特定できる。
図9は、キャッシュ管理キューの例を示す図である。キャッシュ管理キュー142は、キャッシュ領域150上にロードされている(キャッシュされている)セグメントに関する情報を格納する。図9で示すように、キャッシュ管理キュー142に格納されるセグメントに関する情報は、先に格納された古いセグメントほど下に記載され、後に格納された新しいセグメントほど上に記載されるものとする。以下、他の図に記載されているキャッシュ管理キュー142についても同様である。
キャッシュ管理キュー142は、セグメントの項目を有する。セグメントの項目には、分析データがキャッシュ領域150に現在キャッシュされているセグメントを識別するための識別子が設定される。キャッシュ領域150からいずれかのセグメントの分析データを追い出す場合には、キャッシュ時期が古いセグメントから順に選択される。ただし、キャッシュ領域150上でのアクセス状況を考慮したLRU(Least Recently Used)アルゴリズムなど、他のキャッシュアルゴリズムを用いることもできる。
次に、図10〜12を用いて、サーバ装置100の各機能について説明する。
図10は、アクセス命令をセグメント別命令キューに振り分ける例を示す図である。図10では、全体命令キュー120に格納されているアクセス命令を、セグメント別命令キュー131a,131bに振り分ける例について説明する。セグメント別命令キュー131a,131bは、セグメント別命令キュー群130に含まれるものであり、分析データ記憶部110上のセグメントSEG#1,SEG#2に対応するものである。セグメント別命令キュー131aの識別子は、“QUE#1”であり、セグメント別命令キュー131bの識別子は、“QUE#2”である。
全体命令キュー120に格納されているアクセス命令は、スケジューラ160により、アクセス命令に含まれるキーと対応付けられているセグメント別命令キューへ振り分けられる。キーとセグメント別命令キューとの対応関係は、キー情報テーブル141に記載されている。
例えば、キー情報テーブル141には、キーの項目に“キーA”が設定され、キューの項目に“QUE#1”が設定されているレコードが存在している。また、キー情報テーブル141には、キーの項目に“キーB”が設定され、キューの項目に“QUE#1”が設定されているレコードが存在している。さらに、キー情報テーブル141には、キーの項目に“キーC”が設定され、キューの項目に“QUE#2”が設定されているレコードが存在している。
この状態で、キーの項目に“キーA”が設定されているアクセス命令と、キーの項目に“キーB”が設定されているアクセス命令と、キーの項目に“キーC”が設定されているアクセス命令とが、全体命令キュー120に格納されているとする。
この場合、“キーA”および“キーB”に対応するキューは“QUE#1”であるため、“キーA”が設定されているアクセス命令と、“キーB”が設定されているアクセス命令とは、セグメント別命令キュー131aに振り分けられる。また、“キーC”に対応するキューは“QUE#2”であるため、“キーC”が設定されているアクセス命令は、スケジューラ160によりセグメント別命令キュー131bに振り分けられる。
図11は、キャッシュするセグメントの数を算出する例を示す図である。セグメント111a,111b,111c,111dは、順に隣接したHDD103上の領域に配置されている。すなわち、セグメント111aはセグメント111bと隣接し、セグメント111bはセグメント111cと隣接し、セグメント111cはセグメント111dと隣接する。セグメント111aの識別子は、“SEG#1”であり、セグメント111bの識別子は、“SEG#2”である。また、セグメント111cの識別子は、“SEG#3”であり、セグメント111dの識別子は、“SEG#4”である。また、セグメント111aには、“キーA”および“キーB”に対応する分析データが配置されている。また、セグメント111bには、“キーC”および“キーD”に対応する分析データが配置されている。また、セグメント111cには、“キーE”および“キーF”に対応する分析データが配置されている。また、セグメント111dには、“キーG”および“キーH”に対応する分析データが配置されている。
また、キャッシュ領域150には、セグメント111a,111bの分析データがロードされている。また、セグメント別命令キュー群130には、セグメント別命令キュー131a〜131dが含まれる。セグメント別命令キュー131cの識別子は、“QUE#3”であり、セグメント別命令キュー131dの識別子は、“QUE#4”である。
また、セグメント別命令キュー131aには、2のアクセス命令が格納され、セグメント別命令キュー131bには1のアクセス命令が格納されている。セグメント別命令キュー131cには、3のアクセス命令が格納され、セグメント別命令キュー131dには2のアクセス命令が格納されている。
また、セグメント別命令キュー131aは、セグメント111aに対応し、セグメント別命令キュー131bは、セグメント111bに対応する。セグメント別命令キュー131cは、セグメント111cに対応し、セグメント別命令キュー131dは、セグメント111dに対応する。
なお、セグメント別命令キュー131a,131b,131c,131dは、順にRAM102上に並べて配置されていてもよいし、任意の順序で配置されていてもよい。また、セグメント別命令キュー131a,131b,131c,131dの配置順序は、セグメント111a,111b,111c,111dと対応してもよいし、任意の順序でもよい。
このとき、アクセス命令処理部164は、以下のように、単位時間当たりの出力命令数PRを算出する。
まず、アクセス命令処理部164は、HDD103上のセグメントの分析データに対するアクセス処理時間PTを算出する。アクセス処理時間PTは、指定した数のHDD103上のセグメントのデータをキャッシュする時間と、キャッシュされたセグメントのデータをHDD103に書き戻す時間との合計である。具体的には、アクセス処理時間PTは、“(レイテンシL+平均データサイズD×1セグメント当たりのデータ数S×キューの選択数NQ/スループットT)×2”により算出される。
レイテンシLは、HDD103上の分析データに対してアクセス命令が要求されてから、HDD103上の分析データへのアクセスが開始されるまでの間の遅延時間である。レイテンシLには、例えば、HDD103におけるヘッドのシーク時間やディスクの回転待ち時間などが含まれる。
平均データサイズDは、分析データ記憶部110内の1つのキーによって識別される1単位の分析データ(1つの「バリュー」)のサイズの平均値である。例えば、図11では、データ(キーA〜H)それぞれのサイズの平均値となる。なお、“データ(キーA〜H)”は、キーA〜Hに対応する分析データを意味する。
1セグメント当たりのデータ数Sは、1セグメントが収容するキーの数の平均値である。例えば、図11に示すように、セグメント111a,111b,111c,111dそれぞれには2ずつのキーに対応するデータが配置されているため、1セグメント当たりのデータ数Sは、2となる。
キューの選択数NQは、アクセス命令処理部164が蓄積されたアクセス命令を実行する際に1回に選択するセグメント別命令キューの数である。アクセス命令処理部164は、キューの選択数NQを可変として、アクセス処理時間PTを計算する。例えば、図11に示すように、セグメント別命令キュー群130に含まれるセグメント別命令キューの数は4つであるため、キューの選択数NQの値が“1”〜“4”それぞれの場合について、アクセス処理時間PTを計算する。
スループットTは、HDD103からの読み出しおよび書き込みが可能な単位時間当たりのデータの量である。
なお、第2の実施の形態のシステムにおいて、平均データサイズDおよび1セグメント当たりのデータ数Sには、予めユーザが指定した固定された値(予測値や期待値など)を用いてもよい。また、平均データサイズDおよび1セグメント当たりのデータ数Sには、スケジューラ160がHDD103を監視することで算出した値(実測値)を用いてもよい。
次に、アクセス命令処理部164は、単位時間当たりの出力命令数PRを算出する。単位時間当たりの出力命令数PRは、“平均命令数AC×キューの選択数NQ/アクセス処理時間PT”により算出される。
このとき、単位時間当たりの出力命令数PRは、算出された各アクセス処理時間PTについて算出される。また、キューの選択数NQには、アクセス処理時間PTを算出したときの値を用いる。
平均命令数ACは、過去のアクセス命令実行処理毎に出力されたセグメント別命令キュー毎のアクセス命令の数の平均値である。平均命令数ACは、例えば、アクセス命令実行処理時に選択されたセグメント別命令キュー毎に、実行されたアクセス命令の数(当該セグメント別命令キューが選択された時点で蓄積されていたアクセス命令の数)を監視し、所定の期間内において監視されたアクセス命令の数の移動平均により算出できる。
これにより、グラフ51が示すように、各キューの選択数NQについて、単位時間当たりの出力命令数PRが算出される。具体的には、単位時間当たりの出力命令数PRは、キューの選択数NQの値の増加により単調に増加する。これは、1回にシーケンシャルに読み書きできる分析データの増大に伴い、アクセス処理時間PTに占めるレイテンシLの割合が小さくなるためである。ただし、キューの選択数NQが大きくなるに従い、その傾き(微分値)は漸減する。
次に、アクセス命令処理部164は、単位時間当たりの出力命令数PRが単位時間当たりの入力命令数UR以上であるキューの選択数NQを抽出する。グラフ51が示すように、単位時間当たりの出力命令数PRが単位時間当たりの入力命令数UR以上となるキューの選択数NQは2〜4であるため、2〜4のキューの選択数NQが抽出される。
そして、アクセス命令処理部164は、抽出したキューの選択数NQのうち、最も小さい値を、アクセス命令処理部164が選択するセグメント別命令キューの数として算出する。そのため、図11では、アクセス命令処理部164が選択するキューの数として、2が算出される。
アクセス命令処理部164は、蓄積されたアクセス命令を処理するにあたり、セグメント別命令キュー131a,131b,131c,131dのうち隣接するNQ個のセグメント別命令キューを1回に選択する。例えば、アクセス命令処理部164は、セグメント別命令キュー131a,131bの組、セグメント別命令キュー131b,131cの組、または、セグメント別命令キュー131c,131dの組を1回に選択する。すると、アクセス命令処理部164は、選択したNQ個のセグメントをキャッシュ領域150に読み込んだ際キャッシュ領域150があふれる場合は、キャッシュ領域150からNQ個のセグメントをHDD130に書き戻す。その書き戻すセグメントは、キャッシュ管理キューの古い方からNQ個選択する。その後、セグメント111a,111b,111c,111dのうち、隣接するNQ個のセグメントをシーケンシャルにキャッシュ領域150に読み込むことになる。隣接する複数のセグメント別命令キューを選択することで、複数のセグメントへのアクセスを1回のシーケンシャルアクセスで実現でき、レイテンシLの影響を低減できる。
以上のように、PR≧URとなるように1回に選択するセグメント別命令キューの数を決定することで、サーバ装置100の負荷が高いときでも、セグメント別命令キュー131a,131b,131c,131dが溢れるのを抑制できる。また、できる限り1回に選択するセグメント別命令キューの数を小さくすることで、次に他のセグメント別命令キューを選択するまでのサイクルを短くできる。よって、セグメント別命令キュー131a,131b,131c,131dに蓄積されたアクセス命令の数の偏りの変化に柔軟に対応することができる。また、1回に選択するセグメント別命令キューの数が小さいほど、次に処理すべきセグメント別命令キューを選択する処理が簡潔になる。
図12は、アクセス命令を実行する例を示す図である。図12では、セグメント別命令キューに格納された各アクセス命令を、キャッシュされたセグメントの分析データに対して実行する処理の例について説明する。図12において、図11と同様の事項については、説明を省略することがある。また、アクセス命令処理部164は、選択するセグメント別命令キューの数として、2を算出したものとする。
以下、図12に示す処理をステップ番号に沿って説明する。
(S1)アクセス命令処理部164は、算出した数分のセグメント別命令キューを、次のように選択する。
例えば、まず、アクセス命令処理部164は、選択可能なセグメント別命令キューの組み合わせを算出する。この際、アクセス命令処理部164は、選択したセグメント別命令キューに対応する複数のセグメントがHDD103上で隣接した領域となるように、組み合わせを算出する。例えば、図12では、各セグメントは、セグメント111a,111b,111c,111dの順に、HDD103上の隣接した領域に配置されている。そのため、セグメント別命令キュー131a,131bの組み合わせと、セグメント別命令キュー131b,131cの組み合わせと、セグメント別命令キュー131c,131dの組み合わせとが算出される。
次に、アクセス命令処理部164は、算出された組み合わせ毎に、その組み合わせに含まれる各セグメント別命令キュー内のアクセス命令の数の合計を算出する。そして、アクセス命令処理部164は、算出された合計が最大である組み合わせに含まれるセグメント別命令キューを選択する。例えば、図12では、セグメント別命令キュー131a,131bのアクセス命令の数の合計は、“2+1=3”である。セグメント別命令キュー131b,131cのアクセス命令の数の合計が“1+3=4”である。セグメント別命令キュー131c,131dのアクセス命令の数の合計が“3+2=5”である。そのため、セグメント別命令キュー131c,131dの組み合わせが、アクセス命令処理部164により選択される。
(S2)アクセス命令処理部164は、選択されたセグメント別命令キュー131c,131dに対応するセグメント111c,111dをキャッシュするための空き領域が、キャッシュ領域150に存在するか判定する。図12では、キャッシュ領域150の空き領域が存在しないため、ロード不可能と判定される。そのため、アクセス命令処理部164は、現在キャッシュされているセグメント111a,111bの分析データをHDD103に書き戻す。
このとき、セグメント111a,111bは、HDD103上で隣接した領域に配置されているため、2つのセグメント分の分析データをシーケンシャルアクセスによりHDD103へ書き戻すことができる。
(S3)アクセス命令処理部164は、セグメント別命令キュー131cに対応するセグメント111cおよび、セグメント別命令キュー131dに対応するセグメント111dの分析データをキャッシュする。このとき、アクセス命令処理部164は、2つのセグメント分の分析データをシーケンシャルアクセスにより読み出すことができる。
(S4,S4a)アクセス命令処理部164は、選択したセグメント別命令キュー131c,131d毎に、格納されているアクセス命令取り出す。そして、アクセス命令処理部164は、取り出したアクセス命令を、キャッシュ領域150にキャッシュしたセグメント111c,111dの分析データに対して実行する。
なお、以下の説明では、図11で説明した方法で算出されるセグメント別命令キューの数は、2であるものとする。また、キャッシュ領域150に格納可能なセグメントの数は、2の倍数であるものとする。キャッシュ領域150上の各セグメントは、キャッシュされたときと同じ組み合わせで、HDD103に書き戻されることになる。
次に、図13〜14を用いて、スケジューラ160によるアクセス命令に関する処理について、フローチャートを用いて説明する。
図13は、アクセス命令を生成する処理の例を示すフローチャートである。図13の処理は、イベント処理部161がクライアント装置200から購入履歴情報を受信したときに実行される。以下、図13に示す処理をステップ番号に沿って説明する。
(S11)イベント処理部161は、クライアント装置200から購入履歴情報を受信する。
(S12)イベント処理部161は、受信した購入履歴情報に基づき、図4のような分析処理を実行することで、分析データ記憶部110内の分析データへのアクセス命令を1以上生成する。各アクセス命令には、アクセスする分析データを識別するためのキーを含む。
(S13)イベント処理部161は、生成した1以上のアクセス命令を全体命令キュー120に格納する。
図14は、アクセス命令を振り分ける処理の例を示すフローチャートである。図14の処理は、一定周期毎にスケジューラ160により実行される。以下、図14に示す処理をステップ番号に沿って説明する。
(S15)イベント処理部161は、全体命令キュー120に格納されているアクセス命令を1つ取り出す。
(S16)セグメント管理部162は、取り出されたアクセス命令の振り分け先のセグメント別命令キューを次のように判定する。
まず、セグメント管理部162は、アクセス命令と同じキーを含むレコードをキー情報テーブル141から検索する。次に、セグメント管理部162は、検索したレコードのキューの項目に記載されたセグメント別命令キューを、振り分け先のセグメント別命令キューと判定する。
(S17)キュー管理部163は、取り出されたアクセス命令を、判定されたセグメント別命令キューに格納する。
このとき、キュー管理部163は、セグメント別命令キューに格納されたアクセス命令の数を監視し、単位時間当たりの入力命令数URを算出する。単位時間当たりの入力命令数URは、例えば、管理情報記憶部140に確保された記憶領域に記憶される。
(S18)アクセス命令処理部164は、全体命令キュー120が空か判定する。全体命令キュー120が空である場合、処理を終了する。全体命令キュー120にアクセス命令が存在する場合、処理をステップS15へ進める。
図15は、アクセス命令を実行する処理の例を示すフローチャートである。図15〜16で説明するアクセス命令処理は、前回のアクセス命令処理が終了したことを契機として実行される。なお、アクセス命令が全体命令キュー120に格納される頻度が低い場合、一定周期毎に間欠的に実行するようにしてもよい。以下、図15〜16に示す処理をステップ番号に沿って説明する。
(S21)アクセス命令処理部164は、図11で説明したように、“単位時間当たりの入力命令数UR≦単位時間当たりの出力命令数PR”となるようなキューの選択数NQのうち、最小値を算出する。アクセス命令処理部164は、算出された値を、ステップS22で選択するセグメント別命令キューの数とする。このとき、単位時間当たりの入力命令数URは、図14のステップS17でキュー管理部163により算出されたものが用いられる。
なお、選択するセグメント別命令キューの数は、図15のアクセス命令処理が実行される毎に(1以上のセグメント別命令キューを選択する毎に)算出してもよいし、間欠的に算出してもよい。また、セグメント別命令キューの数を決定するために用いる単位時間当たりの入力命令数URは、当該決定の毎に最新のものをキュー管理部163から取得してもよいし、間欠的にキュー管理部163から取得するようにしてもよい。
(S22)アクセス命令処理部164は、図12のステップS1で説明したように、セグメント別命令キュー群130から、ステップS21で算出した数分のセグメント別命令キューを次のように選択する。
まず、アクセス命令処理部164は、選択可能なセグメント別命令キューの組み合わせを算出する。この際、各組み合わせに含まれるセグメント別命令キューに対応するセグメントが、HDD103上で隣接した領域に配置されているようにする。2以上のセグメントが隣接しているかは、例えば、当該セグメントの識別子または当該セグメントに対応するセグメント別命令キューの識別子が連続した値か否かにより判断できる。例えば、“QUE#1”と“QUE#2”とは、識別子が連続していると判断する。また、“QUE#1”と“QUE#3”とは、識別子が連続していないと判断する。
次に、アクセス命令処理部164は、算出された組み合わせ毎に、その組み合わせに含まれるセグメント別命令キュー内のアクセス命令の数の合計を算出する。そして、アクセス命令処理部164は、算出された合計が最大である組み合わせのセグメント別命令キューを、アクセス命令を取り出すセグメント別命令キューとして選択する。
(S23)アクセス命令処理部164は、キャッシュするセグメントを次のように特定する。まず、アクセス命令処理部164は、ステップS22で選択した各セグメント別命令キューについて、その識別子を含むレコードをキー情報テーブル141から検索する。アクセス命令処理部164は、検索したレコードのセグメントの項目から、セグメントの識別子を読み出す。そして、アクセス命令処理部164は、読み出した識別子が示すセグメントを、キャッシュするセグメントと特定する。
(S24)アクセス命令処理部164は、ステップS23で特定されたセグメントがいずれもキャッシュ済みか判定する。キャッシュ済みであるかは、特定されたセグメントの識別子が、キャッシュ管理キュー142に格納されているかで判定する。
特定されたセグメントがいずれもキャッシュ済みである場合、処理をステップS31へ進める。キャッシュ済みでないセグメント存在する場合、処理をステップS25へ進める。
(S25)アクセス命令処理部164は、特定したセグメントの分析データをキャッシュするための空き領域がキャッシュ領域150に存在するか判定する。以下、キャッシュするための空き領域を“空きキャッシュ領域”と記載する場合がある。
例えば、アクセス命令処理部164は、キャッシュ管理キュー142に格納可能な識別子の数から、キャッシュ管理キュー142に現在格納されている識別子の数を減算することで、追加でキャッシュできるセグメントの数を算出する。そして、アクセス命令処理部164は、キャッシュできるセグメントの数が、ステップS23で特定したセグメントの数以上であれば、特定したセグメントの分析データをキャッシュするための空きキャッシュ領域が存在すると判定する。
特定したセグメントのための空きキャッシュ領域が存在する場合、処理をステップS28へ進める。特定した複数のセグメントのための空きキャッシュ領域が存在しない場合(空きキャッシュ領域が不足している場合)、処理をステップS26へ進める。
(S26)アクセス命令処理部164は、キャッシュされているセグメントのうち、分析データ記憶部110に書き戻すセグメントを特定する。
具体的には、ステップS21で算出した数分、セグメントの識別子をキャッシュ管理キュー142の先頭(図9の下側)から取り出す。アクセス命令処理部164は、取り出した識別子が示すセグメントを、分析データ記憶部110に分析データを書き戻すセグメントと特定する。
(S27)アクセス命令処理部164は、ステップS26で特定されたキャッシュ領域150上のセグメントの分析データを、HDD103の分析データ記憶部110へ書き戻す。このとき、書き戻すセグメントが2以上ある場合であっても、当該2以上のセグメントはHDD103上で隣接しているため、1回のシーケンシャルアクセスによって当該2以上のセグメントの分析データを書き戻すことができる。
(S28)アクセス命令処理部164は、ステップS23で特定したセグメントの識別子をキャッシュ管理キュー142へ格納する。このとき、セグメントの配置されている順に、識別子をキャッシュ管理キュー142へ格納するようにする。
そして、アクセス命令処理部164は、特定したセグメントの分析データを、HDD103の分析データ記憶部110からキャッシュ領域150にキャッシュする。
図16は、アクセス命令を実行する処理の例を示すフローチャート(続き)である。
(S31)アクセス命令処理部164は、ステップS22で選択した今回処理するセグメント別命令キューの1つを選択する。
(S32)アクセス命令処理部164は、選択したセグメント別命令キューからアクセス命令を1つ取り出す。
(S33)アクセス命令処理部164は、キャッシュ領域150上のセグメントの分析データに対し、取り出したアクセス命令を実行する。使用するセグメントは、アクセス命令が取り出されたセグメント別命令キューに対応するセグメントである。
(S34)アクセス命令処理部164は、ステップS31で選択したセグメント別命令キューが空か判定する。すなわち、アクセス命令処理部164は、選択したセグメント別命令キューから全てのアクセス命令を取り出したか判定する。
セグメント別命令キューが空の場合、処理をステップS35へ進める。セグメント別命令キューにアクセス命令が存在する場合、処理をステップS32へ進める。
(S35)アクセス命令処理部164は、ステップS22で選択した今回処理するセグメント別命令キューの全てを選択済か判定する。全てのセグメント別命令キューを選択済みの場合、処理を終了する。未選択のセグメント別命令キューが存在する場合、処理をステップS31へ進める。
第2の実施の形態のサーバ装置100によれば、1または2以上のセグメントの分析データ全体を纏めてRAM102にキャッシュし、キャッシュした分析データに対して、セグメント別命令キューに溜まったアクセス命令を纏めて実行する。また、1または2以上のセグメントの分析データ全体を、RAM102からHDD103に書き戻す。すなわち、複数のアクセス命令を実行することに伴うランダムアクセスは、ランダムアクセスが比較的低速なHDD103上で発生させる代わりに、ランダムアクセスが比較的高速なRAM102上で発生させるようにする。HDD103上では、ランダムアクセスに代えてシーケンシャルアクセスが行われる。これにより、複数のアクセス命令を効率的に実行することができる。特に、現在の値を読み込んで演算を行い演算結果に応じて値を更新するような複雑なアクセス命令は、RAM102上で効率的に実行できる。
また、1回に複数のセグメントの分析データをキャッシュするとき、HDD103上で隣接するセグメントを選択することで、複数のセグメントの分析データを1回のシーケンシャルアクセスで読み出すことができ、HDD103でのアクセスを効率化できる。
また、1回に処理するセグメント別命令キューの数を可変とすることができる。単位時間当たりに発生するアクセス命令が多いときは、1回に処理するセグメント別命令キューの数を多くすることで、シーク時間などのHDD103のレイテンシの影響を小さくし、単位時間当たりに処理できるアクセス命令を増やすことができる。また、単位時間当たりに発生するアクセス命令が少ないときは、1回に処理するセグメント別命令キューの数を小さくすることで、セグメント別命令キューを選択するサイクルを短くすることができる。これにより、アクセス命令の発生状況の変化に柔軟に対応でき、また、あるセグメント別命令キューに未処理の古いアクセス命令が長く滞留してしまう確率を低減できる。
なお、前述のように、第1の実施の形態の情報処理は、情報処理装置10にプログラムを実行させることで実現でき、第2の実施の形態の情報処理は、サーバ装置100やクライアント装置200にプログラムを実行させることで実現できる。このようなプログラムは、コンピュータ読み取り可能な記録媒体(例えば、記録媒体43)に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FDおよびHDDが含まれる。光ディスクには、CD、CD−R(Recordable)/RW(Rewritable)、DVDおよびDVD−R/RWが含まれる。
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。コンピュータは、例えば、可搬記録媒体に記録されたプログラムを、記憶装置(例えば、HDD103)に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよい。また、上記の情報処理の少なくとも一部を、DSP、ASIC、PLD(Programmable Logic Device)などの電子回路で実現することも可能である。
以上の第1および第2の実施の形態を含む実施の形態に関し、さらに以下の付記を開示する。
(付記1) データを格納する複数のセグメントを含む記憶装置と、
前記複数のセグメントに対応する複数の領域を含むメモリと、
発生した複数のアクセス命令を処理する演算部と、
を有し、前記演算部は、
発生した各アクセス命令について、当該アクセス命令を前記メモリ上の前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、情報処理装置。
(付記2) 前記演算部は、単位時間当たりに発生するアクセス命令の数を監視し、
前記複数の領域のうち1回に選択する領域の数を、前記単位時間当たりに発生するアクセス命令の数に応じて決定する、付記1記載の情報処理装置。
(付記3) 前記演算部は、前記単位時間当たりに発生するアクセス命令の数の増加に応じて、前記1回に選択する領域の数を増加させる、付記2記載の情報処理装置。
(付記4) 前記演算部は、前記複数の領域のうち2以上の領域を1回に選択する場合、前記選択する2以上の領域を、前記記憶装置上で隣接して配置されている2以上のセグメントに対応する領域とする、付記1乃至3のいずれか一項に記載の情報処理装置。
(付記5) 前記発生した複数のアクセス命令は、前記複数のセグメントのいずれかに格納されているデータを用いて演算を行い、演算結果に応じて当該データを書き換えることを示すアクセス命令を含む、付記1乃至4のいずれか一項に記載の情報処理装置。
(付記6) コンピュータが実行するデータアクセス方法であって、
前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、データアクセス方法。
(付記7) コンピュータに、
前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
前記メモリ上の前記複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、処理を実行させるプログラム。
10 情報処理装置
11 記憶装置
11a,11b,11c セグメント
12 メモリ
12a,12b,12c 領域
12d キャッシュ領域
13 演算部

Claims (6)

  1. データを格納する複数のセグメントを含む記憶装置と、
    前記複数のセグメントに対応する複数の領域を含むメモリと、
    発生した複数のアクセス命令を処理する演算部と、
    を有し、前記演算部は、
    発生した各アクセス命令について、当該アクセス命令を前記メモリ上の前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
    前記メモリ上の前記複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、情報処理装置。
  2. 前記演算部は、単位時間当たりに発生するアクセス命令の数を監視し、
    前記複数の領域のうち1回に選択する領域の数を、前記単位時間当たりに発生するアクセス命令の数に応じて決定する、請求項1記載の情報処理装置。
  3. 前記演算部は、前記単位時間当たりに発生するアクセス命令の数の増加に応じて、前記1回に選択する領域の数を増加させる、請求項2記載の情報処理装置。
  4. 前記演算部は、前記複数の領域のうち2以上の領域を1回に選択する場合、前記選択する2以上の領域を、前記記憶装置上で隣接して配置されている2以上のセグメントに対応する領域とする、請求項1乃至3のいずれか一項に記載の情報処理装置。
  5. コンピュータが実行するデータアクセス方法であって、
    前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
    発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
    前記メモリ上の前記複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、データアクセス方法。
  6. コンピュータに、
    前記コンピュータが備える記憶装置に含まれるデータを格納する複数のセグメントに対応して、前記コンピュータが備えるメモリに複数の領域を確保し、
    発生した複数のアクセス命令それぞれについて、当該アクセス命令を前記複数の領域のうち当該アクセス命令のアクセス先のセグメントに対応する領域に格納し、
    前記メモリ上の前記複数の領域のうち選択した少なくとも1つの領域に対応するセグメントのデータを、前記記憶装置から前記メモリ上の前記複数の領域と異なる他の領域にロードし、前記ロードしたセグメントのデータに対して、前記選択した領域に格納されているアクセス命令を実行する、処理を実行させるプログラム。
JP2013235974A 2013-11-14 2013-11-14 情報処理装置、データアクセス方法およびプログラム Ceased JP2015095226A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013235974A JP2015095226A (ja) 2013-11-14 2013-11-14 情報処理装置、データアクセス方法およびプログラム
US14/533,601 US20150134919A1 (en) 2013-11-14 2014-11-05 Information processing apparatus and data access method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013235974A JP2015095226A (ja) 2013-11-14 2013-11-14 情報処理装置、データアクセス方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2015095226A true JP2015095226A (ja) 2015-05-18

Family

ID=53044840

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013235974A Ceased JP2015095226A (ja) 2013-11-14 2013-11-14 情報処理装置、データアクセス方法およびプログラム

Country Status (2)

Country Link
US (1) US20150134919A1 (ja)
JP (1) JP2015095226A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11243898B2 (en) * 2014-08-01 2022-02-08 Arm Limited Memory controller and method for controlling a memory device to process access requests issued by at least one master device
JP6799501B2 (ja) * 2017-06-06 2020-12-16 株式会社日立製作所 計算機システム及びデータの分析方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000242441A (ja) * 1999-02-19 2000-09-08 Toshiba Corp ディスク制御方法およびその制御装置
US6272565B1 (en) * 1999-03-31 2001-08-07 International Business Machines Corporation Method, system, and program for reordering a queue of input/output (I/O) commands into buckets defining ranges of consecutive sector numbers in a storage medium and performing iterations of a selection routine to select and I/O command to execute
JP2002023962A (ja) * 2000-07-07 2002-01-25 Fujitsu Ltd ディスク装置及び制御方法
JP2013196389A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 情報処理装置、情報処理プログラム及び情報処理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7577824B2 (en) * 2003-09-08 2009-08-18 Altera Corporation Methods and apparatus for storing expanded width instructions in a VLIW memory for deferred execution
US7877546B2 (en) * 2004-08-09 2011-01-25 International Business Machines Corporation System, method, and circuit for retrieving data in data blocks into a cache memory from a mass data storage device based on a triggering event

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000242441A (ja) * 1999-02-19 2000-09-08 Toshiba Corp ディスク制御方法およびその制御装置
US6272565B1 (en) * 1999-03-31 2001-08-07 International Business Machines Corporation Method, system, and program for reordering a queue of input/output (I/O) commands into buckets defining ranges of consecutive sector numbers in a storage medium and performing iterations of a selection routine to select and I/O command to execute
JP2002023962A (ja) * 2000-07-07 2002-01-25 Fujitsu Ltd ディスク装置及び制御方法
JP2013196389A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 情報処理装置、情報処理プログラム及び情報処理方法

Also Published As

Publication number Publication date
US20150134919A1 (en) 2015-05-14

Similar Documents

Publication Publication Date Title
US11949759B2 (en) Adaptive computation and faster computer operation
US10372723B2 (en) Efficient query processing using histograms in a columnar database
US9740738B1 (en) Data retrieval from datastores with different data storage formats
US20070185933A1 (en) Predictive data object retrieval
JP5088668B2 (ja) 計算機負荷見積システム、計算機負荷見積方法、計算機負荷見積プログラム
US9043327B1 (en) Performing flexible pivot querying of monitoring data using a multi-tenant monitoring system
CN112835966A (zh) 数据查询方法、装置以及电子设备
JP2015095226A (ja) 情報処理装置、データアクセス方法およびプログラム
US9817864B1 (en) Flexible pivot querying of monitoring data with zero setup
US9104392B1 (en) Multitenant monitoring system storing monitoring data supporting flexible pivot querying
WO2018061136A1 (ja) 需要予測方法、需要予測システム及びそのプログラム
Naeem et al. SSCJ: A semi-stream cache join using a front-stage cache module
CN107819804B (zh) 云端储存设备系统及决定其架构的高速缓存中数据的方法
KR102155185B1 (ko) 비디오 서버에서의 서포트 벡터 리그레션을 활용한 2단계 ssd 캐시 관리 방법 및 장치
US10979525B1 (en) Selective preemptive cache population based on data quality for rapid result retrieval
Gorton et al. Data-intensive computing: A challenge for the 21st century
CN113032430A (zh) 一种数据处理方法、装置、介质和计算设备
US20200110747A1 (en) Computer system and data analysis method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170412

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170612

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171121

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20180327