特許第5681781号(P5681781)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社野村総合研究所の特許一覧
<>
  • 特許5681781-データ利用システム 図000002
  • 特許5681781-データ利用システム 図000003
  • 特許5681781-データ利用システム 図000004
  • 特許5681781-データ利用システム 図000005
  • 特許5681781-データ利用システム 図000006
  • 特許5681781-データ利用システム 図000007
  • 特許5681781-データ利用システム 図000008
  • 特許5681781-データ利用システム 図000009
  • 特許5681781-データ利用システム 図000010
  • 特許5681781-データ利用システム 図000011
  • 特許5681781-データ利用システム 図000012
  • 特許5681781-データ利用システム 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5681781
(24)【登録日】2015年1月16日
(45)【発行日】2015年3月11日
(54)【発明の名称】データ利用システム
(51)【国際特許分類】
   G06F 17/30 20060101AFI20150219BHJP
   G06F 12/00 20060101ALI20150219BHJP
【FI】
   G06F17/30 110C
   G06F17/30 330B
   G06F12/00 513J
【請求項の数】4
【全頁数】16
(21)【出願番号】特願2013-264847(P2013-264847)
(22)【出願日】2013年12月24日
(62)【分割の表示】特願2010-259607(P2010-259607)の分割
【原出願日】2010年11月20日
(65)【公開番号】特開2014-112385(P2014-112385A)
(43)【公開日】2014年6月19日
【審査請求日】2013年12月24日
(73)【特許権者】
【識別番号】000155469
【氏名又は名称】株式会社野村総合研究所
(74)【代理人】
【識別番号】100096002
【弁理士】
【氏名又は名称】奥田 弘之
(74)【代理人】
【識別番号】100091650
【弁理士】
【氏名又は名称】奥田 規之
(72)【発明者】
【氏名】石田 裕三
(72)【発明者】
【氏名】山柿 隆
(72)【発明者】
【氏名】峯 英樹
(72)【発明者】
【氏名】後藤 耕平
(72)【発明者】
【氏名】安増 拓見
【審査官】 早川 学
(56)【参考文献】
【文献】 特開2008−250588(JP,A)
【文献】 特開2012−59215(JP,A)
【文献】 特開2004−62566(JP,A)
【文献】 特開2000−330959(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/30
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
複数のテーブルが格納された記憶手段を備えたデータベースサーバと、このデータベースサーバにネットワークを介して接続され、各テーブルに格納されたデータを操作するためのSQLを発行する機能と、取得したデータを加工する機能を備えたアプリケーションサーバとを有するデータ利用システムであって、
上記の各テーブルには、キー項目が一つに限定される制約と、Null値、フラグ値及び区分値を格納するためのデータ項目の設定が禁止される制約と、データの更新が禁止される制約が設けられており、
上記アプリケーションサーバは、検索条件分割処理部と、複数の検索処理部と、複数のデータ加工処理部と、検索結果統合処理部とを備え、
上記検索条件分割処理部は、入力された検索条件を解析して複数の検索条件に分割すると共に、各検索条件を上記複数の検索処理部に割り当てる処理を実行し、
上記の各検索処理部は、自己に割り当てられた検索条件に対応したSQLを生成し、データベースサーバに発行する処理と、
データベースサーバから一定量の検索結果データが送信される度に、必要な演算処理を上記の各データ加工処理部に割り当てる処理と、
各データ加工処理部から部分的な加工処理結果データが返される度に、これをメモリに格納すると共に、データベースサーバから送信されたデータをメモリ上から削除する処理と、
データベースサーバからのデータ送信が完了し、部分的な検索結果データに基づく部分的な加工処理結果データが全て揃った時点で、これらを集計して上記検索結果統合処理部に集計結果を出力する処理を実行し、
上記検索結果統合処理部は、各検索処理部から渡された集計結果を集計し、検索結果として出力する処理を実行することを特徴とするデータ利用システム。
【請求項2】
上記検索条件分割処理部は、入力された検索条件が時間的な範囲を含んでいる場合に、これをより短い時間的な範囲に分割することを特徴とする請求項1に記載のデータ利用システム。
【請求項3】
上記検索条件分割処理部は、入力された検索条件が地域的な範囲を含んでいる場合に、これをより狭い地域的な範囲に分割することを特徴とする請求項1に記載のデータ利用システム。
【請求項4】
上記アプリケーションサーバは複数のCPUコアを備えており、
上記の検索条件分割処理部、複数の検索処理部、複数のデータ加工処理部及び検索結果統合処理部は、各CPUコアに割り当てられたスレッドが、スレッドプールに配置されたタスクを順次実行することによって実現されることを特徴とする請求項1〜3の何れかに記載のデータ利用システム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明はデータ利用システムに係り、特に、データベースサーバが管理するテーブルの正規化を追求した結果として、テーブル数の増大やテーブル間の関係の複雑化が生じる場合に備えて、多数のテーブルを管理しているデータベースサーバ側の処理負担を軽減する技術に関する。
【背景技術】
【0002】
巨大流通チェーンのように、大規模な業務システムを構築し、日々運用している企業においては、データベースサーバ(以下「DBサーバ」)が多数のテーブルを管理しており、複数のアプリケーションサーバ(以下「APサーバ」)によって構成されるサブシステム(受発注システム、仕入れシステム、経理システム等)が、上記のテーブルを共同利用する形式をとっている。
【非特許文献1】Webシステム入門/第1回 Webサイトの構成とJ2EEサーバ インターネットURL:http://www.atmarkit.co.jp/fjava/rensai2/websys01/websys01.html 検索日:2010年10月6日
【発明の開示】
【発明が解決しようとする課題】
【0003】
ここで、DBサーバはデータの一元管理が最大の責務であり、このためには重複データの排除、すなわち「正規化」の維持が大原則となる。
しかしながら、正規化を追求するとテーブルの数が増大すると共に、テーブル間の関係も複雑化することから、テーブルを操作するためのSQLの発行数の増大や処理内容の複雑化といった問題が生じ、この結果、DBサーバ側の演算処理の負担が拡大し、応答時間の遅れが生じていた。
これを回避するため、サブシステム毎に必要性の高いデータ項目を組み合わせると共に、独自のビジネスルールを反映させた中間テーブルを生成し、DBサーバに管理させる方法が採られる場合もある。この結果、当該サブシステムから発行されるSQLは確かに簡素化され、DBサーバの演算処理量を低減することはできるが、システム全体としてのデータ一元性を担保するため、DBサーバにはバッチ処理によってデータの変換・更新処理を行う必要性が生じ、今度はデータの不一致やデータ鮮度の低下(タイムラグの発生)という問題が生じてしまう。
【0004】
この発明は、従来のこのような問題を解決するために案出されたものであり、DBサーバ側の演算処理をAPサーバ側で肩代わりすることにより、テーブルの正規化を最大限に追求しつつも、システム全体の処理速度の低下を有効に回避できる技術の実現を目的としている。
【課題を解決するための手段】
【0005】
上記の目的を達成するため、請求項1に記載したデータ利用システムは、複数のテーブルが格納された記憶手段を備えたデータベースサーバと、このデータベースサーバにネットワークを介して接続され、各テーブルに格納されたデータを操作するためのSQLを発行する機能と、取得したデータを加工する機能を備えたアプリケーションサーバとを有するデータ利用システムであって、上記の各テーブルには、キー項目が一つに限定される制約と、Null値、フラグ値及び区分値を格納するためのデータ項目の設定が禁止される制約と、データの更新が禁止される制約が設けられており、上記アプリケーションサーバは、検索条件分割処理部と、複数の検索処理部と、複数のデータ加工処理部と、検索結果統合処理部とを備え、上記検索条件分割処理部は、入力された検索条件を解析して複数の検索条件に分割すると共に、各検索条件を上記複数の検索処理部に割り当てる処理を実行し、上記の各検索処理部は、自己に割り当てられた検索条件に対応したSQLを生成し、データベースサーバに発行する処理と、データベースサーバから一定量の検索結果データが送信される度に、必要な演算処理を上記の各データ加工処理部に割り当てる処理と、各データ加工処理部から部分的な加工処理結果データが返される度に、これをメモリに格納すると共に、データベースサーバから送信されたデータをメモリ上から削除する処理と、データベースサーバからのデータ送信が完了し、部分的な検索結果データに基づく部分的な加工処理結果データが全て揃った時点で、これらを集計して上記検索結果統合処理部に集計結果を出力する処理を実行し、上記検索結果統合処理部は、各検索処理部から渡された集計結果を集計し、検索結果として出力する処理を実行することを特徴としている。
【0006】
請求項2に記載したデータ利用システムは、請求項1のシステムを前提とし、さらに上記検索条件分割処理部が、入力された検索条件が時間的な範囲を含んでいる場合に、これをより短い時間的な範囲に分割することを特徴としている。
【0007】
請求項3に記載したデータ利用システムは、請求項1のシステムを前提とし、さらに上記検索条件分割処理部が、入力された検索条件が地域的な範囲を含んでいる場合に、これをより狭い地域的な範囲に分割することを特徴としている。
【0008】
請求項4に記載したデータ利用システムは、請求項1〜3のシステムを前提とし、さらに上記アプリケーションサーバが複数のCPUコアを備えており、上記の検索条件分割処理部、複数の検索処理部、複数のデータ加工処理部及び検索結果統合処理部は、各CPUコアに割り当てられたスレッドが、スレッドプールに配置されたタスクを順次実行することによって実現されることを特徴としている。
【発明の効果】
【0009】
この発明に係るデータ利用システムの場合、データベースサーバが管理する各テーブルの正規化が極限まで追求され、構造の単純化が実現される一方で、テーブルから抽出したデータの加工処理(ソートやマッチング、コントロールブレイク等)はアプリケーションサーバ側で実行され、データベースサーバはデータの出し入れに専念できるため、テーブル数の増大やテーブル間の関係の複雑化に伴いSQLの発行数が増大しても、データベースサーバ側の負担増を抑制することが可能となる。
【0010】
しかも、アプリケーションサーバにおいては、入力された検索条件が複数に分割され、それぞれ複数の検索処理部を介してデータベースサーバにデータの検索依頼が送信されると共に、データベースサーバから各検索処理部に対して返された検索結果データに対しても、一定量単位で複数のデータ加工処理部による並列処理が実行されるため、データベースサーバから大量のデータが送信される場合であっても、多数のCPUコアを用いることで効率的な処理が可能となる。また、このようにデータベースサーバからの検索結果データが全て揃うまで待機することなく、一定量のデータが揃った時点で部分的な加工処理に移行することにより、データベースサーバ側のDISK/IOによる遅延を緩和することも可能となる。
【0011】
これまで、DNA解析や気象解析のように純粋な演算処理を主体とした科学技術計算と異なり、データベースに蓄積された大量のデータを参照する必要のある業務系処理の場合には、データベースサーバからの応答を待つDISK/IOがボトルネックとなるため、アプリケーションサーバ側のCPUコアの数を増やしたとしても、直ちに処理速度の向上には結びつかないという問題があった。
これに対し、上記のような仕組みをアプリケーションサーバに設けることにより、テーブルの正規化の追求に伴うデータベースサーバ側の負担増を、アプリケーションサーバ側の処理の効率化によってカバーすることが可能となった。
【0012】
フラグ値や区分値のように、特殊なビジネスルールに基づいた値の格納が禁止される結果、データモデルの見通しが良好となり、テスト・データの作成効率が向上するという効果も期待できる。
【発明を実施するための最良の形態】
【0013】
図1及び図2は、この発明に係るデータ利用システム10の全体構成を示すブロック図であり、Webサーバ12と、APサーバ14と、DBサーバ16とを備えている。
DBサーバ16は、DB管理システム17と、複数のテーブル18を備えている。
【0014】
図1は、クライアント端末19から送信された検索リクエストが、Webサーバ12及びAPサーバ14を経由してDBサーバ16に送信される場面での機能構成を表しており、APサーバ14は、検索条件分割処理部20と、複数の検索処理部22を備えている。
【0015】
また、図2はDBサーバ16から検索結果が送信される場面での機能構成を表しており、APサーバ14は、各検索処理部22単位で複数割り当てられたデータ加工処理部24と、検索結果統合処理部26を備えている。
【0016】
APサーバ14内に設けられた上記の検索条件分割処理部20、複数の検索処理部22、複数のデータ加工処理部24、検索結果統合処理部26は、APサーバ14に搭載された多数のCPUコアが、専用のアプリケーションプログラムに従って所定の処理を実行することで実現されるのであるが、この際、OSによって複数のスレッドが起動されて各CPUコアに割り当てられることにより、マルチタスク処理が実行される。
【0017】
図3は、各CPUコア30とスレッド32との対応関係を表しており、各スレッド32にはスレッドプール34が設けられ、そこに配置された複数のタスク36をスレッド32が順次処理していくイメージが描かれている。
この図におけるスレッド32が、図1及び図2に表された検索条件分割処理部20、複数の検索処理部22、複数のデータ加工処理部24、検索結果統合処理部26として機能し、これらの機能構成部が実行する具体的な処理がタスク36に相当する。
【0018】
各スレッド32は、スレッドプール34に蓄積されたタスクを古い順に次々と実行していき、自己のスレッドプール34が空になった場合には、他のスレッド32のスレッドプール34に蓄積されたタスク36を、新しい順に実行していく。
【0019】
つぎに、図4図6のフローチャートに従い、このシステム10における処理手順を説明する。
まず、図4に従い、検索条件分割処理部20による処理手順を説明する。
すなわち、クライアント端末19から送信された検索条件をWebサーバ12経由でAPサーバ14が受信すると(S10)、検索条件分割処理部20は検索条件を解析し、検索条件の内容に応じて複数の検索条件に分割する(S12)。
【0020】
ここで分割の基準となるのは、時間(日、週、月、年等)や地域(都道府県、市町村等)など、検索対象データを論理的に複数に区分できるものが該当する。
例えば、「2010年における全チェーン店の売上を集計する」という検索条件が示された場合に、「2010年1月分の全チェーン店の売上」、「2010年2月の全チェーン店の売上」、「2010年3月の全チェーン店の売上」…というように、年を月単位に12分割することが該当する。
また、各チェーン店の所在地データに着目し、「2010年における東京所在チェーン店の売上」、「2010年における北海道所在チェーン店の売上」、「2010年における沖縄所在チェーン店の売上」…というように、全国を都道府県単位に47分割することも該当する。
もちろん、「2010年1月分の東京所在チェーン店の売上」や「2010年1月の北海道所在チェーン店の売上」のように、月×都道府県単位で564分割することもできる。
【0021】
これらの分割基準は、クライアント端末19から発せられると予測される検索条件や、対象となるデータの量等に鑑みて、事前に幾つかの分割パターンがプログラム設計者によって策定され、検索条件分割処理部20を実現するためのプログラム中にコーディングされている。
【0022】
ここでは、都道府県単位で47分割されたものとして話を進める。
すなわち、検索条件分割処理部20は、47個の検索処理部22に対して、上記都道府県単位の検索処理を割り当てる(S14)。
【0023】
つぎに図5に従い、各検索処理部22における処理手順を説明する。
まず検索処理部22は、自己に割り当てられた検索処理に必要な都道府県を指定したSQLを自動生成し、DBサーバ16に対して発行する(S20)。
【0024】
ここで検索処理部22は、DBサーバ16から全ての検索結果データが送信されるのを待つことなく、予め設定された一定量(例えばレコード1,000件分)のデータが送信された時点で(S22/Y)、必要な演算処理を複数のデータ加工処理部24に割り当てる(S24)。
この結果、一部のデータ加工処理部24は、受信データをキー項目でソートすると共に、キー項目の値に基づいて複数のデータに分割する処理を実行する。また、他のデータ加工処理部24は、分割されたデータに基づく値の集計処理や、当該値を指定したデータの抽出をDBサーバ16に依頼する処理などを実行する。
受信データの分割手法については後に例示するが、検索条件の内容に応じて論理的に分割する検索条件分割処理部20による分割と異なり、受信データの値や分量に応じた分割手法となる。データ加工処理部24による具体的な処理についても、後に例示する。
【0025】
検索処理部22は、データ加工処理部24から処理結果データが返信された時点で(S26/Y)、この単位データ量当たりの処理結果をメモリに格納すると共に、DBサーバ16から送信されたデータをメモリ上から削除する(S28)。
各検索処理部22は、DBサーバ16からのデータ送信が完了するまで、DBサーバ16から送信されるデータが一定量に達する度にS24〜S28の処理を繰り返す(S30/N、S22/Y)。
そして、DBサーバ16からのデータ送信が完了し、S24〜S28の最後の処理が完了した時点で(S30/Y)、検索処理部22はこれまでの部分的な処理結果の集計値を集計し(S32)、検索結果統合処理部26に集計結果を出力する(S34)。
【0026】
つぎに図6に従い、検索結果統合処理部26による処理手順を説明する。
まず検索結果統合処理部26は、各検索処理部22から集計結果が送信される度に、全ての検索処理部22からの集計結果が揃ったか否かをチェックし(S40、S42)、全てが揃った段階で全検索処理部の集計結果を集計する(S44)。
そして、その最終的な集計結果をWebサーバ12に送信する(S46)。
Webサーバ12は、この集計結果を含むWebファイルを生成し、クライアント端末19に送信することになる。
【0027】
つぎに、図7を参照しながら、このシステム10のより具体的な処理内容を説明する。
図7は、DBサーバ16に格納された各テーブル18を示しており、「顧客ID(主キー)」及び「地域」のデータ項目を備えた顧客管理テーブル40と、「予約ID(主キー)」、「店ID」、「顧客ID(外部キー)」、「金額」及び「予約年月日」のデータ項目を備えた予約管理テーブル42と、「予約ID(主キー/外部キー)」及び「売上年月日」のデータ項目を備えた売上管理テーブル44と、「予約ID(主キー/外部キー)」及び「予約取消年月日」のデータ項目を備えた予約取消管理テーブル46と、「請求ID(主キー)」、「請求年月日」及び「予約ID(外部キー)」のデータ項目を備えた請求管理テーブル48とによって、各店舗の売り上げが管理されている。
【0028】
上記の各テーブル18には、以下の(1)〜(3)の制約が予め課せられている。
(1)キー項目は一つに限定される。
したがって、複数の項目の組合せによってキー項目を構成すること(複合キー)は、禁止される。
【0029】
(2)各テーブルにはレコードの追加のみが許容され、既存レコードの値の更新は禁止される。
したがって、値に変更が生じた場合など、発生タイミングの異なる情報は別テーブルに格納されることとなる。
【0030】
(3)各テーブルのカラムには、NULL値禁止制約、フラグ値禁止制約、区分値禁止制約が課せられる。
まず「NULL値禁止制約」とは、データ項目の値としてNULL(値なし)を充填することが禁止されることを意味しており、このようなNULL値の充填を想定したデータ項目の設定自体が許容されないことになる。
つぎに「フラグ値禁止制約」とは、データ項目の値としてフラグ値(「1/0」、「ON/OFF」、「TRUE/FALSE」等の2値データ)を充填することが禁止されることを意味しており、このようなフラグ値の充填を想定したデータ項目の設定自体が許容されないことになる。
「区分値禁止制約」とは、データ項目の値として区分値(「1:正社員」、「2:パート」、「3:アルバイト」等)を充填することが禁止されることを意味しており、このような区分値の充填を想定したデータ項目の設定自体が許容されないことになる。
【0031】
これらの制約ルールは、新規テーブルの設計時やSQL発行時に、DB管理システム17によって適否がチェックされ、制約ルールに違反する処理の実行が拒絶されることにより、その実効性が担保される。
【0032】
図7より明らかなように、各テーブルは単一のデータ項目によって主キー(PK)が構成されている。
また、「予約取消」に関するデータも、通常であれば予約管理テーブル42において「予約取消フラグ」等のデータ項目が設けられ、各レコードに「1/0」等のフラグ値を充填することで状態が管理されるところであるが、予約取消管理テーブル46を予約管理テーブル42とは別個に設けることにより、予約取消の状態管理がなされている。すなわち、この予約取消管理テーブル46に登録された予約IDが「予約取消」状態にあることとなり、レコードの有無によって予約取消の有無が表現されている。
【0033】
各テーブルには上記(2)の制約(値の更新禁止)が課せられているため、例えばある顧客の「地域」に変動が生じた場合でも、顧客管理テーブル40における該当レコードの「地域」の値が書き換えられることはない。
図示は省略したが、このような場合には例えば「顧客ID」、「変更地域」、「変更年月日」等のデータ項目を備えた「顧客地域変更管理テーブル」が新たに設けられて、当該顧客の顧客ID、変更後の地域、変更年月日が格納される。
【0034】
この結果、顧客の地域別に売上を集計する必要が生じた場合、APサーバ12側では顧客管理テーブル40を参照して各顧客の地域情報を取得した後、顧客地域変更管理テーブルを参照して地域変更の生じた顧客を特定し、変更後の地域に差し替える処理を実行することになる。
【0035】
このようなテーブル群がDBサーバ16において管理されている場合に、クライアント端末19から「A店の8月分の請求額を地域毎に集計せよ」という内容の検索リクエストが送信された場合、検索条件分割処理部20は、まず「8月=31日間」というカレンダー情報に従い、「8月1日分」、「8月2日分」、「8月3日分」…「8月31日分」というように、検索条件を31分割する。
【0036】
つぎに検索処理部22は、これらの分割された検索条件(「A店の8月1日分の請求額を地域毎に集計せよ」等)を31個の検索処理部22に割り当てる。
【0037】
これを受けた各検索処理部22は、自己に割り当てられた請求日を指定した、請求管理テーブルから請求データを取得するためのSQLを生成し、DBサーバ16に発行する。
そして、DBサーバ16から該当日の請求年月日を備えた請求データが送信されると、検索処理部22は一定量のデータ(例えば1,000件のレコード相当分)単位で受信データを分割し、複数のデータ加工処理部24に以下の処理を割り当てる。
(1)各請求データの「予約ID」を指定したSQLを生成してDBサーバ16に発行し、「予約管理テーブル」から対応の予約データを取得する。
(2)送信された予約データの中で、該当店舗の「店ID」を有するデータのみを抽出し、他の店IDのデータを除外する。
(3)各予約データの「顧客ID」を指定したSQLを生成してDBサーバ16に発行し、顧客管理テーブル40から対応の顧客データを取得する。
(4)顧客データの「地域」毎に、予約データ中の「金額」の値を集計する。
これら(1)〜(4)の処理は、具体的にはタスク36として各データ加工処理部24のスレッドプール34に配置される。
【0038】
検索処理部22は、データ加工処理部24から上がってきた1,OOO件単位の処理結果データをメモリに格納すると共に、DBサーバ16から送信されたデータをメモリ上から削除する。そして、1日分の処理結果データが揃った時点で、全処理結果データを集計する。この集計結果は、検索結果統合処理部26に出力される。
検索結果統合処理部26は、全検索処理部22から8月1日〜8月31日までの全集計結果が集まった時点でこれらを集計し、Webサーバ12に出力する。
【0039】
このシステム10の場合、DBサーバ16からのフェッチが完了するまでAPサーバ14が待つことはなく、一定量のデータを受信する度に複数のデータ加工処理部24による処理が開始される仕組みであるため、DBサーバ16のDISK/IOによるボトルネックを解消することができる。
また、APサーバ14における部分的な集計が完了する度に、DBサーバ16から送信されたデータが占めていたメモリが解放され、データ量が格段に小さな集計結果データのみがメモリに格納される仕組みであるため、APサーバ14のメモリが大きなデータに占拠され続けることを回避できる。
【0040】
ここで、図8を参照して、DBサーバ16から送信された一定量単位のデータに対する分割手順について説明する。
まず一のデータ加工処理部24は、DBサーバ16から送信されたデータを2等分する位置を探索し、そこから前方不一致検索によってキー項目の変わり目を探しだし、データを2分割させる。
例えば、(a)のデータ列はキー項目の値として1〜6があるが、データ加工処理部24は「3」と「4」との間を境にこれを2分割させ、(b)及び(c)のデータ列を生成する。
【0041】
つぎに、他のデータ加工処理部24は、(b)のデータ列を「2」と「3」との間で2分割させ、(d)及び(e)のデータ列を生成する。
この時点で、(e)のデータ列のキー項目の値は「3」のみとなるため、データ加工処理部24はそれ以上の分割を停止する。この(e)のデータ列については、他のデータ加工処理部24によって必要な計算処理等が実行される。
【0042】
これに対し、(d)のデータ列の場合には「1」と「2」の間で2分割可能であるため、データ加工処理部24はここでデータ列を2分割させ、(h)及び(i)のデータ列を生成する。
この時点で、(h)のデータ列のキー項目の値は「1」のみとなるため、データ加工処理部24はそれ以上の分割を停止する。この(h)のデータ列については、他のデータ加工処理部24によって必要な計算処理等が実行される。
同様に、(i)のデータ列のキー項目の値は「2」のみとなるため、データ加工処理部24はそれ以上の分割を停止する。この(i)のデータ列については、他のデータ加工処理部24によって必要な計算処理等が実行される。
【0043】
一方、(c)のデータ列については、他のデータ加工処理部24が「5」と「6」との間で2分割させ、(f)及び(g)のデータ列を生成する。
この時点で、(g)のデータ列のキー項目の値は「6」のみとなるため、データ加工処理部24はそれ以上の分割を停止する。この(g)のデータ列については、他のデータ加工処理部24によって必要な計算処理等が実行される。
【0044】
これに対し、(f)のデータ列の場合には「4」と「5」の間で2分割可能であるため、データ加工処理部24はここでデータ列を2分割させ、(j)及び(k)のデータ列を生成する。
この時点で、(j)のデータ列のキー項目の値は「4」のみとなるため、データ加工処理部24はそれ以上の分割を停止する。この(j)のデータ列については、他のデータ加工処理部24によって必要な計算処理等が実行される。
同様に、(k)のデータ列のキー項目の値は「5」のみとなるため、データ加工処理部24はそれ以上の分割を停止する。この(k)のデータ列については、他のデータ加工処理部24によって必要な計算処理等が実行される。
【0045】
図8の例では、説明の便宜上簡略化されたデータ列を例示したが、各データ加工処理部24は、実際にはDBサーバ16から送信された一定量(例えばレコード1,000件分)のデータ列に対して、ソートやマッチング、コントロールブレイクの都度、上記の分割処理を実行する。
この結果、大量のデータに対して複数のデータ加工処理部24による並列処理が可能となり、APサーバ14に複数搭載されたCPUコアの有効利用が可能となる。
このデータ加工処理部24による分割処理に際し、分割の回数(階層の深さ)に一定の限度を設けることもできる。
【0046】
上記のように、データ加工処理部24は検索処理部22から渡されたデータ列の特定のデータ項目の値を指定してDBサーバ16にSQLを発行し、検索処理を依頼する場合があるため、必然的にDBサーバ16からの応答待ち(I/O Wait)が発生することになる。
【0047】
そこで図9に示すように、各スレッド32にI/O Waitを伴う処理用の第1のスレッドプール50と、I/O Waitを伴わない処理用の第2のスレッドプール52を設けることが望ましい。
この結果、第1のスレッドプール50に配置されたタスク36の実行によってI/O Waitが発生した場合、スレッド32は第2のスレッドプール52に配置されたタスク36を待ち時間の間に処理することが可能となり、処理の効率化を図ることが可能となる。
【0048】
この発明にあっては、以上のようにDBサーバ16が管理する各テーブル18の構造が単純化される分、テーブルの数が増え、SQLの発行数自体は増大するが、演算処理は多数のCPUコアを用いた並列処理によって高速化されたAPサーバ側で行われ、DBサーバ16はデータの管理(格納と取り出し)に専念でき、データの更新処理からも解放されるため、DBサーバ14の負担は大幅に軽減される。この結果、テーブルの正規化の追求に伴いDBサーバ16側の処理速度が低下することを、有効に回避できる。
【0049】
また、テーブルの数が増大する分、これを操作するAPサーバ14側のアプリケーションプログラムの開発負担が増大し、バグ発生の危険性が高まるという懸念が生じる。
これに対しては、各テーブル18毎に固有の型(クラス)を予め専用のツールを用いて自動生成しておき、APサーバ14側のアプリケーションプログラムをコーディングする際に各テーブル固有の型を指定するようにすることで、コンパイル時に型チェック(静的チェック)が機能するようになり、バグを事前に排除することが可能となる。
【0050】
図10は、この発明に係るプログラム開発支援システム60の全体構成を示すものであり、テーブル設定部62と、型生成部64と、型格納部66と、コンパイラ68とを備えている。これらの中、テーブル設定部62、型生成部64、コンパイラ68は、コンピュータのCPUが、専用のアプリケーションプログラムに従って所定の処理を実行することで実現される。また、型格納部66は、同コンピュータのハードディスク内に設けられている。
【0051】
このプログラム開発支援システム60には、ネットワークを介してDBサーバ16及び開発端末70が接続されている。
DBサーバ16は、上記と同様、DB管理システム17と、複数のテーブル18(a)〜18(c)を備えている。
また、開発端末70はPC等のコンピュータよりなり、OSやWebブラウザ、テキストエディタ等のプログラムを搭載している。
【0052】
まず開発者は、開発端末70からテーブル設定部62にアクセスし、新規テーブルの作成をリクエストする。この結果、テーブル設定画面が開発端末70に送信され、Webブラウザ上に表示される(図示省略)。
開発者は、このテーブル設定画面上で、テーブルの名称、データ項目名、データ型、桁数を指定し、テーブル設定部62に送信する。
【0053】
テーブル設定部62は、送信された設定データをDBサーバ16に送信し、新規テーブルの生成を依頼する。
これを受けたDB管理システム17は、この設定データに従って新規のテーブルをDBサーバ16の記憶装置内に生成する。
【0054】
図11は、DBサーバ16の記憶装置内に格納されているテーブルを例示するものであり、商品テーブル18(a)と、承認済み商品テーブル18(b)と、停止商品テーブル18(c)とが挙げられている。
【0055】
これらのテーブルは、図11の(α)に示すように、従来であれば商品ID、商品名、適用開始日、適用終了日を備えた単一のテーブルとして構成されていたものを、商品ID及び商品名のデータ項目を備えた商品テーブル18(a)と、商品ID及び適用開始日のデータ項目を備えた承認済み商品テーブル18(b)と、商品ID及び適用終了日のデータ項目を備えた停止商品テーブル18(c)とに分割したものである。
【0056】
すなわち、商品テーブル18(a)には申請がなされたすべての商品の商品ID及び商品名が格納されているのに対し、承認済み商品テーブル18(b)には申請された商品中で承認が下りた商品の商品ID及び適用開始日のみが格納されている。この承認済み商品テーブル18(b)への商品IDの登録の有無によって、当該商品の承認の事実が表現されている。
同様に、停止商品テーブル18(c)には承認された商品中で承認が停止された商品のID及び適用終了日のみが格納されている。この停止商品テーブル18(c)への商品IDの登録の有無によって、当該商品の承認停止の事実が表現されている。
【0057】
もちろん、商品テーブル18(a)、承認済み商品テーブル18(b)、停止商品テーブル18(c)のそれぞれには、以下の(1)〜(3)の制約が予め課せられている。
(1)キー項目は一つに限定される。
(2)各テーブルにはレコードの追加のみが許容され、既存レコードの値の更新は禁止される。
(3)各テーブルのカラムには、NULL値禁止制約、フラグ値禁止制約、区分値禁止制約が課せられる。
【0058】
つぎに、型生成部64が起動し、テーブル設定部62から各テーブルの設定データを受け取り、DBサーバ16内に生成された各テーブルに対応したクラス(型)を生成する。
図10においては、商品テーブル18(a)に対応した「Itemクラス(型)」と、承認済み商品テーブル18(b)に対応した「ItemApprovedクラス(型)」と、停止商品テーブル18(c)に対応した「ItemStoppedクラス(型)」とが生成され、開発支援システム10の型格納部66内に登録されている様子が描かれている。
これらクラスの実体は、対応テーブルの名称、データ項目、データ型、桁数等が記述されたプログラムである。
【0059】
つぎに開発者は、開発端末70上でAPサーバ14に搭載するためのアプリケーションプログラムをコーディングすることになるが、テーブル操作に係るコードを記述する際、開発者は各テーブルの型を指定した上で具体的な処理を記述する。
【0060】
図12はその一例を示すものであり、(1)の行においては「Itemクラスに対応したテーブル(商品テーブル18(a))から商品名(items)を抽出し、商品ID(ItemId)順にソートする」ことが規定されている。
また、(2)の行においては「ItemApprovedクラスに対応したテーブル(承認済み商品テーブル18(b))から適用開始日(approveds)を抽出し、商品ID(ItemId)順にソートする」ことが規定されている。
(3)の行においては「ItemStoppedクラスに対応したテーブル(停止商品テーブル18(c))から適用終了日(stopped)を抽出し、商品ID(ItemId)順にソートする」ことが規定されている。
(4)の行においては、「承認済み商品(approvedItems)は、適用開始日(approveds)が付与された商品であり、これはItemクラスに属する」ことが規定されている。
(5)の行においては、「有効商品(validItems)は、承認済み商品(approvedItems)の中で適用終了日(stopped)が付与されていない商品であり、これはItemクラスに属する」ことが規定されている。
【0061】
開発者は、完成したソースファイルを開発端末70からプログラム開発支援システム60に送信し、そのコンパイルを要求する。
図12に示したように、ソースコードの各行にはクラスが指定されているため、コンパイラ68がソースコードをコンパイルするに際し、その記述内容と対応クラスの定義内容とを比較し、矛盾の有無を判定することができる。
例えば(2)の行において、仮に「ItemApproved[] stopped = select & sort by ItemId」と記述されていた場合、コンパイラ68は「ItemApprovedクラス」中には「stopped」のデータ項目が含まれていないことから、「コンパイルエラー」のメッセージを開発端末70に送信する。
この結果、開発者はコーディングの段階でバグを潰すことが可能となる。
【0062】
元々SQLには型チェックの機能が実装されていないため、SQLを用いてDBサーバ16側に演算処理させた場合にはSQL文にミスがあっても事前に取り除くことはできないが、APサーバ16上のアプリケーションプログラムの開発時には上記のような型チェックを利用することができるため、テーブル18から抽出したデータの加工処理は、可能な限りAPサーバ16側で実行するように運用することが望ましいといえる。
【図面の簡単な説明】
【0063】
図1】この発明に係るデータ利用システムの、検索リクエストがDBサーバに送信される場面での機能構成を示すブロック図である。
図2】この発明に係るデータ利用システムの、DBサーバから検索結果が送信される場面での機能構成を示すブロック図である。
図3】CPUコアとスレッドとの対応関係を示す模式図である。
図4】検索条件分割処理部による処理手順を示すフローチャートである。
図5】検索処理部による処理手順を示すフローチャートである。
図6】検索結果統合処理部による処理手順を示すフローチャートである。
図7】DBサーバに格納されたテーブル群を示す図である。
図8】データ加工処理部によるデータ分割の手順を示す模式図である。
図9】スレッド毎に複数のスレッドプールを設けた例を示す模式図である。
図10】この発明に係るプログラム開発支援システムの機能構成を示すブロック図である。
図11】DBサーバに格納されたテーブルの具体例を示す図である。
図12】ソースコードの一例を示す図である。
【符号の説明】
【0064】
10 データ利用システム
12 Webサーバ
14 APサーバ
16 DBサーバ
17 DB管理システム
18 テーブル
19 クライアント端末
20 検索条件分割処理部
22 検索処理部
24 データ加工処理部
26 検索結果統合処理部
30 CPUコア
32 スレッド
34 スレッドプール
36 タスク
40 顧客管理テーブル
42 予約管理テーブル
44 売上管理テーブル
46 予約取消管理テーブル
48 請求管理テーブル
50 第1のスレッドプール
52 第2のスレッドプール
60 プログラム開発支援システム
62 テーブル設定部
64 型生成部
66 型格納部
68 コンパイラ
70 開発端末
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12