特許第6550448号(P6550448)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ ヤフー株式会社の特許一覧

特許6550448データ管理装置、データ管理方法、およびプログラム
<>
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000002
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000003
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000004
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000005
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000006
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000007
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000008
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000009
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000010
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000011
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000012
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000013
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000014
  • 特許6550448-データ管理装置、データ管理方法、およびプログラム 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6550448
(24)【登録日】2019年7月5日
(45)【発行日】2019年7月24日
(54)【発明の名称】データ管理装置、データ管理方法、およびプログラム
(51)【国際特許分類】
   G06F 16/13 20190101AFI20190711BHJP
   G06F 16/22 20190101ALI20190711BHJP
【FI】
   G06F16/13 200
   G06F16/22
【請求項の数】10
【全頁数】15
(21)【出願番号】特願2017-242030(P2017-242030)
(22)【出願日】2017年12月18日
(65)【公開番号】特開2019-109693(P2019-109693A)
(43)【公開日】2019年7月4日
【審査請求日】2018年10月10日
【新規性喪失の例外の表示】特許法第30条第2項適用 平成29年7月3日”https://github.com/yahoojapan/multiple−dimension−spread/commits/master?after=4c96e0493556539c28ae92a9fffabc8a30f21454+69”
【早期審査対象出願】
(73)【特許権者】
【識別番号】500257300
【氏名又は名称】ヤフー株式会社
(74)【代理人】
【識別番号】100106909
【弁理士】
【氏名又は名称】棚井 澄雄
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100154852
【弁理士】
【氏名又は名称】酒井 太一
(74)【代理人】
【識別番号】100174986
【弁理士】
【氏名又は名称】林 康旨
(72)【発明者】
【氏名】鈴木 周一
(72)【発明者】
【氏名】山田 洸二
【審査官】 田名網 忠雄
(56)【参考文献】
【文献】 特開2016−099647(JP,A)
【文献】 特開2017−167917(JP,A)
【文献】 米国特許出願公開第2005/0050092(US,A1)
【文献】 特表2016−519810(JP,A)
【文献】 特開2008−243193(JP,A)
【文献】 加藤 慶信 外4名,軽い!速い! ビッグデータ 分析システムの作り方,日経SYSTEMS,日本,日経BP社 Nikkei Business Publications,Inc.,2013年 9月26日,第246号/2013年10月号,p.42-p.59
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00−16/958
(57)【特許請求の範囲】
【請求項1】
データの提供元に対応するデータフォーマットで作成された複数のレコードであって、データ項目とデータ本体とが対応付けられた複数のレコードをそれぞれ解釈し、一つの共通形式のレコードに変換する解釈部と、
前記データ項目ごとに、前記データ本体と前記共通形式のレコードを特定可能なインデックス情報とを対応付けたデータセットを、カラムデータとして記憶部に記憶させる変換部と、を備え、
前記解釈部により変換される共通形式のレコードは、前記カラムデータに対応するデータ項目のうち一部を含まない場合があり、
前記変換部は、あるデータ項目について、前記インデックス情報が列方向に連続しない場合でも、前記連続しないインデックス情報をそれぞれ含む二つのデータセットの間に空の記憶領域を設けない、
データ管理装置。
【請求項2】
前記変換部は、前記解釈部により変換された共通形式のレコードに含まれるデータ項目が、前記カラムデータに対応していない場合、新たなデータ項目に対応するカラムデータを設定する、
請求項1記載のデータ管理装置。
【請求項3】
前記変換部は、前記解釈部により変換された共通形式のレコードが階層構造を含む場合、前記階層構造における下位の階層のレコードから作成された前記データセットをカラムデータとして前記記憶部に格納し、前記下位の階層のレコードに対して上位の階層のレコードから作成された前記データセットに、前記下位の階層のレコードから作成された前記データセットの格納場所を示す情報を埋め込んでカラムデータとして前記記憶部に記憶させる、
請求項1または2記載のデータ管理装置。
【請求項4】
前記変換部は、それぞれが互いに異なる数値型のデータ形式で定義された同じデータ項目に対応する二以上のカラムデータに関して、所望のタイミングで前記数値型のうち桁の多い方のデータ形式に揃えて一つのカラムデータを再構成する、
請求項1から3のうちいずれか1項記載のデータ管理装置。
【請求項5】
少なくとも前記カラムデータに含まれるデータ本体を、入力されたデータ要求に含まれるデータ項目ごとに前記記憶部から読み出して出力するデータ利用者インターフェースを更に備える、
請求項1から4のうちいずれか1項記載のデータ管理装置。
【請求項6】
前記データ利用者インターフェースは、指定されたデータ項目を含まないレコードに関しては、当該データ項目に対応するデータを、該当するデータが存在しないことを示す任意の形態のデータで埋める、
請求項記載のデータ管理装置。
【請求項7】
前記データ利用者インターフェースは、指定されたデータ項目が、前記カラムデータとして設定されていないデータ項目である場合、当該データ項目についてのデータを全て、該当するデータが存在しないことを示す任意の形態のデータで埋める、
請求項5または6記載のデータ管理装置。
【請求項8】
前記データ利用者インターフェースは、所定のデータ項目におけるデータ本体が設定条件を満たすレコードを特定可能な情報を前記記憶部から読み出す要求を受け付け、前記所定のデータ項目のカラムデータに含まれるデータセットのデータ本体を順に検索し、データ本体が設定条件を満たすレコードを特定可能な情報を出力する、
請求項5から7のうちいずれか1項記載のデータ管理装置。
【請求項9】
コンピュータが、
データの提供元に対応するデータフォーマットで作成された複数のレコードであって、データ項目とデータ本体とが対応付けられた複数のレコードをそれぞれ解釈し、一つの共通形式のレコードに変換し、
前記データ項目ごとに、前記データ本体と前記共通形式のレコードを特定可能なインデックス情報とを対応付けたデータセットを、カラムデータとして記憶部に記憶させ、
前記変換される共通形式のレコードは、前記カラムデータに対応するデータ項目のうち一部を含まない場合があり、
前記コンピュータは、
あるデータ項目について、前記インデックス情報が列方向に連続しない場合でも、前記連続しないインデックス情報をそれぞれ含む二つのデータセットの間に空の記憶領域を設けない、
データ管理方法。
【請求項10】
コンピュータに、
データの提供元に対応するデータフォーマットで作成された複数のレコードであって、データ項目とデータ本体とが対応付けられた複数のレコードをそれぞれ解釈し、一つの共通形式のレコードに変換させ、
前記データ項目ごとに、前記データ本体と前記共通形式のレコードを特定可能なインデックス情報とを対応付けたデータセットを、カラムデータとして記憶部に記憶させる処理を行わせ、
前記変換される共通形式のレコードは、前記カラムデータに対応するデータ項目のうち一部を含まない場合があり、
前記コンピュータに、
あるデータ項目について、前記インデックス情報が列方向に連続しない場合でも、前記連続しないインデックス情報をそれぞれ含む二つのデータセットの間に空の記憶領域を設けさせない、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ管理装置、データ管理方法、およびプログラムに関する。
【背景技術】
【0002】
従来、中国、日本、および韓国の言語のための名前を検出する方法が知られている(特許文献1参照)。この方法では、構造化されたデータを扱っている。
【0003】
ところで、データベースにおけるデータ構造には、行指向型のデータ構造と列指向型のデータ構造がある。行指向型のデータ構造とは、ひとつのレコードを、ひとまとまりの論理構造として保持するデータ構造である。これに対し、列指向型のデータ構造が知られている。列指向型のデータ構造とは、同じインデックス(ユーザの属性データであれば、名前、年齢、性別といったもの)に対応するデータを、ひとまとまりの論理構造として保持するデータ構造である。論理構造とは、データを検索する際に使用される、キー、LBA(Logical Block Addressing)、論物変換テーブル上のラベル、その他の論理的な情報をいう。行指向型のデータ構造は、データの追加や削除などが容易であるのに対し、列指向型のデータ構造は、インデックスごとの統計処理に向いているといった違いがある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2013−109364号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ここで、行指向型のデータ構造を扱うJSONなどの機能では、データのツリー構造を自動生成することができるが、ネットワーク、記憶装置、ソフトウェア処理の面でコストが大きい。特に、列指向型のデータ構造を有するデータベースから統計処理のためのデータを読み出す際の処理時間は長くなってしまう。
【0006】
一方、列指向型のデータ構造でデータを格納した場合、採用され得る全てのインデックスの管理と、データの追加や削除などが困難である。特に、Stream形式でデータが入力される場合、レコードごとにデータを処理することが想定されるが、レコードごとの処理から直接的に列指向型に書き込むことはできない。また、列指向型においては、書き込み失敗時の管理や重複排除を行う有効な方法が開発されていない。
【0007】
本発明は、このような事情を考慮してなされたものであり、非構造的な入力データについて列志向型としての利用を可能にしつつ、入力レコードの特定も容易に行うことができるデータ管理装置、データ管理方法、およびプログラムを提供することを目的の一つとする。
【課題を解決するための手段】
【0008】
本発明の一態様は、入力されたレコードを解釈し、データ項目とデータ本体との対応関係が認識可能な抽象表現に変換する解釈部と、前記データ項目ごとに、前記データ本体と前記レコードを特定可能なインデックス情報とを対応付けたデータセットを、カラムデータとして記憶部に記憶させる変換部と、を備えるデータ管理装置である。
【発明の効果】
【0009】
本発明の一態様によれば、非構造的な入力データについて列志向型としての利用を可能にしつつ、入力レコードの特定も容易に行うことことができる。
【図面の簡単な説明】
【0010】
図1】jsonフォーマットによるログの一例を示す図である。
図2図1のログを木構造で表現した図である。
図3】jsonフォーマットによるログの他の一例を示す図である。
図4図3のログを木構造で表現した図である。
図5】カラムナーファイルのデータを木構造で表現した図である。
図6】データ管理装置の一例であるデータベースサーバ100の使用環境と構成の一例を示す図である。
図7】解釈部112の機能について説明するための図である。
図8】変換部114の機能について説明するための図(その1)である。
図9】変換部114の機能について説明するための図(その2)である。
図10】変換部114により実行される処理の流れの一例を示すフローチャートである。
図11】変換部114のキャスト機能について説明するための図である。
図12】変換部114のデータ分割機能について説明するための図である。
図13】データ利用者インターフェース120による出力データのイメージを示す図である。
図14】データ利用者インターフェース120により実行される処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、図面を参照し、本発明のデータ管理装置、データ管理方法、およびプログラムの実施形態について説明する。データ管理装置は、クライアントから受信したデータを記憶装置に保管すると共に、データ送信元のクライアント、或いは他のクライアントからの要求に応じたデータを記憶装置から読み出して提供する装置である。データ管理装置をDBMS(データベース管理システム)と称してもよい。クライアントには、エンドユーザの使用する端末装置において動作するアプリケーションプログラムと協調して動作するアプリケーションサーバ(以下、フロントエンドサーバと称する)、蓄積されたデータを統計データなどとして利用するデータ利用者サーバなどが含まれる。
【0012】
先に、本発明の概念的側面について説明する。近年のHadoopはhiveやprestoに代表される"SQL on Hadoop"でRDB的にhdfsにアクセスすることが主流であり、過去に言われていた「非構造な大量のデータ」のファイルを直接扱うケースはまれになってきた。一方、格納されるデータは、取得時には非構造な「ログ」であることがほとんどである。そこで、多くの場合「規則性のある非構造データ」としてデータを取得・加工することになる。この、「規則性のある非構造データ」の代表がjsonやxmlであり、これは「ネストを含むkey value形式」で表現でき、これは木構造として見ることができる。図1は、jsonフォーマットによるログの一例を示す図であり、図2図1のログを木構造で表現した図である。木構造による表現は「ネストを含むkey value形式」の抽象化に適している。図3は、jsonフォーマットによるログの他の一例を示す図であり、図4図3のログを木構造で表現した図である。
【0013】
図4で示すように、「ネストを含むkeyvalue」は(x, z)平面で、配列に関してはy方向に次元を拡張する事が可能であり、多次元空間での木構造は「ネストを含むkeyvalue形式」、すなわちschemaを表現するのに適している事がわかる。この「多次元空間での木構造」をデータフォーマット(json, xml, avro, message pack等)から切り離して抽象化したオブジェクトにしたものが「schemaobject」である。
【0014】
一方、Hadoopに代表される分散型ストレージは、当初は大量の非構造データに対し高スループット高レイテンシでアクセスすることを主眼に設計・開発されたが、近年では、高スループットかつ低レイテンシを実現するために、データを構造化して配置するケースが増えてきている。hdfs上に構造化する際はカラムナーと呼ばれる、RDB的なデータを永続化するファイルフォーマットが一般的であり、代表的なものとしてhive ORC file、apache parquetがある。カラムナーファイルのデータを木構造で表現すると、図5に示すような「root直下のみの階層しかない2次元木」で描くことができる。図5は、カラムナーファイルのデータを木構造で表現した図である。
【0015】
カラムナーファイルフォーマットの利点は、「カラム毎にアクセスすることによる省コスト可」であり、メモリ・CPU・IOどの観点でも、Hadoopで馴染みのある他の非構造データ用のファイルフォーマットを凌駕する。一方で、カラムナーファイルには「データに構造化を強制する」という弱点がある。前述のとおり、データは取得時には非構造な「ログ」であり、構造化しようにも「多次元的な木構造」という高度な表現は不可能である。
【0016】
この問題を解決するのが、本発明で採用する方式である。これは、多次元的な(木構造で言うと深さ方向の)広がりをもつデータを永続化することができるファイルフォーマットである。前述したschemaobjectをそのまま記述する形式を取るので、「ネストを含むkey valueの配列」という表現力を保ったままデータを保持することができる。
【0017】
一般に、データのカラムナフォーマットの弱点は「データの構造化」の部分であり、多次元的なデータを二次元へ次元圧縮するロジックと処理をどこかで実装する必要がでてきてしまい、それが俗にいう「スキーマ」である。スキーマの管理や変更には大きなコストが伴う。本発明の方式では、次元圧縮処理が不要であるため、データの保存においては、この「スキーマ問題」から解放される。また、カラムナファイルでは構造上不可能な、配列やStruct型の「特定の値」へのアクセスも、そのカラムを全展開することなく木の探索としてアクセスできる点でも大きな利点がある。
【0018】
以下、具体的な構成および機能について説明する。図6は、データ管理装置の一例であるデータベースサーバ100の使用環境と構成の一例を示す図である。エンドユーザの使用する一以上の端末装置10は、フロントエンドサーバ20と通信する。端末装置10では、アプリケーションプログラムが動作し、アプリケーションプログラムの実行に必要なデータをフロントエンドサーバ20との間で送受信する。フロントエンドサーバ20は、端末装置10から取得したデータのうち保存が必要なデータを、プロキシサーバ30を介してデータベースサーバ100に送信して保管させる。また、フロントエンドサーバ20は、アプリケーションプログラムの実行に必要なデータをデータベースサーバ100から読み出し、端末装置10に送信する。このような、一以上の端末装置10とフロントエンドサーバ20との組み合わせが複数存在する。それぞれのフロントエンドサーバ20は、JSON(JavaScript(登録商標) Object Notation)、MySQLなどの任意の形式で、データベースサーバ100に対してデータの書き込み要求または読み出し要求を行う。
【0019】
一方、データ利用者サーバ50は、フロントエンドサーバ20から収集されたデータのうち、利用規約によって統計処理などに利用することが許可されているデータを、データベースサーバ100から取得する。なお、フロントエンドサーバ20とデータ利用者サーバ50の区別は厳密なものである必要はなく、フロントエンドサーバ20の一部がデータ利用者サーバ50として動作することがあってもよい。また、データ利用者サーバ50は、プロキシサーバ30を介してデータベースサーバ100と通信してもよい。図6に示す各装置は、インターネット、WAN(Wide Area Network)、LAN(Local Area Network)などのネットワークを介して相互に通信可能に接続されている。
【0020】
データベースサーバ100は、例えば、図示しないNIC(Network Interface Card)などの通信インターフェースの他、フロントエンドインターフェース110と、データ利用者インターフェース120と、記憶部150とを備える。フロントエンドインターフェース110およびデータ利用者インターフェース120は、それぞれ、CPU(Central Processing Unit)などのプロセッサがプログラム(ソフトウェア)を実行することにより実現される。また、これらの機能部のうち一方または双方は、LSI(Large Scale Integration)やASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などのハードウェアにより実現されてもよいし、ソフトウェアとハードウェアが協働することで実現されてもよい。
【0021】
フロントエンドインターフェース110は、例えば、解釈部112と、変換部114とを備える。解釈部112は、フロントエンドサーバ20から取得されるデータを抽象化する。また、解釈部112は、フロントエンドサーバ20にデータを提供する際には、抽象化されたデータを、フロントエンドサーバ20に対応した形式に変換する。変換部114は、行指向型のデータを列指向型のデータに変換して記憶部150に記憶部150に記憶させる。データ利用者インターフェース120は、データ利用者サーバ50から取得した要求に応じたデータを記憶部150から読み出し、データ利用者サーバ50に送信する。これらの機能の詳細については後述する。
【0022】
記憶部150は、例えば、キャッシュメモリ152と、不揮発性メモリ154とを備える。キャッシュメモリ152は、RAM(Random Access Memory)、レジスタ、フラッシュメモリなどで実現される。また、不揮発性メモリ154は、HDD(Hard Disk Drive)、フラッシュメモリなどで実現される。不揮発性メモリ154には、列志向型データ154Aが格納される。記憶部150は、データベースサーバ100がネットワークを介してアクセス可能なNAS(Network Attached Storage)であってもよい。
【0023】
[フロントエンドインターフェース]
以下、フロントエンドインターフェース110の機能について説明する。フロントエンドインターフェース110の解釈部112は、フロントエンドサーバ20ごとに定義が異なるデータを、一つの共通する形式に変換する。図7は、解釈部112の機能について説明するための図である。ここでは、Markというユーザ名(name)を有するユーザの年齢(age)が30才であるというデータを示している。これに対し、図7の下図は、データベースサーバ100が扱うことのできる抽象化されたデータを模式的に示している。解釈部112は、図7に例示したように、フロントエンドサーバ20から取得されたデータ格納要求を解釈し、抽象化する処理を行って、データを変換部114に渡す。なお、stringやintは後述するデータ形式である。
【0024】
フロントエンドインターフェース110により抽象化されたデータは、特に処理を加えなければ、行指向型のデータ構造を有するものとなるのが通常である。変換部114は、抽象化したデータを更に、列指向型のデータ構造に変換し、列志向型データ154Aとして記憶部150の不揮発性メモリ154に記憶させる。
【0025】
図8は、変換部114の機能について説明するための図(その1)である。ここでは、レコード1〜レコード3の3つのレコードがフロントエンドサーバ20から取得され、解釈部112によって抽象化されたものとする。レコード1は、データ項目としてid(識別情報)、name(ユーザ名)、sex(性別)を含んでいる。また、レコード2は、データ項目としてid、name、age(年齢)を含んでおり、レコード3は、データ項目としてid、nameを含んでいる。これらの抽象化されたレコードは、例えばレコード番号に対応付けられてキャッシュメモリ152に格納される。
【0026】
キャッシュメモリ152に一定量のデータが格納されると、変換部114は、これらを予め配列が確保されていない列指向型のデータ構造で管理しながら不揮発性メモリ154に記憶させる。列志向型のデータ構造において、一単位のデータ(以下、データセット)は、IndexとValueの組み合わせを含む。データセットに含まれるIndexとValueは、互いに対応付けられて不揮発性メモリ154に記憶される。「互いに対応付けられて」とは、例えば、格納場所を示すアドレス情報が、メモリ空間において連続して、あるいはポインタを介して辿ることができる位置に書き込まれていることをいう。このデータセットの格納態様は、「多次元空間での木構造」をデータフォーマット(json, xml, avro, message pack等)から切り離して抽象化したオブジェクトにしたschemaobjectを、メモリ空間にそのまま格納することに相当する。
【0027】
Indexとは、Valueすなわちデータ本体が、そのテーブル(データのより大きい管理単位)において、何レコード目から抽出されたものであるかを示す情報(換言すると、オフセット情報)である。Indexは、「インデックス情報」の一例である。同じデータ項目のデータセットは、例えば、論理構造に関して近い位置で、不揮発性メモリ154に記憶される。「論理構造に関して近い位置で」とは、例えば、あるデータセットを参照した後に、次のデータセットを参照するために、メモリ空間における連続したアドレスを参照すればよい、あるいは一つまたは少数のポインタを辿るだけで参照することができることをいう。
【0028】
以下、同じデータ項目の一以上のデータセット、すなわち列志向型で管理される一以上のデータセットのことをカラムデータと称する。図8の例では、データ項目「id」についてレコード1、2、3のデータセットが、データ項目「name」についてレコード1、2、3のデータセットが、データ項目「sex」についてレコード1のデータセットが、データ項目「age」についてレコード2のデータセットが、それぞれカラムデータとして管理される。
【0029】
また、カラムデータには、そのデータ項目のデータ形式などを記述したヘッダが付与される。データ形式には、[string(文字列)]、[int(整数)]、[long(桁の長い整数)]、[float(小数点表記)]、[double(桁の長い小数点表記)]などがある。
【0030】
更に別のレコードを記憶する要求が取得された場合、変換部114は、以下の手法でデータを管理する。変換部114は、(手法1)既に管理されているデータ構造に追加する形でデータを管理してもよいし、(手法2)キャッシュメモリ152から不揮発性メモリ154にデータを移すごとに管理するデータを区分してもよい。以下では手法1について説明する。手法2を採用する場合、データの読み出しの際に適宜、データの結合処理が行われる。
【0031】
図9は、変換部114の機能について説明するための図(その2)である。ここでは、更に、レコード4〜レコード6の3つのレコードがフロントエンドサーバ20から取得され、解釈部112によって抽象化されたものとする。レコード4は、データ項目としてname、age、jobを含んでいる。また、レコード5は、データ項目としてid、name、sexを含んでおり、レコード6は、データ項目としてid、name、jobを含んでいる。これらの抽象化されたレコードは、キャッシュメモリ152に格納される。
【0032】
キャッシュメモリ152に一定量のデータが格納されると、変換部114は、これらを列指向型のデータ構造で管理しながら不揮発性メモリ154に記憶させる。ここで、レコード4〜6には、レコード1〜3には含まれていなかったjob(職業)というデータ項目が含まれている。この場合、変換部114は、新たなカラムデータを設定し、データを管理する。図9の例では、データ項目「id」についてレコード1、2、3、5、6のデータセットが、データ項目「name」についてレコード1、2、3、4、5、6のデータセットが、データ項目「sex」についてレコード1のデータセットが、データ項目「age」についてレコード2、4、5のデータセットが、データ項目「job」についてレコード4、6のデータセットが、それぞれカラムデータとして管理される。
【0033】
このようにデータを管理することで、例えば、「全ユーザのjobを取得したい」といった要求がデータ利用者サーバ50から取得された場合、データベースサーバ100(データ利用者インターフェース120)は、他のデータ項目(id、name、age、sex、…)のカラムデータを参照せずに、データ項目「job」のカラムデータを読み出すことができる。この結果、読み出しに要する時間を短縮し、データ利用のニーズに迅速に対応することができる。なお、不揮発性メモリ154がHDDである場合、シーク時間が短くなるように、ひとまとまりの論理構造を、例えば同じトラック内に保持するようにすると好適であるが、これに限定されるものではない。
【0034】
また、例えば、データベースサーバ100(データ利用者インターフェース120)は、所定のデータ項目におけるValue(データ本体)が設定条件を満たすIndex(レコードを特定可能な情報)を記憶部150から読み出す要求を受け付け、結果を返すことができる。具体的には、「ageのValueが45以上のレコードを取得したい」といった要求がデータ利用者サーバ50から取得された場合、他のデータ項目(id、name、sex、job…)を参照せずに、データ項目「age」のカラムデータに含まれるIndexを読み出すことができる。この場合、データベースサーバ100(データ利用者インターフェース120)は、「age」のカラムデータから順にデータセットを読み出し、Valueの示す値が45以上であるデータセットのIndexを抽出する。この抽出したIndexは、「age」が45以上であるレコードに対する付番であるため、データベースサーバ100は、例えば、列志向型データ154Aとは別に保存されているレコードごとのデータを検索し、「age」が45以上であるレコードを取得することができる。図9の例では、Indexが4と5であるデータセットが条件に該当するため、データベースサーバ100は、4番目のレコードと5番目のレコードを抽出する。
【0035】
また、図8および図9に示すように、変換部114は、Indexが列方向に連続しない場合でも、連続しないIndexを含むデータセットの間に空のメモリ領域を設けない。これによって、データベースサーバ100は、データを読み出す際にメモリ領域をスキップする処理などを省略することができ、処理速度を向上させることができる。また、本実施形態では、データセットに含まれるIndexとValueとを互いに対応付けて不揮発性メモリ154に記憶させるため、予め設定されたデータ項目に関するデータセットでなくても列志向型データ154Aに追加することができる。すなわち、任意のタイミングで自由にデータ項目を追加することができる。
【0036】
図10は、変換部114により実行される処理の流れの一例を示すフローチャートである。まず、変換部114は、不揮発性メモリ154への書き込みタイミングが到来するまで待機する(S100)。不揮発性メモリ154への書き込みタイミングとは、前述したようにキャッシュメモリ152に一定量のデータが格納されたタイミング、データベースサーバ100がシャットダウンされるタイミング、直近までの集計処理が依頼されたタイミングなど、任意に定義することができる。
【0037】
不揮発性メモリ154への書き込みタイミングが到来すると、変換部114は、キャッシュメモリ152に格納されたレコードを一つ選択し(S102)、そのレコードに含まれるデータ項目を一つ選択する(S104)。そして、変換部114は、選択したデータ項目が、既に管理済のデータ項目であるか否かを判定する(S106)。
【0038】
選択したデータ項目が、既に管理済のデータ項目である場合、変換部114は、そのデータ項目の末尾にIndexとValueを追加する(S108)。一方、選択したデータ項目が、既に管理済のデータ項目でない場合、変換部114は、列を新たに設定(定義)し、設定した列にIndexとValueを書き込む(S110)。
【0039】
次に、変換部114は、選択されているレコードの全てのデータ項目を選択したか否かを判定する(S112)。選択されているレコードの全てのデータ項目を選択していない場合、S104に処理が戻される。選択されているレコードの全てのデータ項目を選択した場合、変換部114は、キャッシュメモリ152に格納されている全てのレコードを選択したか否かを判定する(S114)。キャッシュメモリ152に格納されている全てのレコードを選択していない場合、S102に処理が戻される。キャッシュメモリ152に格納されている全てのレコードを選択した場合、本フローチャートの1ルーチンの処理が終了する。
【0040】
[拡張機能]
変換部114は、同じデータ項目について、データ形式が異なるが、統合可能なデータ形式であるデータが入力された場合、これらをキャストして一つのカラムデータにしてもよい。統合可能なデータ形式とは、例えば、int(整数)とlong(桁の長い整数)の組、あるいはfloat(小数点表記)とdouble(桁の長い小数点表記)の組である。変換部114は、それぞれが互いに異なる数値型のデータ形式で定義された同じデータ項目に対応する二以上のカラムデータに関して、所望のタイミングで数値型のうち桁の多い方のデータ形式に揃えて一つのカラムデータを再構成する。
【0041】
図11は、変換部114のキャスト機能について説明するための図である。例えば、「times(ログイン回数)」のようなデータ項目について、レコード10、15、17ではデータ形式[int]で入力され、レコード22でValueの桁が長いためデータ形式[long]で入力された場合、当初のカラムデータは図11の上図のように二つに分けて設定される。この場合、変換部114は、任意のタイミングで、データ項目[int]のデータセットのデータ形式を[long]に変更して統合する。これによって、データ形式の異なるデータセットについても、例えば合計を求めるような統計処理を効率的に行うことができる。
【0042】
変換部114は、例えば、データ形式として[array]が指定されている場合、複数のデータ項目を分割してカラムデータとする。すなわち、変換部114は、入力されたレコードが階層構造を含む場合、階層構造をカラムデータの形成するメモリ空間に展開して記憶部150に記憶させる。図12は、変換部114のデータ分割機能について説明するための図である。図示するように、変換部114は、[array]形式の「date」を構成する「yy」と「mm」と「dd」をそれぞれデータ項目とし、親空間(上位空間)とは別のメモリ空間(子空間(下位空間))において、カラムデータとして列志向型で管理する。この場合、変換部114は、親空間における[array]に対応するカラムデータのValueに、子空間におけるオフセット情報であるChildIndexの先頭値と、length(何カラム目まで該当するデータがあるかを示す値)とを格納する。図12の例では、親空間のデータ項目「date」のIndex=10のデータセットにおけるValueの「ChildIndex(7,2)」は、子空間におけるChildIndex=7および8のデータセットが対応することを示している。また、変換部114は、それらが[array]からの派生であることを示す情報を、子空間におけるカラムデータに付加しておく。これによって、元々は次元数が他のデータ項目よりも多い(階層構造の)入力データを、フラットなデータ構造で管理することができる。
【0043】
[データ利用者インターフェース]
以下、データ利用者インターフェース120の機能について説明する。データ利用者インターフェース120は、例えば、データ利用者サーバ50からの要求に応じて、表形式のデータ(配列データ)を提供する。データ利用者サーバ50からの要求は、任意のデータ項目を指定して行われる。この際に、データ利用者インターフェース120は、指定されたデータ項目を含まないレコードに関しては、そのデータ項目に対応するデータを「null」(或いはブランクなど、「該当データ無し」を示す任意の形態であってよい)とした表形式のデータを生成してデータ利用者サーバ50に提供する。また、データ利用者インターフェース120は、指定されたデータ項目が既に管理されているデータ項目の中に無い場合、エラーを返すのではなく、そのデータ項目についてのデータを全て「null」(或いはブランクなど、「該当データ無し」を示す任意の形態であってよい)とした表形式のデータを生成してデータ利用者サーバ50に提供する。なお、データ利用者サーバ50からの要求は、例えば所定の拡張子を指定することで行われてよい。
【0044】
例えば、図9に示すようなデータが列志向型データ154Aとして不揮発性メモリ154に格納されている状態で、データ項目[sex、age、job、hobby(趣味)]を指定したデータの要求があったとする。この場合、データ利用者インターフェース120による出力データのイメージは、図13のようになる。図13は、データ利用者インターフェース120による出力データのイメージを示す図である。図示するように、データ利用者インターフェース120による出力データは、データの有無に拘わらず、レコードごと且つデータ項目ごとにデータを配列化して表したデータである。これによって、データベースサーバ100は、データ利用者サーバ50のニーズに応じた形式でデータを提供することができる。
【0045】
図14は、データ利用者インターフェース120により実行される処理の流れの一例を示すフローチャートである。まず、データ利用者インターフェース120は、データの要求を取得するまで待機する(S200)。データの要求を取得すると、データ利用者インターフェース120は、スキーマ情報154Bから、現時点でのレコードの最大数を取得する(S202)。この最大数をnとする。次に、データ利用者インターフェース120は、データの要求に含まれるデータ項目数×nの配列を定義する(S204)。この配列が、出力データの枠組みとなる。
【0046】
次に、データ利用者インターフェース120は、データの要求からデータ項目を一つ選択し(S206)、選択したデータ項目が、既に列志向型データ154Aに設定済であるか否かを判定する(S208)。データ利用者インターフェース120は、選択したデータ項目が、既に列志向型データ154Aに設定済でない場合、当該データ項目のデータを全てnullにする(S210)。
【0047】
一方、選択したデータ項目が、既に列志向型データ154Aに設定済である場合、データ利用者インターフェース120は、列志向型データ154Aから、現在選択されているデータ項目のデータを一つ読み出す(S212)。次に、データ利用者インターフェース120は、S212において読み出し可能なデータが存在しなかったか否かを判定する(S214)。S212において読み出し可能なデータが存在した場合、データ利用者インターフェース120は、その読み出しに至るまでにレコード番号が飛ばされたか否かを判定する(S216)。レコード番号が飛ばされた場合、データ利用者インターフェース120は、飛ばされたレコード番号のデータをnullにする(S218)。そして、データ利用者インターフェース120は、列志向型データ154Aから読み出したデータをS204で設定した配列に含める(S220)。
【0048】
S210の処理を行った後、或いは、S214において肯定的な判定を得た後、データ利用者インターフェース120は、繰り返しS206が行われる中で全てのデータ項目を選択したか否かを判定する(S222)。全てのデータ項目を選択していない場合、S206に処理が戻される。一方、全てのデータ項目を選択した場合、データを出力する(S224)。この段階で、配列における全てのデータに、列志向型データ154Aから読み出されたデータ、或いはnullが格納されている筈である。
【0049】
以上説明した本発明のデータ管理装置、データ管理方法、およびプログラムによれば、入力されたレコードを解釈してデータ項目とデータ本体との対応関係が認識可能な抽象表現に変換し、データ項目ごとに、データ本体とレコードを特定可能なインデックス情報とを対応付けたデータセットを、カラムデータとして記憶部150に記憶させることにより、非構造的な入力データについて列志向型としての利用を可能にしつつ、入力レコードの特定も容易に行うことができる。
【0050】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【0051】
10 端末装置
20 フロントエンドサーバ
30 プロキシサーバ
50 データ利用者サーバ
100 データベースサーバ
110 フロントエンドインターフェース
112 解釈部
114 変換部
120 データ利用者インターフェース
150 記憶部
152 キャッシュメモリ
154 不揮発性メモリ
154A 列志向型データ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14