(57)【要約】【課題】大規模なデータに対する更新によって変更される順位についても、リアルタイムなランキング出力を実現することができる方法を得る。【解決手段】サービスの提供に必要な前記オブジェクトデータのランキングを出力するランキング方法において、任意オブジェクトデータに順位変動が生じた場合、前記任意オブジェクトデータの順位付けに関連するオブジェクトデータの順位変動範囲と順位変更値とを含む順位変更情報を作成する順位変更情報作成手順と、オブジェクトデータのランキングの出力要求があった場合に、前記順位変更情報に基づいて前記順位変動範囲のオブジェクトデータの順位の更新を行う順位更新手順と、前記更新されたオブジェクトデータのランキングを出力する出力手順を含む。【選択図】図１
2015011437.tif 000002
【特許請求の範囲】
【請求項１】
クライアントに対するサービスの生成と提供を行い、前記サービスに関するオブジェクトデータを蓄積し、前記サービスの提供に必要な前記オブジェクトデータのランキングを出力するランキング方法において、
任意オブジェクトデータに順位変動が生じた場合、前記任意オブジェクトデータの順位付けに関連するオブジェクトデータの順位変動範囲と順位変更値とを含む順位変更情報を作成する順位変更情報作成手順と、
オブジェクトデータのランキングの出力要求があった場合に、前記順位変更情報に基づいて前記順位変動範囲のオブジェクトデータの順位の更新を行う順位更新手順と、
前記更新されたオブジェクトデータのランキングを出力する出力手順と
を含むことを特徴とするリアルタイムランキング方法。
【請求項２】
前記順位更新手順は、前記任意オブジェクトデータの順位変動毎に、前記順位変更情報を更新する順位変更情報更新手順を含む請求項１に記載のリアルタイムランキング方法。
【請求項３】
前記順位変更情報更新手順は、
前記任意オブジェクトデータをオブジェクトＡとした場合に、前記オブジェクトＡの更新後の点数の次に大きい点数のオブジェクトデータをオブジェクトＢとし、
予め設定されたαに対して、順位変更値が−αより大きく＋αより小さい順位変更情報を更新し、
前記オブジェクトＡの順位を前記オブジェクトＢの順位の一つ上の順位とし、
前記オブジェクトＡ、オブジェクトＢ及び順位変更値が−αより大きく＋αより小さいオブジェクトデータの順位を更新する
請求項１に記載のリアルタイムランキング方法。
【請求項４】
クライアントに対するサービスの生成と提供をするアプリケーションサーバと、前記サービスに関するデータを蓄積して前記アプリケーションサーバに提供するデータベースシステムとを備えた装置において、
前記アプリケーションサーバは、
前記クライアントの要求を受け取るとともに、クライアントに対してサービスを提供するアプリケーション部と、
任意オブジェクトデータに順位変動が生じた場合、前記任意オブジェクトデータの順位付けに関連するオブジェクトデータの順位変動範囲と順位変更値とを含む順位変更情報を作成する取得する順位変更情報作成部と、
前記サービスの提供に必要な前記オブジェクトデータのランキングを行うランキング出力部を備え、
前記データベースシステムは、
前記オブジェクトデータの情報を蓄積するオブジェクトテーブルと、
前記順位変更情報が格納された順位変更テーブルを備えるとともに、
前記ランキング出力部は、
前記クライアントからオブジェクトデータのランキングの出力要求があった場合に、前記順位変更テーブルの順位変更情報を呼び出し、この順位変更情報に基づいて前記オブジェクトテーブルのオブジェクトデータを更新してランキングを出力する順位更新出力手段を備えた
ことを特徴とするリアルタイムランキング装置。
【請求項５】
前記オブジェクト更新部は、ランキングに必要なデータの更新を行うに際して、
更新されるオブジェクトデータを前記オブジェクトテーブルへ書き込む書込手段と、
前記順位変動範囲を利用して順位変更情報を前記順位変更テーブルに蓄積する蓄積手段と
を備えた請求項４に記載のリアルタイムランキング装置。
【請求項６】
前記ランキング出力部は、ランキングの出力を行うに際して、
前記順位変更テーブルに蓄積された順位変更情報を読み出し、前記オブジェクトテーブルに蓄積されたオブジェクトの順位情報に適用する順位更新出力手段
を備えた請求項４に記載のリアルタイムランキング装置。
【請求項７】
請求項１乃至請求項３のいずれか１項に記載のリアルタイムランキング方法における各手順をコンピュータに実行させるリアルタイムランキングプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースシステムを利用したランキングシステムに関し、特に、大規模なデータに対する更新によって変更される順位について、リアルタイムに知ることができるリアルタイムランキング方法、リアルタイムランキング装置及びリアルタイムランキングプログラムに関する。
【背景技術】
【０００２】
一般的なデータベースシステムを利用した大規模データのランキング方法としては、定期的なバッチ処理として全体を再ソートし、ソート結果に順位付けをする手法が取られている。この手法であると、全体再ソートによる計算量が莫大となるだけでなく、全ての順位を更新することによる大きな遅延が発生するので、リアルタイムにランキングが要求されるシステムでは利用できないため、リアルタイムランキングの取得に際しては、以下の文献に示された手法が提案されていた。
【０００３】
非特許文献１には、順位のデータは持たず、出力範囲を予め限定させておき、出力時に範囲内のみをソートする手法で、リアルタイム出力を実現することが記載されている。
非特許文献２には、同様に順位のデータは持たず、点数別にパーティショニングすることでパーティション別のオブジェクト数を保持し、これを利用して出力時にランキング計算する手法が記載されている。
非特許文献３には、ソートは行わずに点数別に順位を保持し、更新時に対象オブジェクトの変更前後の順位に挟まれた点数の順位のみを更新する手法が記載されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】http://yumewaza.yumemi.co.jp/2011/07/social_game_develop03.html
【非特許文献２】http://labs.gree.jp/blog/2010/07/456/
【非特許文献３】http://d.hatena.ne.jp/gumilab/20100909/1284022443
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、非特許文献１による手法の場合、デフォルトでランキング範囲を指定してしまうため、固定部分のランキングしか出力できず、他オブジェクトとの順位など、全体のランキングができないという課題があった。
【０００６】
また、非特許文献２による手法の場合、データ更新は高速であるが、ランキングの出力時にパーティション内でのソートが必要で、あるパーティションにオブジェクトが集中するとレイテンシ（遅延時間）が高く（大きく）なる。そのため、例えば同じ順位のオブジェクトが大量に発生する等の、パーティショニングが難しいシステムに向かないという課題が存在する。
【０００７】
また、非特許文献３による手法の場合、ランキング出力は高速化するが、順位変更の範囲が大きくなるようなシステムでは、更新前後の順位に挟まれた全てのオブジェクトの順位更新が必要となり、このオーバヘッドが無視できず利用が難しいという課題が存在する。
以上のように、順位変更が大きく、かつ順位を決める要素の分布が不特定なシステムにおいて、リアルタイムに順位を知ることができる高速なランキング手法は、存在していなかった。
【０００８】
本発明は上記実情に鑑みて提案されたもので、大規模なデータに対する更新によって変更される順位についても、リアルタイムなランキング出力を実現することができるリアルタイムランキング装置、ランキング方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため本発明の請求項１は、クライアントに対するサービスの生成と提供を行い、前記サービスに関するオブジェクトデータを蓄積し、前記サービスの提供に必要な前記オブジェクトデータのランキングを出力するランキング方法において、次の各手順を含むことを特徴としている。
任意オブジェクトデータに順位変動が生じた場合、前記任意オブジェクトデータの順位付けに関連するオブジェクトデータの順位変動範囲と順位変更値とを含む順位変更情報を作成する順位変更情報作成手順。
オブジェクトデータのランキングの出力要求があった場合に、前記順位変更情報に基づいて前記順位変動範囲のオブジェクトデータの順位の更新を行う順位更新手順。
前記更新されたオブジェクトデータのランキングを出力する出力手順。
【００１０】
請求項２は、請求項１のリアルタイムランキング方法において、前記順位更新手順は、前記任意オブジェクトデータの順位変動毎に、前記順位変更情報を更新する順位変更情報更新手順を含むことを特徴としている。
【００１１】
請求項３は、請求項１のリアルタイムランキング方法において、
前記順位変更情報更新手順は、
前記任意オブジェクトデータをオブジェクトＡとした場合に、前記オブジェクトＡの更新後の点数の次に大きい点数のオブジェクトデータをオブジェクトＢとし、
予め設定されたαに対して、順位変更値が−αより大きく＋αより小さい順位変更情報を更新し、
前記オブジェクトＡの順位を前記オブジェクトＢの順位の一つ上の順位とし、
前記オブジェクトＡ、オブジェクトＢ及び順位変更値が−αより大きく＋αより小さいオブジェクトデータの順位を更新する
ことを特徴としている。
【００１２】
請求項４は、クライアントに対するサービスの生成と提供をするアプリケーションサーバと、前記サービスに関するデータを蓄積して前記アプリケーションサーバに提供するデータベースシステムとを備えた装置において、
前記アプリケーションサーバは、
前記クライアントの要求を受け取るとともに、クライアントに対してサービスを提供するアプリケーション部と、
任意オブジェクトデータに順位変動が生じた場合、前記任意オブジェクトデータの順位付けに関連するオブジェクトデータの順位変動範囲と順位変更値とを含む順位変更情報を作成する取得する順位変更情報作成部と、
前記サービスの提供に必要な前記オブジェクトデータのランキングを行うランキング出力部を備え、
前記データベースシステムは、
前記オブジェクトデータの情報を蓄積するオブジェクトテーブルと、
前記順位変更情報が格納された順位変更テーブルを備えるとともに、
前記ランキング出力部は、
前記クライアントからオブジェクトデータのランキングの出力要求があった場合に、前記順位変更テーブルの順位変更情報を呼び出し、この順位変更情報に基づいて前記オブジェクトテーブルのオブジェクトデータを更新してランキングを出力する順位更新出力手段を備えた
ことを特徴としている。
【００１３】
請求項５は、請求項４のリアルタイムランキング装置において、前記オブジェクト更新部は、ランキングに必要なデータの更新を行うに際して、更新されるオブジェクトデータを前記オブジェクトテーブルへ書き込む書込手段と、前記順位変動範囲を利用して順位変更情報を前記順位変更テーブルに蓄積する蓄積手段とを備えたことを特徴としている。
【００１４】
請求項６は、請求項４のリアルタイムランキング装置において、前記ランキング出力部は、ランキングの出力を行うに際して、前記順位変更テーブルに蓄積された順位変更情報を読み出し、前記オブジェクトテーブルに蓄積されたオブジェクトの順位情報に適用する順位更新出力手段を備えたことを特徴としている。
【００１５】
請求項７は、請求項１乃至請求項３のいずれか１項に記載のリアルタイムランキング方法における各手順をコンピュータに実行させるリアルタイムランキングプログラムであることを特徴としている。
【発明の効果】
【００１６】
本発明によれば、順位付けに関連するオブジェクトデータの要素の変更時に順位変更が発生するオブジェクトの範囲を記録し、ランキング出力時に必要なオブジェクトデータの順位だけを更新することで、オブジェクト更新時のデータアクセス回数を最小限にし、リアルタイムなランキング出力を実現することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明のリアルタイムランキング装置のブロック図である。
【図２】リアルタイムランキング装置のアプリケーションサーバにおけるブロック図である。
【図３】順位変更テーブルに記憶される順位変更レコード例を示す表である。
【図４】オブジェクトデータの更新処理を説明するためのランキング表である。
【図５】順位変更テーブルに記憶される順位変更レコード例を示す表であり、（ａ）はＸの変更時における順位変更レコード例（空の状態）、（ｂ）は変更例Ｘに対応する順位変更レコード例、（ｃ）は変更例Ｘ及び変更例Ｙの変更が順次更新された場合の最終的な順位変更レコード例を示す。
【図６】ランキング方法におけるオブジェクト更新処理のフローチャートである。
【図７】ランキング方法におけるランキング出力処理のフローチャートである。
【図８】ランキング方法における順位変更処理のフローチャートである。
【発明を実施するための形態】
【００１８】
本発明のリアルタイムランキング装置の実施形態の一例について、図１を参照して説明する。リアルタイムランキング装置は、クライアント１に対するサービスの生成と提供を行うアプリケーションサーバ２と、サービスに関するデータを蓄積してアプリケーションサーバ２に提供するデータベースシステム３から構成される。
【００１９】
クライアント１は、アプリケーションサーバ２に対し、順位の更新やランキング計算・出力の依頼を行う。
アプリケーションサーバ２は、クライアント１に対してサービスを提供するアプリケーション部２１と、オブジェクト更新部２２と、ランキング出力部２３を備え、アプリケーション部２１がクライアント１からの応答と結果の出力を行い、オブジェクト更新部２２が順位付けに関連するデータの更新を行い、ランキング出力部２３がサービスの提供に必要なオブジェクトデータのランキング計算を行う。オブジェクトデータは、例えば「順位と要素（点数）のデータ」で構成されている。
【００２０】
アプリケーション部２１は、オペレーティングシステム（ＯＳ）を含む基本プログラムや各種の基本デバイスが記憶されたＲＯＭと、各種のプログラムションやデータが記憶されるハードディスクドライブ装置（ＨＤＤ）と、記憶媒体からプログラムやデータを読み出すメディアドライブ装置と、プログラムを実行するＣＰＵと、このＣＰＵにワークエリアを提供するＲＡＭ等、一般的なコンピュータの構成を含み、リアルタイムランキングプログラムがインストールされることで、リアルタイムランキング装置が構築される。
【００２１】
データベースサーバ３は、アプリケーションサーバ２からの更新処理と読出処理を受け付けるDBMS（DataBase Management System）３１と、テーブルデータが格納されたストレージ３２から構成されている。このストレージ３２は、ランキング対象となるオブジェクトの情報（オブジェクトデータ）を蓄積するオブジェクトテーブル３３と、出力時に順位を計算するための順位変更情報が格納された順位変更テーブル３４を有している。
【００２２】
オブジェクトテーブル３３は、「順位と要素（点数）のデータ」をオブジェクトデータとして格納している。
順位変更テーブル３４は、オブジェクトデータの順位変更範囲と、該順位変更範囲に対する順位変更値とを含むデータを順位変更情報として取得しておく。順位変更値情報は、オブジェクトの範囲（順位変更範囲）で順位が幾つ上がる（下がる）という順位変更値の情報で記憶する。このようにすることで、変更値情報のレコード数を削減でき、順位変更テーブルの更新と、ランキング処理時の順位変更値の取得を高速化することができる。
【００２３】
上述したリアルタイムランキング装置は、大規模なデータに対する更新によって変更される順位について、順位を決めるオブジェクトの要素の変更時に順位変更が発生する範囲を記録し、ランキング出力時に必要なオブジェクトの順位だけを更新することで、データベースに対するアクセス回数を最小限にするものであるが、アプリケーションサーバ２において、アプリケーション部２１からの要求を受けてオブジェクト更新部２２及びランキング出力部２３で行われる詳細処理について、図２のアプリケーションサーバにおけるブロック図を参照して説明する。
【００２４】
オブジェクト更新部２２は、クライアント１からのオブジェクトの点数変更要求を検出する更新要求検出部２２１と、オブジェクトの点数が変更された場合にその順位変更情報を作成する順位変更情報作成部２２２と、更新時における順位変更情報をオブジェクトテーブル３３へ書き込む書込手段２２３と、順位変更情報作成部２２２で作成された順位変更情報を順位変更テーブル３４に蓄積する蓄積手段２２４を有している。
【００２５】
更新要求検出部２２１は、アプリケーション部２１を介してクライアント１からのオブジェクトの点数変更要求を検出するもので、この更新要求に基づいてオブジェクトテーブル３３のオブジェクトデータが更新される。クライアント１からのオブジェクトの点数変更要求は、オブジェクトの点数が変更された場合に随時発生するようにクライアント１側で設定されている。
順位変更情報作成部２２２は、オブジェクトに点数変更が生じた場合に、クライアント１からの点数変更要求を受けて順位変更情報を作成するものである。順位変更情報は、任意オブジェクトデータが変更された場合に、その順位付けに関連するオブジェクトデータの順位変動範囲と、順位変更値とを含んで構成されている。
【００２６】
書込手段２２３は、ランキングに必要なオブジェクトデータの更新を行うに際して、更新されるオブジェクトの順位変更情報をオブジェクトテーブル３３へ書き込むことで、最新時の更新データをオブジェクトテーブル３３に反映させる。
蓄積手段２２４は、順位変更情報作成部２２２で順位変更情報が作成された場合に、順位が変更されるオブジェクトデータの範囲についての順位変更情報を順位変更テーブル３４に蓄積する。
また、順位変更情報作成部２２２においては、順位変更情報を作成するに際して、順位変更テーブル３４に蓄積された順位変更情報が使用される。
【００２７】
ランキング出力部２３は、クライアント１からのオブジェクトの出力要求を検出する出力要求検出部２３１と、ランキングの出力を行うに際してオブジェクトの順位情報を呼び出して出力する順位更新出力手段２３２を有している。
出力要求検出部２３１は、アプリケーション部２１を介してクライアント１からのオブジェクトの出力要求を検出するもので、この出力要求に基づいてランキング出力時に必要なオブジェクトの順位だけを更新することで、出力時における最新のオブジェクトデータによるリアルタイムランキングが得られる。
順位更新出力手段２３２は、更新時におけるオブジェクトの順位情報を呼び出すとともに、更新後に順位変動が生じているような場合には、順位変更テーブル３４に蓄積された順位変更情報を読み出し、前記オブジェクトテーブルに蓄積されたオブジェクトの順位情報を適用したリアルタイムランキングによるオブジェクトデータが出力される。
【００２８】
次に、リアルタイムランキングを得るに際して、順位変更情報作成部２２２で作成される順位変更情報（順位変更レコード）の具体例（テーブルスキーマ）を図３に示す。
順位変更情報は、オブジェクトデータの順位付けに関連するオブジェクトデータの順位変動範囲と、順位変更値から成る順位変更レコードで構成されている。例えば、レコード番号１（mod_rank_id＝１）の順位変更情報は、１０位（rank_start）から５０位（rank_end）のオブジェクトが現在の順位から＋３（mod_rank）されることで順位が下がることを示している。レコード番号２（mod_rank_id＝２）の順位変更情報は、６０位（rank_start）から９５位（rank_end）のオブジェクトが現在の順位から−２（mod_rank）されることで順位が上がることを示している。
【００２９】
オブジェクトについてのリアルタイムランキングを行う場合の処理について、具体的なオブジェクト順位の更新を説明するためのランキング表（図４）、順位変更レコード（図５）及びフローチャート（図６〜図８）を参照して説明する。
図４の表では、説明のため、順位を決める要素を「点数」と仮定し、点数が高いオブジェクトが上位になり、点数が低いオブジェクトを下位としている。また、ここでの説明は、オブジェクトの点数が高い値に変更され、順位が上位に変更される場合を想定している。
【００３０】
オブジェクト更新部２２におけるオブジェクト順位の更新についての処理手順を図６に示す。
アプリケーション部２１がクライアント１からのオブジェクトＡの点数更新要求を受け取ると（ステップ１０１）、オブジェクト更新部２２に順位の更新の依頼をする。
オブジェクト更新部２２は、オブジェクトＡの新しい点数（更新順位）の一つ上の順位のオブジェクトＢを検索し、更新対象オブジェクトＡ及びオブジェクトＢのオブジェクトデータをオブジェクトテーブル３３から読み出す（ステップ１０２）。
図４の例では、オブジェクトＡが元の点数「２６０」（順位１３位）から点数「２７９」（順位８位）のオブジェクトデータに変更される変更例Ｘを示している。オブジェクトＢは、オブジェクトＡの更新順位８位より一つ上の順位である７位に該当する点数「２８０」のオブジェクトデータとなる。
【００３１】
次に、オブジェクトＡ及びオブジェクトＢの正しい順位の計算と、オブジェクトＡの順位変更に伴って変更されるオブジェクトの順位変更値を更新するために、オブジェクトＡの順位にαをプラスした値以下で、オブジェクトＢの順位からαをマイナスした値以上の全ての順位変更情報を順位変更テーブル３４の順位変更レコードから取得する（ステップ１０３）。
図３のスキーマを例にすると、
（１）rank_start ≧ B.rank −α
（２）rank_end  ≦ A.rank ＋α
の２つを満たす順位変更レコードを取得する。ここでαは事前に設定された定数で、オブジェクトに設定されている順位と、順位変更値の整合性を保つために利用される。
【００３２】
図４の例では、変更例Ｘの他に、オブジェクトＡが元の点数「２６５」（順位１２位）から点数「２７５」（順位１０位）のオブジェクトデータに変更される変更例Ｙが存在しているものとする。順位変更レコードについては、先ず変更例Xが適用され、その後に変更例Yが適用され、順位変更レコードの遷移は図５（a）〜（c）のようになる。この場合、変更例Ｘ及び変更例Ｙに対応する順位変更レコードは、Xの変更時には（図５（a））（順位変更テーブルが空の状態）となり、Xの変更適用時には図５（ｂ）となり、Yの変更適用時には図５（ｃ）に示すmod_rank_id「１」「２」のような順位変更レコードとなる。
図４の例において、変更例Ｘによるオブジェクトデータの更新を行うに際し、αを「５」に設定した場合、オブジェクトＡの元の順位１３にα（５）を足した順位が１８位となり、オブジェクトＢの元の順位７からα（５）を引いた順位が２位となるので、元の順位が２位より下で、元の順位が１８位より上の値をrank_startからrank_endまでの間で有する順位変更レコードを全て取得する。
【００３３】
ここで取得した全ての順位変更レコードのうち、オブジェクトAの順位＋αとオブジェクトBの順位−αの間の順位のオブジェクトに対して順位変更値を適用させ、本来の順位を算出する（ステップ１０４）。順位を算出する際の詳細な処理手順については後述する（図８）。
これにより、順位更新対象となるオブジェクトの正確な順位を把握することができ、順位変更対象となるオブジェクトを正確に把握する。このとき、本来の順位を計算したオブジェクトの計算前の元の順位と適用した順位変更レコードを記録しておく。なお、順位変更のないオブジェクトに関しては本来の順位と計算前の順位は等しくなる。
【００３４】
次に、本来の順位におけるオブジェクトＡ及びオブジェクトＢ間の順位に位置するオブジェクトを抽出し、これらの元の順位の順位変更レコードに対して、順位変更値をプラス「１」する（ステップ１０５）。
図４の変更例Xの例では、順位変更レコードがなく、本来の順位と元の順位が同じ状態での更新となるので、単純にオブジェクトＡ〜オブジェクトＢの順位（８〜１１位）にプラス「１」して９〜１２位とするための順位変更レコードを作成する。一方、順位変更レコードのある変更例Yの場合、変更対象は順位変更が生じるのは本来の順位における１１位と１２位となり、これらの順位に位置するオブジェクトの元の順位（１０〜１１位）に紐づく順位変更レコードに対してプラス「１」する。
【００３５】
このとき、オブジェクトＡ又はオブジェクトＢの順位が、順位変更レコードにおける対象順位の範囲内（rank_start〜rank_end）にある場合は、順位変更レコードを分割する。これは一つの順位変更レコードを、順位変更値の違うもので分割することを意味する。
例えばオブジェクトYの変更時には「8〜12位の順位は+1される」という順位レコードがあり、Y変更後はこの一つのレコードの中の特定の順位（10〜11位）だけに対して順位変更値を更新する必要がある。そのために、このレコードを「8〜9位の順位は+1される」、「10〜11位の順位は+1される」、「12位の順位は+1される」という３つのレコードに分割することが行われる。その後、10〜11位のレコードに対して順位変更値を+1する（なお12位のレコードは、Yにおける更新対象のオブジェクトに対するレコードなので、このオブジェクトに順位変更を適用することでレコードが削除される。）。
【００３６】
その後、更新したレコードを順位変更テーブル３４に書き込むが、ここで順位変更値が±αを超えた場合、または０となった場合は、レコードを削除する（ステップ１０６）。また併せて、オブジェクトA及びBの順位の順位変更レコードも削除する。
図４の例においては、順位変更情報は、図５（ｂ）に示すmod_rank_id「１」「２」のように、変更例Ｘと変更例Ｙとが統合された順位変更レコードに更新される。すなわち、オブジェクトＡ〜オブジェクトＢにおいて、更新対象オブジェクトの順位（１２位）を削除し、順位（８〜９位）にプラス「１」し、順位（１０〜１１位）にプラス「２」する順位変更レコードが順位変更テーブル３４に書き込まれる（ステップ１０６）。
【００３７】
最後に順位を計算するために、順位変更値が±αを超えた順位のオブジェクトを取得して順位変更値を適用し、オブジェクトＡの順位をオブジェクトＢの順位プラス「１」にする（ステップ１０７）。図４の例では、オブジェクトＡの順位をオブジェクトＢの順位（７位）にプラス「１」した８位とする。
そして、これらの順位変更適用後のオブジェクトデータ（オブジェクトＡ、オブジェクトＢ、順位変更値が±αを超えた順位のオブジェクト）をオブジェクトテーブル３３に書き込み（ステップ１０８）、オブジェクトデータの更新処理を完了する（ステップ１０９）。
すなわち、ステップ１０８においては、順位変更レコードの変更順位（mod_rank）が±αを超えた順位に位置するオブジェクトが更新対象となる。
【００３８】
次に、ランキング出力部２３におけるランキング出力についての処理手順を図７に示す。
アプリケーション部２１がクライアント１からランキング出力要求を受けると、ランキング出力部２３にランキング処理要求を出す（ステップ２０１）。
ランキング出力部２３は、まず指定された出力範囲の上位−αから下位＋αまでのオブジェクトデータを、オブジェクトテーブル３３から取得する（ステップ２０２）。同様に順位変更情報についても、出力範囲の上位−αから下位＋αまでを、順位変更テーブル３４から取得する（ステップ２０３）。
次に、出力範囲の上位−αから下位＋αまでのオブジェクトデータについて、取得した順位変更情報をオブジェクトの順位に適用する（ステップ２０４）。順位を算出する際の詳細な処理手順については後述する（図８）。
【００３９】
続いて、出力範囲の上位−αから下位＋αまでの順位変更レコード削除について、順位変更テーブル３４の情報を更新する（ステップ２０５）。  例えば、１０〜７０位と８０〜９０位の順位変更レコードがあったとして、５０〜１００位の出力要求がある場合、５０〜１００位±α（５）に順位変更レコードを適用して要求されたランキングを出力し、８０〜９０位の順位変更レコードは削除する。この時、、１０〜４５位はまだ順位変更レコードとして残す必要があるので、この範囲となるよう順位変更レコードを更新する。
【００４０】
オブジェクトテーブル３３における出力範囲の上位−αから下位＋αまでのオブジェクトデータを更新する（ステップ２０６）。
すなわち、ステップ２０６においては、出力範囲±α内の順位に位置するオブジェクトが更新対象となる。
そして、更新したオブジェクトデータのうち、出力範囲のものを出力する（ステップ２０７）。
【００４１】
なお、適用範囲外の順位を含む順位変更レコードがあった場合は、順位の範囲を変更して順位変更テーブルを更新する。更新したオブジェクトのうち、出力範囲の順位のオブジェクトを、アプリケーション部２１に返す。
【００４２】
次に、図６のフローチャートにおけるステップ１０４、又は、図７のフローチャートにおけるステップ２０４において、順位変更情報をオブジェクトの順位に適用する場合の処理手順について、図８のフローチャートを参照して説明する。
オブジェクトに対して順位変更を適用する上で、順位をキーとしてオブジェクト検索した場合に、順位変更対象である順位のオブジェクトが複数存在することがある。これは、すでに順位変更が適用済みのオブジェクトがある場合に発生する。また、対象順位の順位変更レコードが複数ある場合もある。これは、前述のような順位変更適用済みのオブジェクトとそうでないオブジェクトが同じ順位にいる時に、更に順位変更が生じた場合に発生する。
【００４３】
このような場合、図８のように、変更対象の順位の順位変更レコードを抽出し（ステップ３０１）、変更対象の順位のオブジェクトデータを全て読み込む（ステップ３０２）。
そして、最も大きい（最も順位が下がる）順位変更値から順に処理を行う（ステップ３０３）。例えば、複数の順位変更レコードにおける順位変更値が「＋２」「＋１」「−１」「−５」であったとすると、順位変更値が「＋２」の順位変更レコードを選択する。次に、順位変更値が０を超えるか否かを判断し（ステップ３０４）、０を超える場合、選択する対象オブジェクトは、適用していないオブジェクトの中で点数の一番低いオブジェクトとし、最小の点数のオブジェクトに順位変更を適用する（ステップ３０５）。
【００４４】
ステップ３０３で選択した最大の順位変更値が負である場合（ステップ３０４）、順位変更レコードとオブジェクトデータの数が等しいか否かを判断する（ステップ３０６）。
順位変更レコードとオブジェクトデータの数が等しい時は、最小の点数のオブジェクトに順位変更を適用する（ステップ３０５）。
順位変更レコードとオブジェクトデータの数が等しくない場合は、その時点で順位変更を適用していない対象オブジェクトの中で点数の一番低いオブジェクトは、すでに順位変更適用済みなので除外し（ステップ３０７）、残りのオブジェクトデータで最小の点数のオブジェクトに順位変更を適用する（ステップ３０５）。
【００４５】
以上の処理を全順位変更レコード分繰り返し、未処理の順位変更レコード数が無くなった時（ステップ３０８）、適用処理を終了することで（ステップ３０９）、矛盾なく順位変更を適用することができる。
【００４６】
上述したリアルタイムランキング方法によれば、ランキングするためのオブジェクトの要素の更新時に最低限必要なオブジェクト以外のランキング計算を行わず、オブジェクトが持つ順位情報の範囲で順位の変更値を持つことで、更新・読み込み対象のレコード数を削減する。その結果、データベースシステムへの読み込み／書き込み作業を減らし、更新対象オブジェクトの順位変更が大きい場合でもレイテンシが低い更新処理を実現することができる。
【００４７】
また、ランキングをクライアントに出力するシステムでは、クライアントの表示性能や通信速度の関係から、ユーザレスポンスを高めるために出力するランキングの範囲を限定することが一般的である。
上述したランキング方法によれば、出力に必要な範囲の順位のみを出力時に更新することで、順位の計算範囲を削減している。これにより、出力範囲外のオブジェクトも含めたソート処理のような無駄な処理を排除し、リアルタイムなランキング出力を実現することができる。
【符号の説明】
【００４８】
１…クライアント、  ２…アプリケーションサーバ、  ３…データベースサーバ、  ２１…アプリケーション部、  ２２…オブジェクト更新部、  ２３…ランキング出力部、  ３１…DBMS（DataBase Management System）、  ３２…ストレージ、  ３３…オブジェクトテーブル、  ３４…順位変更テーブル、  ２２３…書込手段、  ２２４…蓄積手段、  ２３１…出力要求検出部、  ２３２…順位更新出力手段。
【図１】
2015011437.tif 000003
【図２】
2015011437.tif 000004
【図３】
2015011437.tif 000005
【図４】
2015011437.tif 000006
【図５】
2015011437.tif 000007
【図６】
2015011437.tif 000008
【図７】
2015011437.tif 000009
【図８】
2015011437.tif 000010