Mercurial > hg > Papers > 2015 > tatsuki-thresis
changeset 11:7736b4d79048
abst update
author | tatsuki |
---|---|
date | Tue, 17 Feb 2015 16:33:49 +0900 |
parents | 5053959a1d75 |
children | 558dcd1a4583 |
files | abst.pdf abst.tex chapter2.tex fig/TreePersonJungle.graffle fig/TreePersonJungle.pdf main.tex |
diffstat | 6 files changed, 86 insertions(+), 114 deletions(-) [+] |
line wrap: on
line diff
--- a/abst.tex Tue Feb 17 14:07:25 2015 +0900 +++ b/abst.tex Tue Feb 17 16:33:49 2015 +0900 @@ -18,50 +18,111 @@ \pagestyle{empty} \begin{document} -\title{分散機構造データベースJungleによる\\企業向け企業システム} +\title{分散木構造データベースJungleによる\\企業向け許認可システム} \author{金川竜己 \\ 指導教員 河野真治 {} } -\date{Knowledge is tree strucuture.I Want DataBase to easily store Tree strucuture.laboratory have developed a database Jungle.Jungle which has non-destructive tree strucuture and distributed.Symphony company has developed enterprise Authorization system.we build a enterprise Authorization system on Jungle.And I was a test of the Jungle.Locate the required API, which was implemented.I have implemented a three API ,Search API, Index, Access to the past of Tree.Results came out by the measurement} \maketitle +\begin{abstract}Knowledge is tree strucuture. We want DataBase to easily store Tree strucuture. laboratory have developed a database Jungle. Jungle which has non-destructive tree strucuture and distributed. Symphony company has developed enterprise Authorization system. We build a enterprise Authorization system on Jungle. And I was a test of the Jungle. Locate the required API, which was implemented. I have implemented a three API , Search API, Index, Access to the past of Tree. we was able to build a practical application on the result Jungle\end{abstract} \thispagestyle{fancy} \section{分散木構造データベースJungle} 当研究室ではデータの変更の際に過去の木構造を保存しつつ新しく木構造を作成する非破壊的木構造を用いたデータベースであるJungleを開発している。 -JungleのTreeは複数個の子を持つノードからなり、ノードは属性名と属性値の組のデータを保持することが可能である。それらをデータベースのレコードとして扱う。 -当研究では、共同研究を行っているSymphonies社が開発している、組織の中の許認可を管理するアプリケーションmaTrixにJungleを組み込み、実装すべきAPIの洗い出しを行い、その後実用DBとしての性能があるか実証実験を行う。 +非破壊的木構造は、一度生成した木を上書きせず、データの編集はルートから編集を行うノードまでコピーを行い新しく木構造を構築することで行う。 +そのため、非破壊的木構造は検索中の木が変更されないことが保証されているので、破壊的木構造に比べてスケールアウトがしやすくなっている。 + +当研究では、共同研究を行っているSymphonies社が開発している、組織の中の許認可を管理するアプリケーションmaTrixにJungleを組み込み、実装すべきAPIの洗い出しを行い、その後実用データベースとしての性能があるか実証実験を行う。 \section{組織中の許認可管理\\アプリケーションmaTrix} maTrixは、人、役職、役割、権限と言った木構造のデータと、許認可判断用のポリシーファイルを持つ。 maTrixの組織構造は、データ同士がidを用いて参照を行い表現しており、version毎に版管理している。 -組織構造は木構造なので Jungleの木構造にそのままマッピングできる。 - -また、maTrixが許認可判断に用いるポリシーファイルはXACMLファイル形式で記述されており、XACMLは、組織構造中の人や役職をidとして参照する。 +また、maTrixが許認可判断に用いるポリシーファイルはXACMLファイル形式で記述されており、XACMLは、組織構造中の人や役職をidを用いて参照する。 つまり、XACMLを用いて許認可の判断を下すためには、その人がどの組織に所属して、その役割がどの権限を持っているかを返す検索が必要となる。 -maTrixがXML形式で出力したデータを、Jungleに格納するために、SAXを用いて、Jungle用のXMLReaderを作成した。 -読み込んだXACMLTreeからデータを取り出して、Jungle上で許認可判定を行う、XACMLInterpreterの実装も行った。 +%maTrixがXML形式で出力したデータを、Jungleに格納するために、SAXを用いて、Jungle用のXMLReaderを作成した。 +%読み込んだXACMLTreeからデータを取り出して、Jungle上で許認可判定を行う、XACMLInterpreterの実装も行った。 -\section{検索APIの設計と実装} +\section{Jungle上での\\maTrixのデータ構造の表現} +maTrixの人、組織、役割、権限等のデータは木構造なので Jungleの木構造にそのままマッピングできる。 +実際のmaTrixのデータ構造の一部(表\ref{list:PersonTree})と、そのデータを実際に格納したJungleTree(図\ref{fig:PersonTree})を以下に記す。 +\begin{figure}[h] +\begin{center} +\includegraphics[height = 8cm , bb=0 0 398 367]{fig/TreePersonJungle.pdf} +\caption{Jungle上での人物Treeの表現例(1)} +\label{fig:PersonTree} +\end{center} +\end{figure} + +\clearpage +\begin{table}[h] +\caption{図\ref{fig:PersonTree}に対応したXML} +\label{list:PersonTree} +\begin{center} +\begin{tabular}{|l|} \hline +\verb|<|Persons\verb|>| \\ +\ \verb|<|Person id="p:1" type="Person"\verb|>| \\ +\ \ \verb|<|PersonData\verb|>| \verb|<|/PersonData\verb|>| \\ +\ \verb|<|/Person\verb|>| \\ +\ \verb|<|Person id="p:2" type="Person"\verb|>| \\ +\ \ \verb|<|PersonData\verb|>| \verb|<|/PersonData\verb|>| \\ +\ \verb|<|/Person\verb|>| \\ +\verb|<|/Persons\verb|>|\\ \hline +\end{tabular} +\end{center} +\end{table} +しかし、maTrixの一部のデータ構造がJungleに対応していないため、その部分のみJungleにあった形に修正を行い格納している。Jungle上で表現できないデータの例を以下に記す(\ref{list:PersonTree2})。 +\begin{table}[h] +\caption{Jungle上で表現できないデータ例} +\label{list:PersonTree2} +\begin{center} +\begin{tabular}{|l|} \hline +\verb|<|Ids\verb|>|r:10 r:34\verb|<|/Ids\verb|>| \\ +\hline +\end{tabular} +\end{center} +\end{table} + +Jungleは、TreeNodeにデータを格納する際、String KeyとByteBuffer attributeの組み合わせで保持している。 +しかし、1つのkeyに対して複数のattributeを持つことは出来ないので、図\ref{list:PersonTree2}の様に、1つの要素に複数の値がある場合などはそのままではデータを格納できない。 +しかし、表\ref{list:maTrixDataChild}の様にデータ構造を変更すればJungleに格納できるようになる。 +\begin{table}[h] +\caption{Jungleに対応したデータ例} +\label{list:maTrixDataChild} +\begin{center} +\begin{tabular}{|l|} \hline +\verb|<|Ids\verb|>| \\ +\ \verb|<|Id\verb|>|r:10\verb|<|/Id\verb|>| \\ +\ \verb|<|Id\verb|>|r:34\verb|<|/Id\verb|>| \\ +\verb|<|/Ids\verb|>| \\ +\hline + +\end{tabular} +\end{center} +\end{table} + +maTrixの人、組織等のデータはお互いにIdを用いて相互参照を行い組織情報を表現している。 +Jungle上でのmaTrixの組織構造の表現は、Treeに対するIdの検索を用いて表現すれば良い。 +また、maTrixがXML形式で出力したデータを、Jungleに格納するために、SAXを用いて、Jungle用のXMLReaderを作成した。 + +\section{Jungle上での検索APIの設計と実装} JungleのTreeに対して検索を行うfind関数の実装を行った。 以下にfind関数の定義を記述する。 -{\scriptsize + \begin{itembox}[l]{find関数の定義} \begin{verbatim} -publicIterator<TreeNode> -find(finalQueryquery,finalStringkey,StringsearchValue); +public Iterator<TreeNode> find + (Query query ,String key,String Value); \end{verbatim} \end{itembox} -} + find関数は引数にQuery、String key、String valueの3つの引数を取り、条件に一致したNodeのIteratorを返す。 - 第一引数には以下に記載してある、探索の条件を記述する関数boolean comdition(TreeNode)を定義したInterfaceQueryを。 第二、第三引数の、String key、String valueはIndexの取得を行うために使用する。 -{\scriptsize + \begin{itembox}[l]{Queryinterface} \begin{verbatim} publicinterfaceQuery{ @@ -70,101 +131,13 @@ \end{verbatim} \label{interface} \end{itembox} -} - -{\scriptsize -\begin{itembox}[l]{find Sample} -\begin{verbatim} -Iterator<TreeNode> pairPersonIterator= - traverser.find((TreeNodenode)->{ - Stringelement=node.getAttributes().getString("element"); - if(element==null) - returnfalse; - if(element.equals("Person")) - return true; - return false; -},"element","Person"); -\end{verbatim} -\label{query} -\end{itembox} -} - -実際にfind関数を使った例とコードの解説を行う。 - -find Sampleは、第2、第3引数の"element"-"Person"を用いて、これらの値に対応したIndexが登録されているかを調べる、Indexがある場合はIndexを使用し値を返す。Indexがない場合は、Treeから深さ優先でTreeNodeを取得していく。 - -取得したTreeNodeを引数に与え、boolean Query.condition(TreeNode)を実行し、condition中で、TreeNodeのAttributeに対してgetを行い探索対象のデータをTreeNodeが保持しているかを調べ、データを持っていた場合はTrueを、持っていなかった場合はFalseを返す - -conditionの返り値が、Trueだった場合、TreeNodeを返す。今までの処理をもう一度繰り返す。 - -find関数を使用し、実際にmaTrixがデータにアクセスする際に使用する関数を全て実装した。 - -\section{Indexの実装} -Jungleの探索はTreeを全探索するので、探索の計算量はO(n)である。 -そこで、Indexを使用することで効率よく探索を行えるようにする。 -Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っていることが望ましい。 -そこで、メモリの消費量を抑え、各versionのTreeにIndexをもたせる方法として、FunctionalJavaのTreeMapを使用したIndexの実装を行った。 -FunctionalJavaのTreeMapは、データの更新が行われた際に、一度作られたTreeに対して更新を行わず過去のTreeを -再利用し、更新後のTreeMap新しく返すため、メモリの使用量を抑えつつ複数のversionでIndexを保持できる。 +find関数を実際に使用して、maTrixがデータにアクセスする際に使用する関数を全て実装し、実際に、XACMLを用いて許認可を行えるようにした。 -Indexの型は以下のように定義した。 -{\scriptsize -\begin{itembox}[l]{Indexの型} -\begin{verbatim} -TreeMap<String key,TreeMap<String value, - List<TreeNode>>>> -\end{verbatim} -\end{itembox} -} -最初のTreeMap$<$String key,TreeMap$>$はIndexを格納するTreeMapである。 -このTreeMapに対しkeyでgetを行うと、keyに対応するIndexが登録されている場合、Indexを取得でき、取得したIndexに対し -valueでgetを行うと、valueの値を持つNodeのListが返ってくる。 - -{\large ParentIndex} - -TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。 -ParentIndexの型は、以下の様に定義した。 -{\scriptsize -\begin{itembox}[l]{Indexの型} -\begin{verbatim} -TreeMap$<$TreeNode,TreeNode$>$ -\end{verbatim} -\end{itembox} -} - -ParentIndexを用いることで、TreeNodeからNodePathを取得できるようになり、Indexで取得したTreeNodeのデータ編集を行えるようになった。 - -\section{getOldTree} -JungleのTreeはversion毎にUNIQUEなrevisionIdを持つ。 -アクセスしたいTreeのrevisionIdを引数に取り、過去のTreeのデータの取得とrevisionIdの比較を繰り返すことで過去のTreeにアクセスする関数をgetOldTree実装した。 -以下にgetOldTreeの定義を示す。 -{\scriptsize -\begin{itembox}[l]{Indexの型} -\begin{verbatim} -public Either<Error, JungleTree> getOldTree(long revision); -\end{verbatim} -\end{itembox} -} - -\section{検索APIの測定} -Jungleに対する検索APIの測定を行う。 -測定には、maTrixが保持しているデータにアクセスする際に用いる関数のうちの1つを使用した。 -実験の結果は図\ref{fig:isActive}となる。横軸は人物Treeにいる人の数を表しており、縦軸は探索にかかった時間を表している。 - -\begin{figure}[h] -\begin{center} -\includegraphics[height=5cm , bb=0 0 360 252]{fig/isActive.pdf} -\caption{inActiveの実行時間} -\label{fig:isActive} -\end{center} -\end{figure} - -isActiveの実行時間は、Indexを使用しない場合は、Personの数が増えると比例して増えていくのに対し、Indexを使用するとPersonの数が増えても実行時間は変わらず、Indexを使用しない場合と比較し、極めて高速に実行できた。 - - - - +\section{まとめ} +本研究は、実際に使われている組織の中の許認可を判断するアプリケーションmaTrixのデータ構造をどのようにJungle上で表現するかを設計し、実際にmaTrixのデータ構造を格納した。 +そして実際にmaTrixで使われているデータアクセス関数を実装し、実際にJungle上に実用的な業務アプリケーションの構築に成功した。 +本研究は、PCIホールディングス株式会社と株式会社Symphonyとの共同研究である。 \thispagestyle{fancy} \begin{thebibliography}{9} @@ -175,5 +148,4 @@ \bibitem{3} Eric Redmond and Jim R. Wilson 7つのデータベース7つの世界 \end{thebibliography} -本研究は、PCIホールディングス株式会社と\\株式会社Symphonyとの共同研究である。 \end{document}
--- a/chapter2.tex Tue Feb 17 14:07:25 2015 +0900 +++ b/chapter2.tex Tue Feb 17 16:33:49 2015 +0900 @@ -35,7 +35,7 @@ 非破壊的木構造においてデータのロックが必要になる部分は、木のコピーを作った後に、ルートノードを更新するときだけである。 また、データ編集を行っている間ロックが必要な破壊的木構造に比べ、非破壊的木構造は検索中の木が変更されないことが保証されいているため、編集中においてもデータの読み込みが可能である。(図\ref{fig:desMerit}) -そのため、非破壊的木構造に比べてスケールアウトがしやすくなっている。 +そのため、破壊的木構造に比べてスケールアウトがしやすくなっている。 \begin{figure}[h] \begin{center} \includegraphics[height = 7cm ,bb=0 0 350 301]{fig/non_destructive_merit.pdf}
--- a/fig/TreePersonJungle.graffle Tue Feb 17 14:07:25 2015 +0900 +++ b/fig/TreePersonJungle.graffle Tue Feb 17 16:33:49 2015 +0900 @@ -267,7 +267,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{224, 366}, {191.99999999999997, 89}}</string> + <string>{{224, 393}, {191.99999999999997, 62}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -699,7 +699,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2015-02-16 21:58:37 +0000</string> + <string>2015-02-17 06:43:36 +0000</string> <key>Modifier</key> <string>sister_clown</string> <key>NotesVisible</key>
--- a/main.tex Tue Feb 17 14:07:25 2015 +0900 +++ b/main.tex Tue Feb 17 16:33:49 2015 +0900 @@ -8,7 +8,7 @@ \setlength{\itemsep}{-1zh} %\title{enterprise Authorization system on distributed tree structure database Jungle} -\title{分散機構造データベースJungleによる\\企業向け許認可システム} +\title{分散木構造データベースJungleによる\\企業向け許認可システム} \icon{ \includegraphics[width=80mm,bb=0 0 595 842]{fig/ryukyu.pdf} }