annotate midterm.tex @ 0:7008af359a96

firsr commit
author Kazuma
date Wed, 19 Oct 2016 15:12:16 +0900
parents
children 93d15a2b6745
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
2 \usepackage[dvips]{graphicx}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
3 \usepackage[dviout]{graphicx}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
4 \usepackage[dvipdfm]{graphicx}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
5 \usepackage{ascmac}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
6 \usepackage{fancyhdr}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
7 %\pagestyle{fancy}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
8 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
9 \rhead{}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
10 \cfoot{}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
11
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
12 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
13 \setlength{\headheight}{0mm}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
14 \setlength{\headsep}{5mm}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
15 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
16 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
17 \setlength{\textwidth}{181mm}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
18 \setlength{\textheight}{261mm}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
19 \setlength{\footskip}{0mm}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
20 \pagestyle{\empty}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
21
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
22 \begin{document}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
23 \title{Database Jungleに関する研究}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
24 \author{135768k 武田和馬 {}{} 指導教員 : 河野真治}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
25 \date{}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
26 \maketitle
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
27 \thispagestyle{fancy}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
28
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
29 \section{非破壊木構造データベース}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
30
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
31 当研究室ではデータの変更の際に過去の木構造を保存しつつ新しく木構造を作成する非破壊的木構造を用いたデータベースであるJungleを開発している。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
32 Jungle DBの有効性を示すために、 本研究では検索API、Index、過去データの参照の実装を行う。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
33 Jungleが実用DBとしての性能を持っているかどうかを調べるために、アカウント管理システムmaTrixへ組み込み、評価を行う。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
34
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
35 Jugnleの木は、子供を複数持つノード(*図1)からなる。子供は順序付けられており、任意の位置で作成削除することができる。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
36 ノードには属性名と属性値の組があり、データベースのレコードとして使うことができる。Index は、このレコードの属性に
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
37 対して作成する。任意の木で、属性値に対応する複数のノード、そして必要ならば、そこまでのパスの組を返す。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
38 ここでパスとは、ルートから木をたどるのに必要な各ノードの子供の番号のリストである。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
39 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
40 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
41 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
42 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
43 \begin{figure}[h]
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
44 \includegraphics[width=2cm, bb=0 0 172 200]{node.pdf}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
45 \end{figure}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
46 \\\\\\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
47 Unityはゲーム
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
48 % ので、過去の組織のデータを参照する必要が出てくる。よって過去のデータの参照が出来るJungleと相性が良い。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
49 % これらは、XMLで記述されており、
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
50 % maTrixが保持している人、役職、役割等のデータはお互いに参照している。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
51 % ポリシーファイルは、組織の中で申請等を行った際に、どの権限によってその申請が許諾されるのかを指定している。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
52 % 組織のデータ、ポリシーファイル共に木構造のデータであるため、Jungleにそのまま格納できる。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
53
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
54 \section{maTrixに必要なデータベースの構築}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
55
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
56 組織構造は木構造なので Jungle の木構造にそのままマッピングできる。Persons, Organiations, RoleDescription の三つの木を一つのJungleの木として格納する。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
57 XACMLは、XMLなので木構造を持つ。XACMLは、組織構造中の人や役職を id として参照する。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
58 具体的な許諾では、 例えば、その人がどの組織に所属して、その役割がどの権限を持っているかを返す検索が必要となる。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
59 XML形式で出力されたmaTrixのデータをJungleに格納するために、SAXを用いて、Jungle用のXMLReaderを作成した。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
60
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
61 \section{検索APIの設計と実装}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
62
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
63 図2は組織構造木から、key:valueの組が、"element":"Person"のデータの組み合わせを持ったNodeと、そのNodeまでのPathのPairのiteratorを返すQueryのAPIの例を示している。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
64 \verb+(TreeNode node) -> {}+ は、引数\verb+node+を持つ Java 8 のλ式である。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
65
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
66 {\scriptsize
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
67 \begin{itembox}[l]{図2 Sample Query}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
68 \begin{verbatim}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
69 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator =
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
70 traverser.find((TreeNode node) -> {
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
71 String element = node.getAttributes().getString("element");
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
72 if (element == null)
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
73 return false;
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
74 if (element.equals("Person"))
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
75 return true;
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
76 return false;
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
77 }, "element", "Person");
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
78 \end{verbatim}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
79 \end{itembox}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
80 }\\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
81
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
82 \verb+find+は引数に\verb+Query+、\verb+String key+、\verb+String value+の3つを取る。\verb+key+ はIndexの対象となる属性名である。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
83
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
84 Queryは図3で定義されたinterfaceである。実行されるQuery は ノードを引数に取り、そのノードが条件に一致しているかどうかを調べるconditionという関数が定義されている必要がある。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
85 {\scriptsize
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
86 \begin{itembox}[l]{図3 Query interface}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
87 \begin{verbatim}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
88 public interface Query {
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
89 boolean condition(TreeNode node);
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
90 }
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
91 \end{verbatim}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
92 \label{interface}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
93 \end{itembox}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
94 }\\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
95
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
96 \section{Indexの実装}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
97 Jungleの探索はTreeの全探索の計算量はO(n)である。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
98 Indexの実装には、functionalJavaのTreeMapを使用し、計算量はO(logN)となる。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
99 これにより、前の版の木のIndexの最大共有するこが可能であり、複数の木の版すべてに対するIndexをサポートすることが可能になる。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
100 Jungle DB は分散DBなので、 on-th-fly つまり必要になったDBノード毎に作成する。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
101
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
102 \newpage
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
103 {\scriptsize
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
104 \begin{itembox}[l]{図4 Indexの型}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
105 \begin{verbatim}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
106 TreeMap<String, TreeMap
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
107 <String, List<Pair<TreeNode, NodePath>>>> index;
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
108 \end{verbatim}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
109 \end{itembox}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
110 }\\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
111 図4にはJungleDBにおけるIndexの型を記述した
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
112 Jungleでは、木の編集や、特定のNode下のTreeの探索、Nodeの親をたどるためには全てそのNodeへのPathが必要になる、ため、IndexにもそのNodeまでのPathが必要になる。そのため、IndexのNodePathが大きなボトルネックとなっている。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
113
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
114 JungleでTreeの編集を行う際は、JungleTreeEditorを使用し、子ノードのadd、delete、属性のput、deleteを行う。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
115 Treeに対して変更を加える時にIndexも更新も行う。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
116
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
117 Jungleの木の更新(commit)は、CAS(check and set*図5)を用いて atomic に行われる。競合している書き込みにの中で自分の書き込みが成功した場合に関数 \verb+success()+が成功する。IndexはCASの前に作成され
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
118 元の木と同時に更新される。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
119 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
120 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
121 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
122 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
123 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
124 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
125 \begin{figure}[h]
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
126 \includegraphics[width=2cm, bb=0 0 172 200]{cas.pdf}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
127 \end{figure}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
128
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
129 Indexの更新は変更で影響を受けるすべてのノードに対して行う必要がある。ノードそのものが変更されなくても、パスが影響を受ける場合には、そのノードも更新する必要がある。(*図6)
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
130 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
131 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
132 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
133 \\
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
134 \begin{figure}[h]
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
135 \includegraphics[width=2cm, bb=0 0 160 200]{path.pdf}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
136 \end{figure}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
137
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
138
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
139
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
140 \newpage
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
141 \section{特定のNode下のTreeに対するIndexを用いた検索}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
142
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
143 特定のノードの下のTreeに対する検索は、比較対象のパスを使って、自分のパス比較すれば良い。Index を使用して対象を絞ってから比較を行う。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
144 ノードの下の木が小さいことが予測される場合は、Indexを使用しないほうが良い性能が得られる場合もある。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
145
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
146 \section{これからの作業}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
147
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
148 実際にmaTrixとJungleの接続を行い、既存のmaTrixとJunglemaTrixの性能を評価する。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
149
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
150 Jungleは、過去のversionのTreeを保持しているので、
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
151 過去のversionのuuidを指定して自由に過去のversionを参照できるようにする。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
152
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
153 JungleはRDBと異なり木構造のデータを自由に格納することができる。それゆえ木構造の設計の自由度は大きい。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
154 しかし、変更は木が大きいほどルートに集中してしまう。木の分割を行うと、分割した木の間の同期は version
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
155 を介して行う間接的なものとなる。なので、JungleDBの設計手法を確立させる必要がある。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
156
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
157 本研究は、PCIホールディングス株式会社と株式会社Symphonyとの共同研究である。
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
158
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
159 \begin{thebibliography}{9}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
160
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
161 \bibitem{1}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
162 玉城将士 非破壊的木構造を用いた分散CMSの設計と実装
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
163 \bibitem{2}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
164 大城信康 分散Database Jungleに関する研究
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
165 \end{thebibliography}
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
166
7008af359a96 firsr commit
Kazuma
parents:
diff changeset
167 \end{document}