(57)【要約】【課題】読み出し遅延が発生する場合であっても、データの不整合を削減することを課題とする。【解決手段】更新要求受付部は、データ更新要求を受け付ける。読出要求部は、読み出し処理要求を行なう。データ受取部は、記憶部から読み出されたデータを受け取る。更新値計算部は、データの更新値を計算する。書込要求部は、更新値の書き込み処理要求を行なう。データ処理実行部は、記憶部に対し読み出し処理と書き込み処理とを実行する。履歴処理部は、読み出し処理が実行された場合に該読み出し処理の履歴を生成し、書き込み処理が実行された場合に該書き込み処理に対応する読み出し処理の履歴を削除する。更新情報推定部は、記憶部に記憶されたデータをどのように更新するかを表す更新情報を履歴から推定する。データ更新部は、読み出されたデータを推定された更新情報に従って更新してデータ受取部に出力する。【選択図】図２
2016045594.tif 000002
【特許請求の範囲】
【請求項１】
記憶部に記憶されたデータを更新するデータ更新要求を受け付ける更新要求受付部と、
前記データ更新要求が受け付けられた場合に、前記記憶部からデータを読み出す読み出し処理要求を行なう読出要求部と、
前記記憶部から読み出されたデータを受け取るデータ受取部と、
受け取られた前記データの更新値を計算する更新値計算部と、
計算された前記更新値を前記記憶部に書き込む書き込み処理要求を行なう書込要求部と、
前記読み出し処理要求と前記書き込み処理要求とを受け付けて、前記記憶部に対して読み出し処理と書き込み処理とを実行するデータ処理実行部と、
前記読み出し処理が実行された場合に、該読み出し処理の履歴を生成し、前記書き込み処理が実行された場合に、該書き込み処理に対応する読み出し処理の履歴を削除する履歴処理部と、
前記読み出し処理が実行された場合に、生成された前記履歴から、前記記憶部に記憶されたデータをどのように更新するかを表す更新情報を推定する更新情報推定部と、
前記記憶部から読み出されたデータを、推定された前記更新情報に従って更新し、更新した新たなデータを前記データ受取部に対して出力するデータ更新部と
を有するデータ処理装置。
【請求項２】
前記更新要求受付部は、更新対象データのアドレス情報を含む前記データ更新要求を受け付け、
前記読出要求部は、前記アドレス情報をもとに前記データを読み出す読み出し処理要求を行ない、
前記書込要求部は、前記アドレス情報をもとに前記更新値を前記記憶部に書き込む書き込み処理要求を行ない、
前記履歴処理部は、前記読み出し処理で使用された前記アドレス情報を含む前記履歴を生成し、
前記更新情報推定部は、実行された前記読み出し処理に対応する前記データ更新要求に含まれた前記アドレス情報が、生成された前記履歴に含まれる場合に、該履歴に含まれる前記アドレス情報に対応するデータ更新要求が実行されるときの前記更新情報を推定する請求項１に記載のデータ処理装置。
【請求項３】
前記更新要求受付部は、更新対象データに対する演算処理情報を含む前記データ更新要求を受け付け、
前記履歴処理部は、前記演算処理情報を含む前記履歴を生成し、
前記更新情報推定部は、前記演算処理情報をもとに前記更新情報を推定する請求項１又は２に記載のデータ処理装置。
【請求項４】
前記読出要求部によって前記読み出し処理要求が行なわれてから、前記データ受取部によって前記データが受け取られるまでの間、前記データ更新要求をキューイングするための第１待ちキュー部と、
前記更新情報推定部によって前記更新情報が推定されてから、前記データ更新部が前記記憶部からの読み出されたデータを受け付けるまでの間、前記データ更新要求をキューイングするための第２待ちキュー部と、をさらに有し、
前記更新要求受付部は、前記第１待ちキュー部に前記データ更新要求がキューイングされている間に、新たなデータ更新要求を受け付ける請求項１〜３の何れか一つに記載のデータ処理装置。
【請求項５】
記憶部に記憶されたデータを更新するデータ更新要求を受け付けるステップと、
前記データ更新要求が受け付けられた場合に、前記記憶部からデータを読み出す読み出し処理要求を行なうステップと、
前記記憶部から読み出されたデータを受け取るステップと、
受け取られた前記データの更新値を計算するステップと、
計算された前記更新値を前記記憶部に書き込む書き込み処理要求を行なうステップと、
前記読み出し処理要求と前記書き込み処理要求とを受け付けて、前記記憶部に対して読み出し処理と書き込み処理とを実行するステップと、
前記読み出し処理が実行された場合に、該読み出し処理の履歴を生成し、前記書き込み処理が実行された場合に、該書き込み処理に対応する読み出し処理の履歴を削除するステップと、
前記読み出し処理が実行された場合に、生成された前記履歴から、前記記憶部に記憶されたデータをどのように更新するかを表す更新情報を推定するステップと、
前記記憶部から読み出されたデータを、推定された前記更新情報に従って更新し、更新した新たなデータを出力するステップと
を含むデータ処理方法。
【請求項６】
記憶部に記憶されたデータを更新するデータ更新要求を受け付けるステップと、
前記データ更新要求が受け付けられた場合に、前記記憶部からデータを読み出す読み出し処理要求を行なうステップと、
前記記憶部から読み出されたデータを受け取るステップと、
受け取られた前記データの更新値を計算するステップと、
計算された前記更新値を前記記憶部に書き込む書き込み処理要求を行なうステップと、
前記読み出し処理要求と前記書き込み処理要求とを受け付けて、前記記憶部に対して読み出し処理と書き込み処理とを実行するステップと、
前記読み出し処理が実行された場合に、該読み出し処理の履歴を生成し、前記書き込み処理が実行された場合に、該書き込み処理に対応する読み出し処理の履歴を削除するステップと、
前記読み出し処理が実行された場合に、生成された前記履歴から、前記記憶部に記憶されたデータをどのように更新するかを表す更新情報を推定するステップと、
前記記憶部から読み出されたデータを、推定された前記更新情報に従って更新し、更新した新たなデータを出力するステップと
をコンピュータに実行させるためのデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データ処理装置、データ処理方法及びデータ処理プログラムに関する。
【背景技術】
【０００２】
近年、Ｗｅｂメールやソーシャルネットワーク等に代表されるＷｅｂサービスが普及している。このようなＷｅｂサービスにおいては、ユーザからの要求に応じてページを生成する際に、ページの生成に利用する各種データをデータベースに問い合わせている。データベースは、個々のアクセスに対して高速に応答することが好ましいものの、ユーザ数の増加に伴って負荷が増大する。高頻度及び高速な応答の要求に対しては、ＨＤＤ（Hard  Disk  Drive）よりも高速なＤＲＡＭ（Dynamic  Random  Access  Memory）を記憶デバイスとし、データを一時的に蓄えるキャッシュサーバとして用いることで、データベースへのアクセスを軽減することができる。
【０００３】
例えば、かかるキャッシュサーバは、任意長の文字列で表されるデータの識別子「キー」で、任意長のデータ「バリュー」を読み書きするＫＶＳ（Key‐Value  Store）型と呼ばれるデータ形式によりアクセスされる。ＫＶＳでは、ハッシュテーブルが活用され、キーとバリューとの関連が管理される。ハッシュテーブルとは、キーの取り得る広大な名前空間を、実際の有限なストレージのアドレス空間にマッピングする技術である。そして、このようなＫＶＳの処理をハードウェア化することで、一台のサーバでの処理能力を向上させ、サーバの台数を削減することにより、消費電力や設置スペース、メンテナンスのためのコスト等を削減することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国公開特許２０１１／０２７６７４４Ａ１
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ハッシュテーブルを用いる技術は、空間を狭めることになるため、本質的に衝突が発生し得る。衝突とは、異なるキーに対応するハッシュテーブル上のエントリが同一のエントリになってしまうことを指す。例えば、ハッシュテーブルを保存するＤＲＡＭには読み出し遅延があるので、あるクエリ処理が読み出し要求を発行して読み出しデータを待っている間にも、次のクエリがデータの読み出し要求を発行することが好ましい。ここで、あるクエリと次のクエリとが同一のエントリに対するアクセスである場合には、読み書きの競合が発生し、データに不整合が生じてしまう。
【０００６】
本発明が解決しようとする課題は、読み出し遅延が発生する場合であっても、データの不整合を削減することができるデータ処理装置、データ処理方法及びデータ処理プログラムを提供することである。
【課題を解決するための手段】
【０００７】
実施の形態のデータ処理装置は、更新要求受付部と、読出要求部と、データ受取部と、更新値計算部と、書込要求部と、データ処理実行部と、履歴処理部と、更新情報推定部と、データ更新部とを有する。更新要求受付部は、記憶部に記憶されたデータを更新するデータ更新要求を受け付ける。読出要求部は、データ更新要求が受け付けられた場合に、記憶部からデータを読み出す読み出し処理要求を行なう。データ受取部は、記憶部から読み出されたデータを受け取る。更新値計算部は、受け取られたデータの更新値を計算する。書込要求部は、計算された更新値を記憶部に書き込む書き込み処理要求を行なう。データ処理実行部は、読み出し処理要求と書き込み処理要求とを受け付けて、記憶部に対して読み出し処理と書き込み処理とを実行する。履歴処理部は、読み出し処理が実行された場合に、該読み出し処理の履歴を生成し、書き込み処理が実行された場合に、該書き込み処理に対応する読み出し処理の履歴を削除する。更新情報推定部は、読み出し処理が実行された場合に、生成された履歴から、記憶部に記憶されたデータをどのように更新するかを表す更新情報を推定する。データ更新部は、記憶部から読み出されたデータを、推定された更新情報に従って更新し、更新した新たなデータをデータ受取部に対して出力する。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係るデータ処理装置のハードウェア構成を示すブロック図。
【図２】第１の実施形態に係るデータ処理装置の機能構成を示すブロック図。
【図３】第１の実施形態に係るデータ処理の流れを示すフローチャート。
【図４】第１の実施形態の変形例１に係るデータ処理装置の機能構成を示すブロック図。
【図５】第１の実施形態の変形例２に係る履歴を示す図。
【図６】第１の実施形態の変形例３に係る履歴を示す図。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、第１の実施形態に係るデータ処理装置のハードウェア構成例を示すブロック図である。図１に示すように、データ処理装置１００は、ＣＰＵ（Central  Processing  Unit）１２と、ＲＡＭ（Random  Access  Memory）１３と、ＲＯＭ（Read  Only  Memory）１４と、通信Ｉ／Ｆ（Interface）１５とを有する。これらのハードウェアは、バス１１により互いに接続される。
【００１０】
ＣＰＵ１２は、データ処理装置１００の動作を統括的に制御する。ＣＰＵ１２は、ＲＡＭ１３をワークエリア（作業領域）として、ＲＯＭ１４等に格納されたプログラムを実行することで、データ処理装置１００全体の動作を制御する。通信Ｉ／Ｆ１５は、外部装置と通信するためのインタフェースである。
【００１１】
図２は、第１の実施形態に係るデータ処理装置の機能構成例を示すブロック図である。図２に示すように、データ処理装置１００は、データ記憶部１１０と、更新要求受付部１２１と、読出要求部１２２と、データ処理実行部１２３と、履歴処理部１２４と、更新情報推定部１２５と、データ更新部１２６とを有する。加えて、データ処理装置１００は、データ受取部１２７と、更新値計算部１２８と、書込要求部１２９とを有する。なお、上記各部については、これらの一部又は全てがソフトウェア（プログラム）で実現されても良いし、ハードウェア回路で実現されても良い。
【００１２】
データ処理装置１００は、データ記憶部１１０等の記憶媒体に記憶されているデータを更新する処理を連続的に実行する装置である。本実施形態では、データ記憶部１１０が初期値としてデータ「１０」を記憶し、データ更新要求に従ってデータ記憶部１１０に記憶されたデータを「＋１」する場合を例に挙げる。すなわち、２つのデータ更新要求が連続して受け付けられた場合には、「＋１」する処理が２回行われ、この結果、データ記憶部１１０に「１２」が書き込まれる。
【００１３】
まず、データ処理装置１００におけるパイプライン処理について説明する。データ処理装置１００では、更新要求受付部１２１、読出要求部１２２、データ受取部１２７、更新値計算部１２８、書込要求部１２９の５つによりパイプライン処理が実行される。例えば、上記５つの処理部のうち、ある処理部にデータ更新要求が格納されている場合には、次のデータ更新要求についてはある処理部よりも前段の処理部で所定の処理を行なうことが可能である。
【００１４】
上述した構成において、更新要求受付部１２１は、データ記憶部１１０に記憶されたデータを更新するためのデータ更新要求を受け付ける。本実施形態では、データを「＋１」するデータ更新要求とする。読出要求部１２２は、更新要求受付部１２１によってデータ更新要求が受け付けられた場合に、データ記憶部１１０からデータを読み出す読み出し処理要求を、データ処理実行部１２３に対して行なう。また、読出要求部１２２は、データ更新要求が受け付けられたことをデータ受取部１２７に対して通知する。これにより、データ受取部１２７は、データの受け取り待ちの状態となる。
【００１５】
データ受取部１２７は、データ記憶部１１０から読み出されたデータを受け取る。例えば、データ受取部１２７は、データ記憶部１１０に記憶されたデータ「１０」を受け取る。更新値計算部１２８は、データ受取部１２７によって受け取られたデータの更新値を計算する。例えば、更新値計算部１２８は、データ受取部１２７によって受け取られたデータ「１０」を「＋１」し、更新値「１１」を計算する。書込要求部１２９は、更新値計算部１２８によって計算された更新値をデータ記憶部１１０に書き込む書き込み処理要求を、データ処理実行部１２３に対して行なう。例えば、書込要求部１２９は、更新値計算部１２８によって計算された更新値「１１」をデータ記憶部１１０に書き込む書き込み処理要求を、データ処理実行部１２３に対して行なう。
【００１６】
ここで、データ更新要求に応じた処理を、データ更新要求Ａ、データ更新要求Ｂの順に実行する場合を例に挙げる。データ記憶部１１０には読み出し遅延があるので、読み出し遅延が処理全体のスループットに悪影響を及ぼさないようにするためには、データ更新要求Ａに対するデータの読み出し待ちの状態であっても、データ更新要求Ｂに応じたデータの読み出しが実行される。すなわち、データ更新要求Ａに応じてデータ「１０」を読み出して「＋１」し、更新値「１１」をデータ記憶部１１０に書き込む前に、データ更新要求Ｂに応じてデータ「１０」が読み出されてしまう。このとき、データ更新要求Ａとデータ更新要求Ｂとの実行により、本来であればデータ記憶部１１０に「１２」が書き込まれるところ、実際にはデータ記憶部１１０に「１１」が書き込まれてしまう。そこで、以下で説明する処理によりデータの不整合を解消する。
【００１７】
データ記憶部１１０は、データを記憶する。例えば、データ記憶部１１０は、ＤＲＡＭやＮＡＮＤフラッシュメモリ、ＳＳＤ（Solid  State  Drive）、ＨＤＤ等の記憶媒体である。なお、データ記憶部１１０の種別は上記のものに限られるわけではない。本実施形態では、データ記憶部１１０が初期値としてデータ「１０」を記憶し、データ更新要求に従ってデータ記憶部１１０に記憶されたデータを「＋１」する場合を例に挙げる。
【００１８】
更新要求受付部１２１は、データ記憶部１１０に記憶されたデータを更新するデータ更新要求を受け付ける。例えば、更新要求受付部１２１は、データ記憶部１１０に記憶されたデータを「＋１」するためのデータ更新要求を受け付ける。ここで、更新要求受付部１２１は、「＋１」するデータ更新要求Ａと、同様に「＋１」するデータ更新要求Ｂとを、連続して受け付けるものとする。
【００１９】
読出要求部１２２は、更新要求受付部１２１によってデータ更新要求が受け付けられた場合に、データ記憶部１１０からデータを読み出す読み出し処理要求を行なう。例えば、読出要求部１２２は、更新要求受付部１２１によってデータ更新要求Ａが受け付けられた場合に、データ記憶部１１０からデータを読み出す読み出し処理要求を、データ処理実行部１２３に対して行なう。また、読出要求部１２２は、更新要求受付部１２１によってデータ更新要求Ｂが受け付けられた場合に、データ記憶部１１０からデータを読み出す読み出し処理要求を、データ処理実行部１２３に対して行なう。
【００２０】
データ処理実行部１２３は、読み出し処理要求を受け付けて、データ記憶部１１０に対して読み出し処理を実行する。例えば、データ処理実行部１２３は、読出要求部１２２からデータ更新要求Ａに対応する読み出し処理要求を受け付けると、データ記憶部１１０に記憶されたデータ「１０」の読み出し処理を実行する。また、データ処理実行部１２３は、読出要求部１２２からデータ更新要求Ｂに対応する読み出し処理要求を受け付けると、データ記憶部１１０に記憶されたデータ「１０」の読み出し処理を実行する。
【００２１】
ここで、データ記憶部１１０には読み出し遅延がある。これにより、データ更新要求Ａに対応するデータの更新が行なわれる前にデータ更新要求Ｂが受け付けられることで、データ更新要求Ａに対応する読み出し処理とデータ更新要求Ｂに対応する読み出し処理とにおいては、データ記憶部１１０からデータ「１０」が読み出されることになる。
【００２２】
履歴処理部１２４は、データ処理実行部１２３によって読み出し処理が実行された場合に、該読み出し処理の履歴を生成する。例えば、履歴処理部１２４は、データ更新要求Ａに対応する読み出し処理が実行された場合に、データ更新要求Ａがあったことを表す履歴を生成して保持する。また、履歴処理部１２４は、データ更新要求Ｂに対応する読み出し処理が実行された場合に、データ更新要求Ｂがあったことを表す履歴を生成して保持する。
【００２３】
更新情報推定部１２５は、データ処理実行部１２３によって読み出し処理が実行された場合に、履歴処理部１２４によって生成された履歴から、データ記憶部１１０に記憶されたデータをどのように更新するかを表す更新情報を推定する。例えば、更新情報推定部１２５は、データ処理実行部１２３によってデータ更新要求Ｂに対応する読み出し処理が実行された場合に、履歴処理部１２４によって生成された、データ更新要求Ａがあったことを表す履歴を取得する。そして、更新情報推定部１２５は、データ更新要求Ａがあったことを表す履歴から、データ更新要求Ｂに対応する読み出し処理によって読み出されたデータが、該データ更新要求Ａによって「＋１」される予定であることを表す更新情報を推定する。
【００２４】
なお、更新情報推定部１２５は、データ処理実行部１２３によってデータ更新要求Ａに対応する読み出し処理が実行された場合にも、履歴処理部１２４によって履歴が生成されているか否かを確認する。このとき、更新情報推定部１２５は、データ更新要求Ａに応じた読み出し処理の実行時よりも前には他のデータ更新要求がなく、履歴も存在しないため、更新情報の推定は行なわない。
【００２５】
データ更新部１２６は、データ記憶部１１０から読み出されたデータを、推定された更新情報に従って更新する。例えば、データ更新部１２６は、データ処理実行部１２３によって実行されたデータ更新要求Ｂに対応する読み出し処理により読み出されたデータ「１０」を、更新情報推定部１２５によって推定された更新情報（「＋１」される予定である旨）に従って「１１」に更新する。そして、データ更新部１２６は、更新した新たなデータ「１１」をデータ受取部１２７に対して出力する。すなわち、データ更新要求Ａとデータ更新要求Ｂとが連続して受け付けられた場合に、データ更新部１２６によって出力されるデータは、データ更新要求Ａに応じてデータ記憶部１１０が更新されることを想定したデータとなる。なお、データ更新部１２６は、更新情報推定部１２５によって更新情報が推定されていない場合には、データ記憶部１１０から読み出されたデータを更新することなく、データ受取部１２７に対して出力する。
【００２６】
データ受取部１２７は、データ記憶部１１０から読み出されたデータを受け取る。例えば、データ受取部１２７は、データ更新要求Ｂに対応する読み出し処理が行なわれた状態において、データ更新部１２６によって更新された新たなデータ「１１」を受け取る。
【００２７】
更新値計算部１２８は、データ受取部１２７によって受け取られたデータの更新値を計算する。例えば、更新値計算部１２８は、データ受取部１２７によって受け取られたデータ「１１」を、データ更新要求Ｂ（「＋１」するデータ更新要求）に従って「＋１」し、更新値「１２」を計算する。
【００２８】
書込要求部１２９は、計算された更新値をデータ記憶部１１０に書き込む書き込み処理要求を行なう。例えば、書込要求部１２９は、更新値計算部１２８によって計算された更新値「１１」をデータ記憶部１１０に書き込む書き込み処理要求を、データ処理実行部１２３に対して行なう。また、書込要求部１２９は、更新値計算部１２８によって計算された更新値「１２」をデータ記憶部１１０に書き込む書き込み処理要求を、データ処理実行部１２３に対して行なう。
【００２９】
これらにより、データ処理実行部１２３は、書き込み処理要求を受け付けて、データ記憶部１１０に対して書き込み処理を実行する。例えば、データ処理実行部１２３は、書込要求部１２９から更新値「１１」を書き込む書き込み処理要求を受け付けると、データ記憶部１１０に更新値「１１」の書き込み処理を実行する。また、データ処理実行部１２３は、書込要求部１２９から更新値「１２」を書き込む書き込み処理要求を受け付けると、データ記憶部１１０に更新値「１２」の書き込み処理を実行する。本実施形態において、データ記憶部１１０に最終的に「１２」が書き込まれることは、本来期待する動作である。
【００３０】
また、履歴処理部１２４は、データ処理実行部１２３によって書き込み処理が実行された場合に、該書き込み処理に対応する読み出し処理の履歴を削除する。例えば、履歴処理部１２４は、データ処理実行部１２３によってデータ記憶部１１０に更新値「１１」の書き込み処理が実行された場合に、保持しているデータ更新要求Ａに対応する履歴を削除する。また、履歴処理部１２４は、データ処理実行部１２３によってデータ記憶部１１０に更新値「１２」の書き込み処理が実行された場合に、保持しているデータ更新要求Ｂに対応する履歴を削除する。つまり、データ更新要求Ａに対応する書き込み処理が実行された時点で、以降の読み出し処理では本来期待する正しいデータが読み出されることになるので、履歴として保持しなくて良い。換言すると、履歴は、対応するデータ更新要求に応じた読み出し処理が実行されてから書き込み処理が実行されるまでの間だけ保持され、この間に、更新情報の推定に利用される。
【００３１】
次に、図３を用いて、第１の実施形態に係るデータ処理の流れを説明する。図３は、第１の実施形態に係るデータ処理の流れの例を示すフローチャートである。
【００３２】
図３に示すように、更新要求受付部１２１によってデータ更新要求が受け付けられた場合に（ステップＳ１０１：Ｙｅｓ）、読出要求部１２２は、データ記憶部１１０からデータを読み出す読み出し処理要求を、データ処理実行部１２３に対して行なう（ステップＳ１０２）。一方、更新要求受付部１２１は、データ更新要求が受け付けられていない場合に（ステップＳ１０１：Ｎｏ）、該データ更新要求の受け付け待ちの状態となる。データ処理実行部１２３は、読出要求部１２２から読み出し処理要求を受け付けると、データ記憶部１１０に記憶されたデータの読み出し処理を実行する（ステップＳ１０３）。
【００３３】
履歴処理部１２４は、データ処理実行部１２３によって読み出し処理が実行された場合に、該読み出し処理に対応するデータ更新要求があったことを表す履歴を生成して保持する（ステップＳ１０４）。更新情報推定部１２５は、データ処理実行部１２３によって読み出し処理が実行された場合に、履歴処理部１２４によって生成された、データ更新要求があったことを表す履歴から、該読み出し処理によって読み出されたデータが、以前のデータ更新要求によって「＋１」される予定であることを表す更新情報を推定する（ステップＳ１０５）。
【００３４】
データ更新部１２６は、データ処理実行部１２３によって実行されたデータ更新要求に対応する読み出し処理により読み出されたデータを、更新情報推定部１２５によって推定された更新情報に従って更新する（ステップＳ１０６）。データ受取部１２７は、データ更新部１２６によって更新された新たなデータを受け取る（ステップＳ１０７）。更新値計算部１２８は、データ受取部１２７によって受け取られたデータを、データ更新要求に従って「＋１」し、更新値を計算する（ステップＳ１０８）。
【００３５】
書込要求部１２９は、更新値計算部１２８によって計算された更新値をデータ記憶部１１０に書き込む書き込み処理要求を、データ処理実行部１２３に対して行なう（ステップＳ１０９）。データ処理実行部１２３は、書込要求部１２９から更新値を書き込む書き込み処理要求を受け付けると、データ記憶部１１０に更新値の書き込み処理を実行する（ステップＳ１１０）。履歴処理部１２４は、データ処理実行部１２３によってデータ記憶部１１０に更新値の書き込み処理が実行された場合に、該書き込み処理のデータ更新要求に対応する読み出し処理の履歴を削除する（ステップＳ１１１）。
【００３６】
本実施形態によれば、データ記憶部１１０に対して実行された読み出し処理の履歴を保持し、読み出し処理の実行時に、それまでの履歴から、データ記憶部１１０から読み出されたデータをどのように更新するかを表す更新情報を推定し、読み出されたデータを更新情報に従って更新するので、データ記憶部１１０に読み出し遅延が発生する場合であっても、データの不整合を削減することができる。
【００３７】
（第１の実施形態の変形例１）
本実施形態に係るデータ処理装置の構成は、図４に示すように、読出要求部１２２と更新情報推定部２２５とに、読み出しデータを待つ待ちキュー部２３０、待ちキュー部２３１を有しても良い。図４は、第１の実施形態の変形例１に係るデータ処理装置の機能構成例を示すブロック図である。第１の実施形態の変形例１では、第１の実施形態と同様の構成については同一の符号を付し、同様の構成については詳細な説明を省略する場合がある。具体的には、以下に示す履歴処理部２２４、更新情報推定部２２５、待ちキュー部２３０、待ちキュー部２３１以外の機能及び構成、処理は第１の実施形態と同様である。
【００３８】
図４に示すように、データ処理装置２００は、データ記憶部１１０と、更新要求受付部１２１と、読出要求部１２２と、データ処理実行部１２３と、履歴処理部２２４と、更新情報推定部２２５と、データ更新部１２６とを有する。加えて、データ処理装置２００は、データ受取部１２７と、更新値計算部１２８と、書込要求部１２９と、待ちキュー部２３０と、待ちキュー部２３１とを有する。なお、上記各部については、これらの一部又は全てがソフトウェア（プログラム）で実現されても良いし、ハードウェア回路で実現されても良い。
【００３９】
待ちキュー部２３０と待ちキュー部２３１とは、複数のデータ更新要求をキューイングすることができる。例えば、待ちキュー部２３０と待ちキュー部２３１とは、データ更新要求Ａをキューイングして読み出しデータを待つ間に、データ更新要求Ｂをデータ更新要求Ａの後ろにキューイングする。これにより、データ処理装置２００では、データ更新要求Ａの読み出しデータが読み出されていない状態においても、データ更新要求Ｃ、さらにはデータ更新要求Ｄを受け付けて、読み出し処理を実行することができる。この結果、データ処理装置２００は、データ記憶部１１０の読み出し遅延が大きい場合でも、全体のスループットを低下させることなく、連続してデータ更新要求を受け付けることができる。
【００４０】
また、データ更新要求の読み出し処理に対応する履歴の保持については、データ更新要求が受け付けられた回数を記憶する形式で良い。例えば、履歴処理部２２４は、データ更新要求が「＋１」するといったものであるため、該データ更新要求が受け付けられた回数、すなわちデータ処理実行部１２３によって読み出し処理が実行された回数を保持すれば良い。このとき、更新情報推定部２２５は、履歴処理部２２４によって保持された読み出し処理の回数分だけ「＋１」する処理を行なう、といった更新情報を推定する。そして、データ更新部１２６は、データ記憶部１１０から読み出されたデータを、更新情報推定部２２５によって推定された更新情報をもとに、読み出し処理の回数分だけ「＋１」して、新たなデータをデータ受取部１２７に対して出力する。
【００４１】
以下に、データ更新要求Ａ、データ更新要求Ｂ、データ更新要求Ｃの順に、データ更新要求が受け付けられた場合を例に挙げて説明する。例えば、データ処理実行部１２３によってデータ更新要求Ｂの読み出し処理が実行された場合に、履歴処理部２２４によって保持されている履歴はデータ更新要求Ａの読み出し処理に対応するものだけであるため、更新情報推定部２２５は、読み出し処理の回数「１回」だけ「＋１」するという更新情報を推定する。その後、データ処理実行部１２３によってデータ更新要求Ｃの読み出し処理が実行された状況において、データ更新要求Ａの読み出し処理が完了していない場合に、履歴処理部２２４によって保持されている履歴はデータ更新要求Ａとデータ更新要求Ｂとの読み出し処理に対応するものであるため、更新情報推定部２２５は、読み出し処理の回数「２回」だけ「＋１」するという更新情報を推定する。すなわち、データ更新部１２６は、データ記憶部１１０から読み出されたデータ「１０」を「２回」だけ「＋１」し、新たなデータ「１２」をデータ受取部１２７に対して出力する。そして、更新値計算部１２８は、データ更新要求Ｃの更新値として、データ受取部１２７によって受け取られたデータ「１２」に「＋１」し、更新値「１３」を計算する。これらの結果、データ更新要求Ａの読み出し処理が完了していない状態において、データ更新要求Ｃが受け付けられた場合には、データ記憶部１１０に「１３」が書き込まれることになる。
【００４２】
ここで、データ処理実行部１２３によってデータ更新要求Ｃの読み出し処理が実行された状況において、データ更新要求Ａの読み出し処理が完了している場合には、履歴処理部２２４によってデータ更新要求Ａの読み出し処理に対応する履歴が削除されている。すなわち、更新情報推定部２２５は、データ更新要求Ｂのみの読み出し処理の回数「１回」だけ「＋１」するという更新情報を推定することになる。このとき、データ記憶部１１０にはデータ更新要求Ａの更新結果である「１１」が書き込まれているので、データ更新部１２６は、データ記憶部１１０から読み出されたデータ「１１」を「１回」だけ「＋１」し、新たなデータ「１２」をデータ受取部１２７に対して出力する。そして、更新値計算部１２８は、データ更新要求Ｃの更新値として、データ受取部１２７によって受け取られたデータ「１２」に「＋１」し、更新値「１３」を計算する。これらの結果、データ更新要求Ａの書き込み処理が完了した状態において、データ更新要求Ｃが受け付けられた場合には、データ記憶部１１０に「１３」が書き込まれることになる。
【００４３】
本実施形態によれば、読出要求部１２２によって読み出し処理要求が行なわれてからデータ受取部１２７によってデータが受け取られるまでの間と、更新情報推定部２２５によって更新情報が推定されてからデータ更新部１２６がデータを受け付けるまでの間との双方において、データ更新要求をキューイングするので、より多くのデータ更新要求が連続して受け付けられた場合であっても、データの不整合を削減することができる。
【００４４】
（第１の実施形態の変形例２）
本実施形態に係るデータ記憶部１１０は、複数のデータを記憶することができる。このとき、データ処理装置１００によって受け付けられるデータ更新要求は、更新対象データのアドレス情報を保持する。すなわち、データ記憶部１１０に記憶された複数のデータに対して、アドレスを指定することで、複数のアドレスに選択的にアクセスすることができる。これにより、データの読み書きの際にはアドレスが指定され、データ処理実行部１２３は、指定されたアドレスに対して読み出し処理や書き込み処理を実行する。
【００４５】
履歴処理部１２４は、データ更新要求の読み出し処理がアドレスを指定することにより実行された場合に、データ更新要求に対応する読み出し処理が実行されたことを、指定されたアドレスと関連付けて履歴を生成し保持する。簡単には、指定されたアドレスのみを保持すれば良い。図５は、第１の実施形態の変形例２に係る履歴の例を示す図である。図５に示すように、履歴には、各データ更新要求に対応する読み出し処理で指定されたアドレスが保持される。
【００４６】
以下に、図５を用いて、データ更新要求Ａ、データ更新要求Ｂ、データ更新要求Ｃ、データ更新要求Ｄ、データ更新要求Ｅ、データ更新要求Ｆの順に、データ更新要求が受け付けられた場合を例に挙げて説明する。例えば、データ更新要求Ａにはアドレス「０ｘ８０００１０１０」が指定され、データ更新要求Ｂにはアドレス「０ｘ６０２０３０００」が指定され、データ更新要求Ｃにはアドレス「０ｘ９４００３ａ００」が指定されているものとする。同様に、データ更新要求Ｄにはアドレス「０ｘｅ４０２００８０」が指定され、データ更新要求Ｅにはアドレス「０ｘ８０００１０１０」が指定され、データ更新要求Ｆにはアドレス「０ｘ８０００１０１０」が指定されているものとする。データ更新要求Ｆは、新たに受け付けられたデータ更新要求であるものとする。上述したように、このような履歴は、読み出し処理の実行に応じて、履歴処理部１２４によって生成及び保持される。
【００４７】
例えば、更新情報推定部１２５は、データ処理実行部１２３によって、指定されたアドレスが「０ｘ８０００１０１０」であるデータ更新要求Ｆの読み出し処理が実行された場合に、履歴処理部１２４によって保持されている履歴に、該データ更新要求Ｆで指定されたアドレスと同一のアドレスが存在することを確認する。データ更新要求Ｆで指定されたアドレスと同一のアドレスは、データ更新要求Ａとデータ更新要求Ｅとで指定されている。そして、更新情報推定部１２５は、データ更新要求Ｆで指定されたアドレスと同一のアドレスが２つあるので、「２回」だけ「＋１」するという更新情報を推定する。すなわち、更新情報推定部１２５は、同一のアドレスがｎ個ある場合には、「ｎ回」だけ「＋１」するという更新情報を推定する。これにより、データ更新部１２６は、データ記憶部１１０から読み出されたアドレス「０ｘ８０００１０１０」のデータを「２回」だけ「＋１」し、新たなデータをデータ受取部１２７に対して出力する。なお、データ更新部１２６は、指定されたアドレスが「０ｘ８０００２０００」である場合には、同一のアドレスに対応する履歴が存在しないため、データ記憶部１１０から読み出されたデータをそのままデータ受取部１２７に対して出力することになる。
【００４８】
なお、指定されるアドレスは、「＋１」したいデータそのもののアドレスであっても良いし、「＋１」をしたいデータを含む所定のデータ構造の先頭のアドレスであっても良く、厳密にそのデータのアドレスである必要はない。すなわち、アドレスは、最終的に「＋１」したいデータを特定することができる情報を含むものであれば良い。
【００４９】
本実施形態によれば、データ更新要求に応じて更新対象となっているデータのアドレスを履歴に保持するので、異なるアドレスのデータに対して複数のデータ更新要求が受け付けられた場合であっても、データの不整合を削減することができる。
【００５０】
（第１の実施形態の変形例３）
本実施形態に係るデータ処理装置によって受け付けられるデータ更新要求は、「＋１」するという演算ではなく、任意の演算であっても良い。また、データ更新要求ごとに異なる演算であっても良い。すなわち、データ更新要求は、データ記憶部１１０に記憶された複数のデータに対して指定されるアドレスと、演算処理が特定できる演算処理情報を保持する。
【００５１】
履歴処理部１２４は、データ更新要求の読み出し処理がアドレスを指定することにより実行された場合に、データ更新要求に対応する読み出し処理が実行されたことを、指定されたアドレスと演算処理情報とともに関連付けて履歴を生成し保持する。図６は、第１の実施形態の変形例３に係る履歴の例を示す図である。図６に示すように、履歴には、各データ更新要求に対応する読み出し処理で指定されたアドレスと、該アドレスのデータに対する演算処理情報とが保持される。
【００５２】
以下に、図６を用いて、データ更新要求Ａ、データ更新要求Ｂ、データ更新要求Ｃ、データ更新要求Ｄ、データ更新要求Ｅ、データ更新要求Ｆの順に、データ更新要求が受け付けられた場合を例に挙げて説明する。例えば、データ更新要求Ａにはアドレス「０ｘ８０００１０１０」が指定され、該アドレスのデータに対する演算処理情報は「＋３」である。また、データ更新要求Ｂにはアドレス「０ｘ６０２０３０００」が指定され、該アドレスのデータに対する演算処理情報は「−２」である。また、データ更新要求Ｃにはアドレス「０ｘ９４００３ａ００」が指定され、該アドレスのデータに対する演算処理情報は「×１」である。また、データ更新要求Ｄにはアドレス「０ｘｅ４０２００８０」が指定され、該アドレスのデータに対する演算処理情報は「＋１０」である。また、データ更新要求Ｅにはアドレス「０ｘ８０００１０１０」が指定され、該アドレスのデータに対する演算処理情報は「×５」である。加えて、新たに受け付けられるデータ更新要求Ｆにはアドレス「０ｘ８０００１０１０」が指定され、該アドレスのデータに対する演算処理情報が「＋１」であるものとする。上述したように、このような履歴は、読み出し処理の実行に応じて、履歴処理部１２４によって生成及び保持される。
【００５３】
例えば、更新情報推定部１２５は、データ処理実行部１２３によって、指定されたアドレスが「０ｘ８０００１０１０」であり演算処理情報が「＋１」であるデータ更新要求Ｆの読み出し処理が実行された場合に、履歴処理部１２４によって保持されている履歴に、該データ更新要求Ｆで指定されたアドレスと同一のアドレスが存在することを確認する。データ更新要求Ｆで指定されたアドレスと同一のアドレスは、データ更新要求Ａとデータ更新要求Ｅとで指定されている。そして、更新情報推定部１２５は、データ更新要求Ｆで指定されたアドレスと同一のアドレスに対応する演算処理情報から、「＋３」して「×５」するという更新情報を推定する。これにより、例えば、データ記憶部１１０のアドレス「０ｘ８０００１０１０」に対応するデータが「１０」である場合に、データ更新部１２６は、データ記憶部１１０から読み出されたデータ「１０」を、「（１０＋３）×５＝６５」に更新し、新たなデータ「６５」をデータ受取部１２７に対して出力する。その後、更新値計算部１２８は、データ更新要求Ｆの演算処理情報「＋１」する、をもとに、データ受取部１２７によって受け取られたデータ「６５」を「＋１」し、更新値「６６」を計算する。
【００５４】
本実施形態によれば、データ更新要求に応じて更新対象となっているデータの演算処理情報を履歴に保持するので、データ更新要求ごとに演算処理が異なる場合であっても、データの不整合を削減することができる。
【００５５】
（第２の実施形態）
さて、これまで本発明に係るデータ処理装置の実施形態について説明したが、上述した実施形態以外にも種々の異なる形態にて実施されて良いものである。そこで、（１）構成、（２）プログラム、について異なる実施形態を説明する。
【００５６】
（１）構成
上記文書中や図面中等で示した処理手順、制御手順、具体的名称、各種のデータやパラメータ等を含む情報は、特記する場合を除いて任意に変更することができる。また、図示した装置の各構成要素は、機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散又は統合の具体的形態は、図示のものに限られず、その全部又は一部を各種の負担や使用状況等に応じて、任意の単位で機能的又は物理的に、分散又は統合することができる。
【００５７】
例えば、データ記憶部１１０は、データ処理装置１００に含まれていなくても良く、データ処理装置１００と通信可能な外部の記憶媒体であっても良い。また、データ処理装置１００が有する各機能は、クラウドコンピューティングにより実現しても良い。また、履歴処理部１２４による履歴の削除処理については、例えば演算処理情報を無効にすることで実現しても良い。例を挙げると、データ記憶部１１０にデータ「１０」が記憶されており、データ記憶部１１０のアドレスＡに対する演算処理情報が「＋１（データ更新要求Ａ対応）」、「＋３（データ更新要求Ｂ対応）」である履歴が保持されている状態において、データ更新要求Ａの書き込み処理が実行された場合には、データ更新要求Ａに対応する演算処理情報を「０」に更新する。このほか、データ更新要求Ａに対応する演算処理情報を使用しないことを表すフラグをたてておき、フラグがたてられた演算処理情報は使用しないようにすれば良い。つまり、結果として期待する更新値が計算できるように演算処理情報を更新すれば、履歴を削除しなくても良い。
【００５８】
また、例えば、データ処理装置は、キー・バリュー型のデータを格納するキー・バリュー・ストアを実装したサーバ装置であっても良い。かかるサーバ装置は、クライアントからのクエリ要求（データ更新要求）を受け付けて応答を返す。例えば、サーバ装置は、キー１、キー２、キー３等に関連付けて、バリュー１、バリュー２、バリュー３等を格納しており、クライアントからのキー２に対するバリューの読み出し要求を受け付け、格納されているバリュー２を読み出し、クライアントに応答する機能を有する。
【００５９】
このようなキー・バリュー・ストアでは、一般に、ハッシュテーブルと呼ばれるメタデータでキーとバリューとの連想記憶を行なう。すなわち、キー１をあるハッシュ関数に入れると、Ｈ１というハッシュ値が求まり、Ｈ１を例えばハッシュテーブル上のアドレスとした場合のテーブルのエントリに、バリュー１のストレージ上のアドレスを格納する。このようにすることで、キー１に対する読み出し要求を受け付けた場合に、同様にＨ１を求めてハッシュテーブルにアクセスして、バリュー１のアドレスを得ることで直ちにバリューにアクセスして応答を返すことが可能となる。
【００６０】
ハッシュテーブルは、広大なキーの取り得る名前空間を実際の有限なストレージのアドレス空間にマッピングする技術である。つまり、空間を狭めることになるため、本質的に衝突が発生し得る。衝突を解決するためのアルゴリズムは多数提案されており、例えば、複数のエントリをまとめたバケット単位でアクセスし、複数のエントリを同一のバケットに格納可能とする「バケット・ハッシング」等の方式が存在する。記憶デバイスのアクセス単位の広さを利用し、読み出しはバケット単位で行なわれ一気に探索ができる。エントリの追加はバケットに空きがあれば一つずつ追加を行ない、バケットが一杯になれば衝突として扱われる。つまり、衝突をなくすことは困難であるが、頻度を下げることが可能な技術である。
【００６１】
バケットは、例えば、１６バイト長のキーを１６個格納できる２５６バイトのデータ構造等でも良いが、データ長やデータ構造はこれに限られるものではない。また、キーそのものを保持するとデータ長が長くなるので、キーに所定の演算を施した短縮したバイト列（例えば、２バイト等）を格納するような形態でも良い。この場合、例えば２５６バイトのバケットには、１２８個のエントリを追加することができるようになる。
【００６２】
バケット・ハッシングでデータを格納する動作を図２に示した構成で実現する場合は、以下のようにする。例えば、サーバ装置は、データの格納要求を受け付けた場合に、指定されたキーから所定のハッシュ関数を用いて格納したいバケットアドレスを特定する。更新要求受付部１２１は、バケットへのエントリの格納要求を受け付ける。読出要求部１２２は、バケットのアドレスを指定してデータ処理実行部１２３に対してバケットの読み出し要求を出力する。データ処理実行部１２３によって読み出しコマンドが発行されると、更新情報推定部１２５は、バケットの読み出しが直前に存在するか否かを履歴処理部１２４によって保持された履歴を参照して確認する。そして、更新情報推定部１２５は、バケットの読み出しが直前に存在する場合に、存在する数分だけ先に格納されることを推定する。
【００６３】
例えば、１６個のエントリを格納できるバケットを想定した場合、更新情報推定部１２５は、既に２つのデータ更新要求が履歴に存在する場合に、２つの空きエントリが埋まるという更新情報を推定する。そして、データ更新部１２６は、読み出したバケットに１個のエントリが既に埋まっている（１５個の空きがある）場合に、２個のエントリが埋まった状態にバケット情報を更新してデータ受取部１２７に対して出力する。更新値計算部１２８は、４個目のエントリに格納要求で指定されたエントリを格納するようにバケットを更新する。書込要求部１２９は、４個のエントリが埋まった状態のバケットの書き込み要求をデータ処理実行部１２３に対して行なう。４個のエントリが格納されたバケットが書き込まれることは期待する動作である。
【００６４】
なお、上述した動作は、サーバ装置がエントリの削除要求を受け付けた場合も同様である。サーバ装置がエントリの削除要求を受け付けた場合、履歴処理部１２４は、各データ更新要求がデータを追加するものであるのか、データを削除するものであるのかを識別可能な情報（例えば、第１の実施形態の変形例３で説明した演算処理情報）を関連付けて保持する。更新情報推定部１２５は、演算処理情報をもとに、例えば２個の追加となる演算処理情報と、１個の削除となる演算処理情報が存在する場合に、「２個−１個＝１個」の追加が行なわれると推定する。例えば、更新情報推定部１２５は、読み出されたバケットに５個のエントリが既に追加されている場合、１個の追加ということから６個追加されていると推定する。更新値計算部１２８は、データ更新要求が削除要求であった場合、エントリ６個から１個を削除した５個の状態を計算する。これらの結果、書込要求部１２９は、５個のエントリの書き込み処理要求を行なう。５個のエントリが存在する状態に対して、２個の追加と２個の削除とのデータ更新要求が受け付けられているので、結果的に、５個のエントリとなるのは期待する動作である。
【００６５】
以上の動作により、複数のバケットへのエントリ追加・削除のデータ更新要求を同時に受け付けた場合でも、データに不整合が生じることなく、正しくエントリの追加・削除を行なうことができる。
【００６６】
（２）プログラム
また、上記実施形態に係るデータ処理装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることで実現することが可能である。実行されるデータ処理プログラムは、上述してきた各機能を含むモジュール構成となっている。データ処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供しても、ＲＯＭ等に予め組み込んで提供しても良い。
【００６７】
また、上述してきた実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。また、各実施形態は、内容を矛盾させない範囲で適宜組み合わせることが可能である。また、各実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６８】
１００  データ処理装置
１１０  データ記憶部
１２１  更新要求受付部
１２２  読出要求部
１２３  データ処理実行部
１２４  履歴処理部
１２５  更新情報推定部
１２６  データ更新部
１２７  データ受取部
１２８  更新値計算部
１２９  書込要求部
【図１】
2016045594.tif 000003
【図２】
2016045594.tif 000004
【図３】
2016045594.tif 000005
【図４】
2016045594.tif 000006
【図５】
2016045594.tif 000007
【図６】
2016045594.tif 000008