Mercurial > hg > Papers > 2016 > tatsuki-prosym
changeset 62:d5ec56df0230
add child and attribute description.
author | Kazuma Takeda |
---|---|
date | Sun, 25 Dec 2016 18:28:59 +0900 |
parents | 86c066e69a2f (current diff) fd054c23f0d4 (diff) |
children | 7071c1eff185 |
files | Slide/prosym.md |
diffstat | 1 files changed, 38 insertions(+), 72 deletions(-) [+] |
line wrap: on
line diff
--- a/Slide/prosym.md Sun Dec 25 17:40:41 2016 +0900 +++ b/Slide/prosym.md Sun Dec 25 18:28:59 2016 +0900 @@ -53,13 +53,15 @@ 当研究室ではこれらの問題を解決した煩雑なデータ設計が必要のないJungleデータベースを提案している。 -トランザクションは木のルートをアトミックに入れ替えることで実現する。 +Jungleは様々な構造のデータを設計を行うこと無く格納することが可能である。 -また、木構造のデータの変更を非破壊的、つまり元の木を保存しつつ、新しい木を構築する方法を採る。 +また、木の編集は、木のルートをアトミックに入れ替えることで実現する。 -プログラムは、この木を内部のデータ構造として直接取り扱うことができるので、読み出し時にデータベースに問い合わせる必要がない。 +つまり、木構造のデータの変更を非破壊的、つまり元の木を保存しつつ、新しい木を構築する方法を採る。 -また汎用の木構造を持つので、データベースを特に設計しなくても、あるがままの形で格納することが可能になっている。Jungleは分散構成も可能である。 +プログラムは、この木を内部のデータ構造として直接取り扱うことができるので、読み出し時にデータベースに問い合わせる必要がなく、高速に動作する。 + +Jungleは分散構成も可能である。 まずはJungleの仕様部分から説明する。 @@ -85,7 +87,7 @@ # Jungleの木 -Jungleは複数の木を名前を利用して管理しており、名前により作成・編集・削除を行う。 +Jungleは複数の木を名前を利用して管理しており、名前により作成・編集を行う。 ``` Java // Jungleに新しく木を生成する。木の名前が重複した場合、生成に失敗しnullを返す @@ -98,13 +100,12 @@ # Jungleの木 -Jungleの例を記載する。 +Jungleの木の生成するサンプルコードを記載する。 以下のコードは、Jungleの木を"TreeName"で生成し取得する。 ``` Java -jungle.createNewTree("TreeName"); -JungleTree tree = jungle.getTreeByName("TreeName"); +JungleTree tree = jungle.createNewTree("TreeName"); ``` # TreeNode @@ -119,7 +120,6 @@ // ノードが保持しているデータを扱うAttribteオブジェクトを返す Attribute getAttribute() - ``` # Eitherクラス @@ -140,6 +140,26 @@ ``` +# ChildrenとAttribute + +Childrenクラスを利用し、ノードの子どもにアクセスする。 + +``` Java +// ノードが持っている子どもの個数を返す +int size() +// ノードが持つ子どもの中から、 変数numで指定された位置にある子ノードを返す +<Either Error,TreeNode> at(int num) +``` + +Attributeクラスを利用し、ノードの保持する値にアクセスする。 + +``` Java +// ノードが持つ値から、属性名 keyとペアの属性値をByteBuffer型で返す +ByteBuffer get(String key) +// ノードが持つ値から、属性名 keyとペアの属性値をString型で返す +String getString(String key) +``` + # JungleのAPI Jungleの例を記載する。 @@ -230,52 +250,7 @@ ``` -# Jungle を用いたアプリケーション - -Jungleの特性を生かし、アプリケーションを構築した。 - -- maTrix -- Rendering Engine - -# maTrix - -実際に企業で運用されている許認可管理アプリケーション。 - -人物、役職、役割、権限、組織の木構造のデータとポリシーファイルを持つ。 - -maTrixのデータ構造は以下のようになっている。 - -<div style="text-align: center;"> - <img src="./images/TreePersonJungle.pdf" alt="message" width="400"> -</div> - -# ポリシーファイル - -データに対するアクセス要求が許可されるか否認されるかを判断するためのルール、 - -- 誰が(Target) -- 何を(Resource) -- どうできるか(Action) - -の3つの要素を持っている。 -maTrixはアクセス要求に応じたポリシーファイルを参照することで許認可の判断を行う。 - -ポリシーファイルは組織構造中の人や役職をidを用いて参照し表現している。 - -- 許認可を下すためには、その人がどこの組織に所属して、その役割がどの権限を持っているかを返す検索が必要。 - -# maTrixでは - -- 組織構造は、それぞれの木構造がidを用いた参照を行う -- 過去のアクセス要求を全て保存する -[](なんでアクセス要求を保存する必要があるのか) -- ポリシーファイルを用いた場合の人物検索 - -[](ポリシーファイルが必要な部分) - -# Indexの実装 - -[](indexがなんで必要かを入れる必要がある。) +# JungleでのIndexの実装 Jungleは、非破壊的木構造というデータ構造上、過去の版の木構造を全て保持しているため、全ての版に独立したIndexが必要となる。 @@ -287,9 +262,6 @@ このTreeMapは、Jungleと同じようにルートから変更を加えたノードまでの経路の複製を行い、データの更新を行った際、前の版と最大限データを共有した新しいTreeMapを作成する。 -Jungleとの違いは、木の回転処理が入ることである。 - - # Indexの実装 これにより複数の版全てに対応したIndexをサポートすることが可能になった。 @@ -331,9 +303,7 @@ # 検索APIの実装 -Indexを実装したことにより、Idを用いた組織構造の表現は可能になった。 - -しかし、組織構造に問い合わせを行う検索APIが実装されていなかったため、属性名key 属性値valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、lambda式を用いて行った。 +属性名key 属性値valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、lambda式を用いて行った。 以下に検索を行う関数findの定義を記述する。 @@ -368,8 +338,8 @@ ・属性値がnullでなかった場合、p:2と一致するかどうかを調べ結果を返す。 # HTML Rendering Engine + Jungleの特性を生かしたRendering Engineを開発した。 - 今回は例題として、日記(ブログ)を選択した。 # 構造 @@ -506,6 +476,11 @@ ・Node3は、これ以上データを持たないため、次はNode4を参照する。 +<div style="text-align: center;"> + <img src="./images/multiComponent05.pdf" alt="message" width="400"> +</div> + + # レンダリングの流れ ・Node4は属性名 displayComponentName 属性名 dialyText@Componentの組を持つため、NodeNameがdialyText@Componentのノードを参照している。 @@ -555,16 +530,7 @@ # まとめ -本研究では非破壊データベースJungleに許認可管理アプリケーションmaTrix、HtmlRenderingEngineの2つを実装した。 - -許認可管理アプリケーションmaTrixの実装を通して、Jungleに実用データベースとしての表現力、機能の十分性、実用的な性能があるか実証実験を行った。 -maTrixは複数の木がお互いにIdを用いた参照を行い組織構造を表現していたが、JungleではIndexを用いた参照で表現した。 -また、測定の結果mongoDBの約500倍高速に動作した。 -これはJungleがon memoryなのに対し、MongoDBはmmapを用いてデータにアクセスしているからである。 - -maTrixの実装により、Jungleは、実用アプリケーションを実装できるほどの表現力、機能、性能があることを証明できた。 - -最後に、Jungleを使った例題アプリケーションとしてRenderingEngineの実装を行った。 +本研究ではJungleを使った例題アプリケーションとしてRenderingEngineの実装を行った。 その際Jungleのデータ構造でプログラムの処理量、コードの可読性が異なることがわかった。 性能測定では、データ設計を行った木構造を利用したほうが高速に動作した。 これはノードをたどる必要が無いからである。