(57)【特許請求の範囲】
【請求項１】
複数のクライアントによって同時にアクセス要求されることにより形成される高同時実行性データのための記憶方法であって、
複数のクライアントから送信されてきた高同時実行性データを受信するステップと、
前記高同時実行性データをメインデータキューにプッシュするとともに相応のクライアントに応答するステップと、
マルチスレッドによって、前記メインデータキューにおける前記高同時実行性データを前記メインデータキューから移し出すことである、前記メインデータキューにおける前記高同時実行性データを消費するステップと、
ローカルキューの数に基づいて前記高同時実行性データを断片化するステップと、
断片化された後の高同時実行性データをローカルキューにプッシュするステップと、
ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶するステップとを含み、
ローカルキューの数に基づいて前記高同時実行性データを断片化するステップは、
前記ローカルキューの数を除数とし、前記高同時実行性データの主キーの数を被除数としたモジュロ演算を実行するステップと、
同じモジュロ演算の同じ結果に基づいて対応する高同時実行性データを１つの断片に断片化するステップと、を含むことを特徴とする、
方法。
【請求項２】
請求項１に記載の方法であって、
断片化された後の高同時実行性データをローカルキューにプッシュするステップは、具体的に、
モジュロ演算の結果に基づいて断片化された後の高同時実行性データを相応の番号を有するローカルキューにプッシュするステップを含むことを特徴とする、
方法。
【請求項３】
請求項１または２に記載の方法であって、
ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶するステップは、
スケジュール運転によって、前記ローカルキューにおける前記高同時実行性データを前記ローカルキューから移し出すことである、前記ローカルキューにおける高同時実行性データを消費するステップと、
消費された高同時実行性データをデータベースに記憶するステップと、を含むことを特徴とする、
方法。
【請求項４】
請求項３に記載の方法であって、
前記スケジュール運転はQuartzによって実現されることを特徴とする、
方法。
【請求項５】
複数のクライアントによって同時にアクセス要求されることにより形成される高同時実行性データのための記憶装置であって、
複数のクライアントから送信されてきた高同時実行性データを受信するための受信モジュールと、
前記高同時実行性データをメインデータキューにプッシュするとともに相応のクライアントに応答するための第１のプッシュモジュールと、
マルチスレッドによって、前記メインデータキューにおける前記高同時実行性データを前記メインデータキューから移し出すことである、前記メインデータキューにおける前記高同時実行性データを消費するための消費モジュールと、
ローカルキューの数に基づいて前記高同時実行性データを断片化するための断片化モジュールと、
断片化された後の高同時実行性データをローカルキューにプッシュするための第２のプッシュモジュールと、
ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶するための記憶モジュールとを備え、
前記断片化モジュールは、
前記ローカルキューの数を除数とし、前記高同時実行性データの主キーの数を被除数としたモジュロ演算を実行するためのモジュロ取得サブモジュールと、
同じモジュロ演算の同じ結果に基づいて対応する高同時実行性データを１つの断片に断片化するための断片化サブモジュールと、を含むことを特徴とする、
装置。
【請求項６】
請求項５に記載の装置であって、
前記第２のプッシュモジュールは、具体的にモジュロ演算の結果に基づいて断片化された後の高同時実行性データを相応の番号を有するローカルキューにプッシュするために用いられることを特徴とする、
装置。
【請求項７】
請求項５または６に記載の装置であって、
前記記憶モジュールは、
スケジュール運転によって、前記ローカルキューにおける前記高同時実行性データを前記ローカルキューから移し出すことである、前記ローカルキューにおける高同時実行性データを消費する消費サブモジュールと、
消費された高同時実行性データをデータベースに記憶する記憶サブモジュールと、を含むことを特徴とする、
装置。
【請求項８】
請求項７に記載の装置であって、
前記スケジュール運転はQuartzによって実現されることを特徴とする、
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例はデータ処理技術に係り、とりわけ高同時実行性データ（high- concurrency data）の記憶方法および装置に係る。
【背景技術】
【０００２】
インターネット情報の爆発的な増加により、夥しい量の高同時実行性データを扱う環境に出会うインターネットサーバがますます多くなっている。このような環境では、高同時実行性データの記憶の問題が発生する。かかる問題を解決するために、Hadoop, MongoDB, HbaseなどのNoSql（Not Only SQL，非関係型データベース）言語が広汎に使用されるようになった。
【０００３】
しかし、一部の古いビジネスシステムにおいては、新しい記憶方法に変更するために、高いコストをかけなければならず、そのため、依然としてMySqlやOracleなど従来の関係型データベースを用いてデータを記憶している。システムが高同時実行性データを記憶する場合に、データベースへのリンクが多発し、大量のソースがリンクに占用されるため、記憶効率が下がり、サーバがクラッシュするなどの問題が発生してしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
前記した問題点に鑑み、本発明の実施例は高同時実行性データの記憶方法および装置を提供することにより高同時実行性データの記憶効率を高める。
【課題を解決するための手段】
【０００５】
第１の態様において、本発明の実施例は高同時実行性データの記憶方法を提供する。前記方法は、複数のクライアントから送信されてきた高同時実行性データを受信するステップと、前記高同時実行性データをメインデータキューにプッシュするとともに、相応のクライアントに応答するステップと、マルチスレッドによって前記メインデータキューにおける高同時実行性データを消費するステップと、ローカルキューの数に基づいて前記高同時実行性データを断片化するステップと、断片化された後の高同時実行性データをローカルキューにプッシュするステップと、ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶するステップと、を含む。
【０００６】
第２の態様において、本発明の実施例はさらに高同時実行性データの記憶装置を提供する。前記装置は、複数のクライアントから送信されてきた高同時実行性データを受信する受信モジュールと、前記高同時実行性データをメインデータキューにプッシュするとともに、相応のクライアントに応答する第１のプッシュモジュールと、マルチスレッドによって前記メインデータキューにおける高同時実行性データを消費する消費モジュールと、ローカルキューの数に基づいて前記高同時実行性データを断片化する断片化モジュールと、断片化された後の高同時実行性データをローカルキューにプッシュする第２のプッシュモジュールと、ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶する記憶モジュールと、を備えている。
【０００７】
本発明の実施例では、前記高同時実行性データをメインデータキューにプッシュし、前記メインデータキューにおける高同時実行性データをマルチスレッドによって消費し、ローカルキューの数に基づいて前記高同時実行性データを断片化し、断片化された後の高同時実行性データをローカルキューにプッシュし、ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶し、メインデータキューおよびローカルキューによって高同時実行性データを一時記憶し、非同期記憶方式によりデータを記憶することによって高同時実行性データを直接データベースに記憶する際にデータベースに与える圧力を緩和し、高同時実行的記憶を行う場合にデータベースがクラッシュしやすいという問題を避け、高同時実行性データの記憶効率を高めた。
【図面の簡単な説明】
【０００８】
【図１】本発明の第１の実施例によって提供された高同時実行性データの記憶方法のフローチャートである。
【図２】本発明の第２の実施例によって提供された高同時実行性データの記憶方法の構造設計図である。
【図３】本発明の第２の実施例によって提供された高同時実行性データの記憶方法のフローチャートである。
【図４】本発明の第３の実施例によって提供された高同時実行性データの記憶装置の概略図である。
【発明を実施するための形態】
【０００９】
以下において、図面および実施例を参照しながら本発明をより詳しく説明する。なお、この明細書に記載された具体的な実施例は本発明を説明するためのものであり、本発明を限定するためのものではない。また、説明しやすいように、図面には全ての内容を記載せず、本発明と関連のある部分のみを記載した。
【００１０】
（第１の実施例）
図１は本発明の第１の実施例によって提供された高同時実行性データの記憶方法のフローチャートである。本実施例は高同時実行性データに対する記憶に適用することができる。当該方法はサーバによって実行することができ、具体的には下記のステップを含む。
【００１１】
複数のクライアントから送信されてきた高同時実行性データを受信するステップ１１０。
【００１２】
ここで、高同時実行性とはある時刻に大量のアクセスが同時に実行されることをいう。サーバが複数のクライアントからの要求を受信し、多数のクライアントが同時にアクセスを要求することにより高同時実行性データが形成される。
【００１３】
前記高同時実行性データをメインデータキューにプッシュするとともに相応のクライアントに応答するステップ１２０。
【００１４】
ここで、データキューは分布式ＭＱ（Message Queue，メッセージキュー）を採用し、分布式拡張を支持することができるとともに、フレームに高可用性を持たせることにより、ビッグデータを処理するときも比較的客観的な性能を確保することができる。ここで、ActiveMQはApacheによって開発された最も流行し、かつ最も強力なオープンソースメッセージバスである。
【００１５】
サーバは高同時実行性データを受信すると、前記高同時実行性データをメインデータキューにプッシュするとともに、該高同時実行性データを送信したクライアントに応答する。ここで、メインデータキューは全てのデータのメインエントランスキューであり、データが当該キューにプッシュされた後、直ちに結果を返信することで応答速度を高めることができる。
【００１６】
マルチスレッドによって前記メインデータキューにおける高同時実行性データを消費するステップ１３０。
【００１７】
ここで、マルチスレッドはスレッドプールによって配分される。スレッドプールはマルチスレッド処理データを提供するとともに、データを断片化して対応するローカルキューにプッシュし、メッセージの消費速度を高めた。それと同時に、ＭＱの特性を利用してデータの持続化を図りデータのロスを防ぐことができる。サーバはスレッドプールによって配分されたマルチスレッドにより前記メインデータキューにおける高同時実行性データを速やかに消費する。ここで、前記メインデータキューにおける高同時実行性データを消費するとは、前記メインデータキューにおける高同時実行性データを当該メインデータキューから移し出すことをいう。
【００１８】
ローカルキューの数に基づいて前記高同時実行性データを断片化するステップ１４０。
【００１９】
ここで、ローカルキューは断片化された後の高同時実行性データを記憶し、断片化された後のデータのロスを防ぐ。ローカルキューは前記高同時実行性データのデータサイズに基づいて横方向に拡張することができる。また、データサイズが大きい場合にはローカルキューの数を拡張することができる。サーバはローカルキューの数に基づいてメインデータキューから移し出された高同時実行性データをローカルキューと同じ数の断片に断片化し、断片化された後の高同時実行性データをローカルキューに記憶する。高同時実行性データに対して断片化処理を行うことによりデータに対する繰り返し処理を避けるとともに処理速度を高めることができる。当業者にとって明らかなように、高同時実行性データに対する断片化はさまざまなストラテジーを採用することができる。例えば、データのメインキーの特徴に基づいて断片化し、ローカルキューに対する高同時実行性データのメインキーの数についてモジュロ演算を行い、得られた結果に対応する番号のローカルキューに当該データを配分することができる。また、時間の範囲に基づいて断片化することもできる。例えば、先頭の１００万個のデータを第１のローカルキューに配分し、その次の１００万個のデータを第２のローカルキューに配分する。言うまでもなく、その他の断片化ストラテジーを用いることもできる。
【００２０】
断片化された後の高同時実行性データをローカルキューにプッシュするステップ１５０。
【００２１】
サーバは、高同時実行性データを断片化するための断片化ストラテジーに基づいて断片化された後の高同時実行性データを相応のローカルキューにプッシュし、ローカルキューによって高同時実行性データを一時記憶する。
【００２２】
ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶するステップ１６０。
【００２３】
サーバによってローカルキューにおける高同時実行性データを消費する。即ち、ローカルキューにおける高同時実行性データをローカルキューから移し出した後に、ローカルキューから移し出された高同時実行性データをデータベースに記憶する。
【００２４】
本実施例における高同時実行性データは転送過程、例えば高同時実行性データをメインデータキューにプッシュしたりデータを消費したりする過程において、データのシリアル化およびデシリアル化をしやすくために、高性能のJSONフォーマットで転送することができる。これによりデータの転送速度をさらに高めることができる。ここで、JSON（JavaScript Object Notation）は軽量型のデータ交換形式であり、JavaScriptシンタックスに基づくサブセットであり、即ちアレイおよびオブジェクトの表記である。シリアル化はオブジェクトストリームを処理するためのメカニズムであり、オブジェクトストリームはオブジェクトの内容をストリーム化させるものであり、ストリーム化された後のオブジェクトに対して読み書き操作を行うことができる。シリアル化は、オブジェクトストリームに対して読み書き操作を行うときに発生する問題を解決するためのものである。
【００２５】
本実施例では、前記高同時実行性データをメインデータキューにプッシュし、前記メインデータキューにおける高同時実行性データをマルチスレッドによって消費し、ローカルキューの数に基づいて前記高同時実行性データを断片化し、断片化された後の高同時実行性データをローカルキューにプッシュし、ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶し、メインデータキューおよびローカルキューによって高同時実行性データを一時記憶し、非同期記憶方式によりデータを記憶することによって高同時実行性データを直接データベースに記憶する際にデータベースに与える圧力を緩和し、高同時実行的記憶を行う場合にデータベースがクラッシュしやすいという問題を避けるとともに、高同時実行性データの記憶効率を高めた。
【００２６】
前記技術的解決手段をベースに、ローカルキューの数に基づいて前記高同時実行性データを断片化する。好ましくは、前記ローカルキューに対する前記高同時実行性データのメインキーの数についてモジュロを求めるステップと、同じモジュロ演算の結果に基づいて対応する高同時実行性データを１つの断片に断片化するステップとを含む。
【００２７】
まず、高同時実行性データで生成された主キーの前記ローカルキューに対する数についてモジュロ演算を行い、同じモジュロ演算結果が得られた高同時実行性データを１つの断片に断片化する。
【００２８】
前記技術的解決手段をベースに、断片化された後の高同時実行性データをローカルキューにプッシュする。具体的には、モジュロ演算の結果に基づいて断片化された後の高同時実行性データを相応の番号を有するローカルキューにプッシュするステップを含む。
【００２９】
ここで、各ローカルキューはそれぞれ固有の番号を有する。断片化された後の高同時実行性データをモジュロ演算結果と同じ番号を有するローカルキューにプッシュする。
【００３０】
前記技術的解決手段のうちのいずれか１つの技術的解決手段をベースに、ローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶する。好ましくは、スケジュール運転によってローカルキューにおける高同時実行性データを消費するステップと、消費された高同時実行性データをデータベースに記憶するステップと、を含む。
【００３１】
サーバは、スケジュール運転によってローカルキューにおける高同時実行性データを定刻／即時にローカルキューから移し出す。ユーザは必要に応じてキャッチする（ローカルキューから移し出す）データの量およびデータキャッチの時間間隔を制御し、定刻／即時にローカルキューから移し出した高同時実行性データをデータベースに記憶することができる。スケジュール運転によって定刻／即時にデータを処理する機能を配置し、データベースへの記憶圧力を緩和することができる。好ましくは、前記スケジュール運転はQuartzによって実現される。ここで、Quartz は完全にJavaを用いて作成されたオープンソースジョブスケジューリングフレームワークである。
【００３２】
（第２の実施例）
図２は本発明の第２の実施例によって提供された高同時実行性データの記憶方法の構造設計図である。図２に示すように、メインデータキューは全てのデータのメインエントランスキューであり、データが当該キューにプッシュされた後に、直ちに結果を返信することで応答速度を高めることができる。スレッドプール（Thread Pool）はマルチスレッド処理データを提供するとともに、データを断片化して対応するローカルキューにプッシュし、メッセージの消費速度を高めることができる。また、ＭＱの特性を利用してデータの持続化を図りデータのロスを防ぐことができる。ローカルキューはデータ断片化後のデータを記憶することによって断片化された後のデータのロスを防ぐ。ワーク（Work）１、ワーク２、ワーク３は定刻／即時にデータを消費し、データを処理するとともにデータベースに記憶することによってキャッチするデータの量およびデータキャッチの時間間隔を自主的に制御することができる。
【００３３】
図３は本発明の第２の実施例によって提供された高同時実行性データの記憶方法のフローチャートである。図３に示すように、本実施例によって提供された高同時実行性データの記憶方法は具体的に以下のステップを含む。
【００３４】
記憶されるべき高同時実行性データをメインデータキューにプッシュするステップ３１０。
【００３５】
まず、記憶されるべき高同時実行性データをメインデータキューにプッシュし、高同時実行性データをメインデータキューにプッシュした後に、結果を返信してクライアントに応答する。
【００３６】
マルチスレッドによってメインデータキューにおける高同時実行性データを消費するステップ３２０。
【００３７】
スレッドプールによって提供されたマルチスレッドによってメインデータキューにおける高同時実行性データを速やかに消費する。
【００３８】
高同時実行性データを断片化するとともに対応するローカルキューにプッシュするステップ３３０。
【００３９】
ローカルキューの数に基づき、ローカルキューに対する高同時実行性データのメインキーの数についてモジュロ演算を行い、モジュロ演算の結果に基づいて断片化された後の高同時実行性データをモジュロ演算の結果と同じ番号のローカルキューにプッシュする。
【００４０】
所定の時刻にローカルキューにおける高同時実行性データを消費するステップ３４０。
【００４１】
Quartzによってローカルキューにおける高同時実行性データを定刻／即時に消費することを実現する。
【００４２】
データをデータベースに記憶するステップ３５０。
【００４３】
本実施例では、従来の関係型データベースに対し、メインデータキューによって高同時実行性データを一時記憶するとともに、ローカルキューによって高同時実行性データを再度一時記憶することによってデータのロスを防止することができる。また、メインデータキューの消費速度を高めるとともに、高同時実行性データの記憶効率を高めることができる。さらに、データを定刻／即時に処理する機能を配置することができるため、データベースへの圧力を緩和して高同時実行的記憶を行う場合にデータベースがクラッシュしやすいという問題を避けた。
【００４４】
（第３の実施例）
図４は本発明の第３の実施例によって提供された高同時実行性データの記憶装置の概略図である。本実施例によって提供された高同時実行性データの記憶装置は第１の実施例によって提供された高同時実行性データの記憶方法を実現するための装置である。図４に示すように、本実施例によって提供された高同時実行性データの記憶装置は、受信モジュール４１０、第１のプッシュモジュール４２０、消費モジュール４３０、断片化モジュール４４０、第２のプッシュモジュール４５０および記憶モジュール４６０を備えている。
【００４５】
受信モジュール４１０は複数のクライアントから送信されてきた高同時実行性データを受信し、第１のプッシュモジュール４２０は前記高同時実行性データをメインデータキューにプッシュするとともに相応のクライアントに応答し、消費モジュール４３０はマルチスレッドによって前記メインデータキューにおける高同時実行性データを消費し、断片化モジュール４４０はローカルキューの数に基づいて前記高同時実行性データを断片化し、第２のプッシュモジュール４５０は断片化された後の高同時実行性データをローカルキューにプッシュし、記憶モジュール４６０はローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶する。
【００４６】
好ましくは、前記断片化モジュールは、前記ローカルキューに対する前記高同時実行性データの主キーの数についてモジュロを求めるモジュロ取得サブモジュールと、同じモジュロ演算の結果に基づいて対応する高同時実行性データを１つの断片に断片化する断片化サブモジュールとを含む。好ましくは、前記第２のプッシュモジュールは具体的にモジュロ演算の結果に基づいて断片化された後の高同時実行性データを相応の番号を有するローカルキューにプッシュする。
【００４７】
好ましくは、前記記憶モジュールは、スケジュール運転によってローカルキューにおける高同時実行性データを消費する消費サブモジュールと、消費された高同時実行性データをデータベースに記憶する記憶サブモジュールとを備える。好ましくは、前記スケジュール運転はQuartzによって実現される。
【００４８】
本実施例では、受信モジュールによって複数のクライアントから送信されてきた高同時実行性データを受信し、第１のプッシュモジュールは前記高同時実行性データをメインデータキューにプッシュするとともに相応のクライアントに応答し、消費モジュールはマルチスレッドによって前記メインデータキューにおける高同時実行性データを消費し、断片化モジュールはローカルキューの数に基づいて前記高同時実行性データを断片化し、第２のプッシュモジュールは断片化された後の高同時実行性データをローカルキューにプッシュし、記憶モジュールはローカルキューにおける高同時実行性データを消費するとともにデータベースに記憶する。メインデータキューおよびローカルキューによって高同時実行性データを一時記憶し、非同期記憶方式によりデータを記憶することによって高同時実行性データを直接データベースに記憶する際にデータベースに与える圧力を緩和し、高同時実行的記憶を行う場合にデータベースがクラッシュしやすいという問題を避け、高同時実行性データの記憶効率を高めた。
【００４９】
なお、前記実施例は、本発明の好ましい実施例および用いられる技術の原理に関する説明にすぎない。本発明は前記特定の実施例に限定されない。当業者は、本発明の保護範囲を離脱せずにさまざまな方法で本発明に対する変更、再調整、代替を行うことができる。したがって、以上において前記実施例を参照しながら本発明を詳しく説明したが、本発明は前記実施例に限定されない。本発明の主旨を離脱せずにその他のさまざまな等価的な実施例を行うことができる。本発明の範囲はその特許請求の範囲によって決定されるものとする。
【図１】
0006464284.tif 000002
【図２】
0006464284.tif 000003
【図３】
0006464284.tif 000004
【図４】
0006464284.tif 000005