comparison slide/slide.html @ 1:d6b62893378f

slide
author tatsuki
date Sun, 24 May 2015 17:54:28 +0900
parents
children 0b021791e15c
comparison
equal deleted inserted replaced
0:6e8b3ae59b5d 1:d6b62893378f
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <title>非破壊的木構造データベースJungleとその評価</title>
6 <!--
7 Notes on CSS media types used:
8
9 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
10 2) screen -> outline mode (display all slides-at-once on screen)
11 3) print -> print (and print preview)
12
13 Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
14
15 Questions, comments?
16 - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow
17 -->
18
19 <!-- styles -->
20 <style media="screen,projection">
21
22 html,
23 body,
24 .presentation { margin: 0; padding: 0; }
25
26 .slide { display: none;
27 position: absolute;
28 top: 0; left: 0;
29 margin: 0;
30 border: none;
31 padding: 2% 4% 0% 4%; /* css note: order is => top right bottom left */
32 -moz-box-sizing: border-box;
33 -webkit-box-sizing: border-box;
34 box-sizing: border-box;
35 width: 100%; height: 100%; /* css note: lets use border-box; no need to add padding+border to get to 100% */
36 overflow-x: hidden; overflow-y: auto;
37 z-index: 2;
38 }
39
40 .slide.current { display: block; } /* only display current slide in projection mode */
41
42 .slide .stepcurrent { color: black; }
43 .slide .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */
44
45 .slide {
46 /*
47 background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua);
48 background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua);
49 */
50 }
51 </style>
52
53 <style media="screen">
54 .slide { border-top: 1px solid #888; }
55 .slide:first-child { border: none; }
56 </style>
57
58 <style media="print">
59 .slide { page-break-inside: avoid; }
60 .slide h1 { page-break-after: avoid; }
61 .slide ul { page-break-inside: avoid; }
62 </style>
63
64
65 <!-- add js lib (jquery) -->
66 <script src="js/jquery-1.7.min.js"></script>
67
68 <!-- S6 JS -->
69 <script src="js/jquery.slideshow.js"></script>
70 <script src="js/jquery.slideshow.counter.js"></script>
71 <script src="js/jquery.slideshow.controls.js"></script>
72 <script>
73 $(document).ready( function() {
74 Slideshow.init();
75
76 // Example 2: Start Off in Outline Mode
77 // Slideshow.init( { mode: 'outline' } );
78
79 // Example 3: Use Custom Transition
80 // Slideshow.transition = transitionScrollUp;
81 // Slideshow.init();
82
83 // Example 4: Start Off in Autoplay Mode with Custom Transition
84 // Slideshow.transition = transitionScrollUp;
85 // Slideshow.init( { mode: 'autoplay' } );
86 } );
87 </script>
88
89 </head>
90 <body>
91
92 <div class="presentation">
93
94 <!-- add slides here; example -->
95 <div id="header">
96 <font size=5>
97 <h1>非破壊的木構造データベースJungleとその評価</h1>
98 <br><br>
99 <p>琉球大学情報工学科並列信頼研</p>
100 <p>金川竜己</p></font>
101
102 </div>
103
104 <div>
105 <font size=5>
106 <h1>知的構造を格納するためのデータベース</h1>
107 <li>
108 <li>我々が扱っている知識は木構造であることが多い
109 <li>RDBに木構造の格納する際は表に変換を行う必要があり、スキーマが煩雑になる
110 <li>木構造のデータを直接格納できるデータベースが望ましい
111 </li>
112
113 <p>そこで、当研究室では非破壊木構造データベースJungleの開発を行っている</p>
114 <p>Jungleの表現力、機能の十分性検証、及び性能実証実験を行いたい</p>
115 <p>そのために、Jungle上に組織の許認可管理アプリケーションmaTrixを実装した</p>
116 </font>
117 </div>
118
119
120 <div>
121 <font size=5>
122 <h1>組織の中の許認可管理アプリケーションmaTrix</h1>
123 <p>maTrixとは、株式会社Symphonyが開発しているアカウント管理、許諾判定システムである</p>
124 <p>人、組織、役割等の木構造データとポリシーファイルを持つ</p>
125 <p>データ同士が参照を行うことで組織構造を表現しており、組織構造は版管理されている</p>
126 <p>ポリシーファイルは主に、誰が (Target)、何を (Redource)、どうできるか(Action) の3つの要素で記述されている</p>
127 <p>maTrixはアクセス要求に応じたポリシーファイルを参照することで許認可の判断を行う</p>
128 </font>
129 </div>
130
131
132 <div>
133 <font size=5>
134 <h1>非破壊的木構造データベースJungle</h1>
135 <p>Jungleは、複数の木の集合からなり、木はノードの集合で出来ている</p>
136 <p>ノードは、自身の子供のリストと、属性名(Key)と属性値(Value)のデータの組を持つ</p>
137 <p>Jungleは、非破壊的木構造であるため、一度作成した木を破壊することはない</p>
138 <p>そのため、書き込みと読み込みを同時に行うことができる</p>
139 <p>木の編集は、ルートから編集を行うノードまでコピーし、新しい木構造を作成することで行う</p>
140 <p>その際、変更がないノードは共有する</p>
141 <img src="./images/non_destructive_tree_edit2.png">
142 <p>木の更新は、ルートノードをCASを用いて入れ替えることで行う</p>
143 </font>
144 </div>
145
146
147
148 <div>
149 <font size=5>
150 <h1>Jungle上でのmaTrixのデータ構造の表現</h1>
151 <p>Jugnleは木構造のデータをそのまま格納できるため、maTrixのデータを一部を除きそのまま格納できる</p>
152 <p>maTrixの人物TreeをJungleに格納した図の一部を以下に示す</p>
153 <iframe src="images/TreePersonJungle.html" width="1000" height="1000"></iframe>
154 <p></p>
155 </font>
156 </div>
157
158
159 <div>
160 <font size=5>
161 <h1>Jungleで表現出来ないmaTrixのデータ構造</h1>
162 <p>Jungleのノードは1つの属性名に対し、1つの属性値しか持つことが出来ない</p>
163 <p>しかしmaTrixには、1つの属性名に対し、複数の属性名がペアになることがある</p>
164 <p>例として、人が所属している組織のIdなどである</p>
165 <p>なので、Jungleに格納できる形式に変換を行う必要がある</p>
166 <p>データの変換は、データを複数個のノードに分割して格納することで行う</p>
167 <p>以下にデータ変換の例を示す</p>
168 <iframe src="images/JungleDataConvert.html" width="1800" height="1000"></iframe>
169 </font>
170 </div>
171
172
173 <div>
174 <font size=5>
175 <h1>Jungle上での組織構造の表現</h1>
176 <p>maTrixでは、複数の木構造がお互いに参照を行うことで組織構造を表現している</p>
177 <p>人や組織はそれぞれ異なるIdを保持している(p:1など)</p>
178 <p>参照はIdを用いて行う</p>
179 <p>→ノードIDの検索機能が必要となる</p>
180 <iframe src="images/ref.html" width="1800" height="1000"></iframe>
181 </font>
182 </div>
183
184
185 <div>
186 <font size=5>
187 <h1>Jungle上でのIdを使った木の相互参照</h1>
188 <p>組織構造は複数の木構造を持ち、お互いのノード参照し合っている</p>
189 <p>ex. 人物は、そのロールの木の中のノードを参照する</p>
190 <img src="./images/TreePersonJungle.png">
191 <p>ロールの木のノードにID属性を用意し、異なるID値を割りふる</p>
192 <p>ノードIDにより参照を可能にする</p>
193 <p>→ノードIDの検索機能が必要となる</p>
194 </font>
195 </div>
196
197
198 <div>
199 <font size=5>
200 <h1>maTrixでの許認可管理</h1>
201 <p>maTrixを用いた許認可は、組織構造だけでは判断されない</p>
202 <p>アクセス可能な時間等のルールは組織構造では表現できないからである</p>
203 <p>そこでアクセスルールを記述したポリシーファイルを用いて許認可管理を行う</p>
204 <p>ポリシーファイルには、subject(誰が)、Resource(何に対して)、Action(何が出来るか)を記述する</p>
205
206 <p>以下に許認可管理の流れを示す</p>
207 <ul>
208 <li>Aさん(Subject)が、学科のノートPC(Resource)の借りる(Action)ために、maTrixに貸出許可を求める</li>
209 <li>maTrixはリポジトリから、貸出許可を与えるかを判断するためのポリシーを取得する</li>
210 <li>ポリシーファイルを元に、組織構造にアクセスを行い許可を与えるかどうかを判断する</li>
211 </ul>
212 </font>
213 </div>
214
215
216 <div>
217 <font size=5>
218 <h1>Treeの検索</h1>
219 <p>Jungleの木をたどる Traverserを使用する</p>
220 <div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333;">
221 InterfaceTraverser traverser = tree.getTraverser(boolean useIndex);
222 </div>
223 <p>TraverserはTreeのNodeを走破する機能を持ったクラスです</p>
224 <p>TreeからgetTraverserで取得可能</p>
225 <p>第一引数で 検索を行う際にIndexを使用するかどうかを選択できる</p>
226 <div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333;">
227 public Iterator&lt;TreeNode&gt; nodeIterator = traverser.find(Query query,String key, String searchValue);
228 </div>
229 <p>第一引数には、探索の条件を記述する関数boolean condition(TreeNode)を定義したQueryを受け取る</p>
230 <p>第二、第三引数の、String key、String valueはIndexの取得に使用する</p>
231 <p>条件に一致したNodeのIteratorを返す</p>
232 <div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333;">
233 public interface Query {<br>
234 &nbsp;&nbsp boolean condition(TreeNode _node);<br>
235 }
236
237 </div>
238 </font>
239 </div>
240
241
242 <div>
243 <font size=5>
244 <h1>JungleのIndex</h1>
245 <p>indexを実装することで探索計算量がO(logN)となる</p>
246 <p>Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っている必要がある</p>
247 <p>version毎にIndexを作るとメモリを多量消費してしまう</p>
248 <p>FunctionalJavaのTreeMapを使用してIndexの実装を行った</p>
249 <p>データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築します</p>
250 <p>その際、過去のIndexとデータを共有している</p>
251 <p>複数のversionのIndexがあっても、データの差分しかメモリは消費されない</p>
252 <p>メモリの使用量を抑えつつ複数のversionでIndexを保持できる</p>
253 </font>
254 </div>
255
256
257 <div>
258 <font size=5>
259 <h1>木構造の親を辿るQuery</h1>
260 <p>maTrixで許認可を判断する際に、木構造の親を辿る検索を行う必要がある</p>
261 <p>以下に親を辿る検索を行う例を記す</p>
262 <ol>
263 <li>Aさんが、maTrixに工学部の学生にのみ貸出を行っている書籍の貸出許可を求める</li>
264 <li>Aさんの所属している組織の情報を取得する(情報工学科)</li>
265 <li>情報工学科の親の情報を取得する(工学部)</li>
266 <li>Aさんは工学部に所属しているため本の貸出を許可する</li>
267 </ol>
268 <p>TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した</p>
269 <p>3番目の処理でParentIndexを使用する</p>
270 </font>
271 </div>
272
273
274 <div>
275 <font size=5>
276 <h1>maTrixのポリシーファイルのInterpreter</h1>
277 <p>Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う</p>
278 <p>引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る</p>
279 <p>返り値は、許可(Permit) or 拒否(Deny)がある</p>
280 <p>実際にJungleの上で許認可判断が行えるようになった</p>
281 </font>
282 </div>
283
284 <div>
285 <font size=5>
286 <h1>maTrixのポリシーファイルのInterpreter</h1>
287 <p>Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う</p>
288 <p>引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る</p>
289 <p>返り値は、許可(Permit) or 拒否(Deny)がある</p>
290 <p>実際にJungleの上で許認可判断が行えるようになった</p>
291 </font>
292 </div>
293
294 <div>
295 <font size=5>
296 <h1>今後の課題</h1>
297 <li>分散版の実装</li><br>
298 <li>maTrix専用のデータ構造の定義</li>
299 <p>今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する</p>
300 </font>
301 </div>
302
303
304 <div>
305 <font size=5>
306 <h1>まとめ</h1>
307 <p>Jungle上で実用アプリケーションを構築できた</p>
308 <p>その際に必要だった機能をJungleに追加した</p>
309 <li>Query</li>
310 <li>Index</li>
311 <p>実際にポリシーファイルを読み込み許認可を行えた</p>
312 </font>
313 </div>
314
315 </div> <!-- presentation -->
316 </body>
317 </html>