# HG changeset patch # User Shinji KONO # Date 1424319453 -32400 # Node ID 5ee5d1bfce2805592a7f837ff178ac1e237a6cc2 # Parent 81739e6ae6b9b15a7a03987a0d85d30eefb40a57 fix diff -r 81739e6ae6b9 -r 5ee5d1bfce28 slide/slide.html --- a/slide/slide.html Thu Feb 19 13:03:39 2015 +0900 +++ b/slide/slide.html Thu Feb 19 13:17:33 2015 +0900 @@ -104,23 +104,38 @@

知的構造を格納するためのデータベース

-

我々が扱っている知識は木構造であることが多い

-

RDBに木構造のデータを格納する際は表変換を行う必要があり、データ構造が煩雑になりやすい

-

木構造のデータを直接格納できるデータベースJungleの開発を行っている

-

Jungle上に組織の許認可管理アプリケーションmaTrixを実装する

-

データベースの表現力、機能の十分性、実用的な性能実証実験を行う

+ +
  • 我々が扱っている知識は木構造であることが多い +
  • RDBに木構造の格納する際は表に変換を行う必要があり、スキーマが煩雑になる +
  • 木構造のデータを直接格納できるデータベースが望ましい + + +

    そこで、並列研では非破壊木構造データベースJungleの開発を行っている

    +

    Jungleの表現力、機能の十分性検証、及び性能実証実験を行いたい

    +

    そのために、Jungle上に組織の許認可管理アプリケーションmaTrixを実装した

  • +
    + +

    Jungle上でのmaTrixのデータ構造の表現

    +

    Jugnleでは木構造持つノードを、そのままデータベースとして扱う

    +

    maTrixの人物Treeの一部をJungleのノードで表現

    +

    ノードは複数の子供ノードを持つ

    +

    ノードには属性名と属性の値の組があり、データベースのレコードに相当する

    + +
    +
    +

    Jungleのデータの編集

    -

    新しい木構造を作成することでデータの編集を行う。

    +

    新しい木構造を作成することでデータの編集を行う

    -

    書き込み時に、ロックをかける必要があるのはルートノードを入れ替えるときのみ。

    -

    データの上書きが無いため、読み込み中にロックをかける必要がない。

    +

    書き込み時に、ロックをかける必要があるのはルートノードを入れ替えるときのみ

    +

    データの上書きが無いため、読み込み中にロックをかける必要がない

    @@ -129,8 +144,8 @@

    組織の中の許認可管理アプリケーションmaTrix

    -

    人、組織、役割等の情報を木構造として保持しており、Idでお互いに参照し組織構造を表現している。

    -

    許認可の判断は、アクセスルールが記述されたポリシーファイルにそって行われる。

    +

    人、組織、役割等の情報を木構造として保持しており、Idでお互いに参照し組織構造を表現している

    +

    許認可の判断は、アクセスルールが記述されたポリシーファイルにそって行われる

    @@ -176,37 +191,30 @@
    -

    maTrixの組織構造表現例

    -

    maTrixの組織構造は純粋な木構造ではない

    -

    木同士が相互参照を行うことで組織構造を表現している。

    - -

    この図だと、人物Treeと組織Treeがお互い参照を行い組織運用モデルを表現している。

    +

    Jungle上でのIdを使った木の相互参照

    +

    組織構造は複数の木構造を持ち、お互いのノード参照し合っている

    +

    ex. 人物は、そのロールの木の中のノードを参照する

    + +

    ロールの木のノードにID属性を用意し、異なるID値を割りふる

    +

    ノードIDにより参照を可能にする

    +

    →ノードIDの検索機能が必要となる

    -

    Jungle上でのmaTrixのデータ構造の表現

    -

    この図は、maTrixの人物Treeの一部をJungleに格納したものである。

    - -

    この様にJungleでは木構造のデータを読み込む。

    -
    -
    - -
    -

    maTrixでの許認可管理

    -

    maTrixを用いた許認可は、組織構造だけでは判断されない。

    -

    アクセス可能な時間等のルールは組織構造では表現できないからである。

    -

    そこでアクセスルールを記述したポリシーファイルを用いて許認可管理を行う。

    -

    ポリシーファイルには、subject(誰が)、Resource(何に対して)、Action(何が出来るか)を記述する。

    +

    maTrixを用いた許認可は、組織構造だけでは判断されない

    +

    アクセス可能な時間等のルールは組織構造では表現できないからである

    +

    そこでアクセスルールを記述したポリシーファイルを用いて許認可管理を行う

    +

    ポリシーファイルには、subject(誰が)、Resource(何に対して)、Action(何が出来るか)を記述する

    以下に許認可管理の流れを示す

      -
    • Aさん(Subject)が、学科のノートPC(Resource)の借りる(Action)ために、maTrixに貸出許可を求める。
    • -
    • maTrixはリポジトリから、貸出許可を与えるかを判断するためのポリシーを取得する。
    • -
    • ポリシーファイルを元に、組織構造にアクセスを行い許可を与えるかどうかを判断する。
    • +
    • Aさん(Subject)が、学科のノートPC(Resource)の借りる(Action)ために、maTrixに貸出許可を求める
    • +
    • maTrixはリポジトリから、貸出許可を与えるかを判断するためのポリシーを取得する
    • +
    • ポリシーファイルを元に、組織構造にアクセスを行い許可を与えるかどうかを判断する
    @@ -214,27 +222,20 @@
    -

    Jungle上でのIdを使った木の相互参照

    -

    Treeの検索は、Jungleが提供しているTraverserを使用する。

    +

    Treeの検索

    +

    Jungleの木をたどる Traverserを使用する

    InterfaceTraverser traverser = tree.getTraverser(boolean useIndex);
    -

    TraverserはTreeのNodeを走破する機能を持ったクラスです。

    -

    TreeからgetTraverserで取得可能。

    -

    第一引数で 検索を行う際にIndexを使用するかどうかを選択できる。

    -
    -
    - -
    - -

    Idを使った木の相互参照2

    -

    Traverser.findでTreeに対して検索を行う。

    +

    TraverserはTreeのNodeを走破する機能を持ったクラスです

    +

    TreeからgetTraverserで取得可能

    +

    第一引数で 検索を行う際にIndexを使用するかどうかを選択できる

    public Iterator<TreeNode> nodeIterator = traverser.find(Query query,String key, String searchValue);
    -

    第一引数には、探索の条件を記述する関数boolean condition(TreeNode)を定義したQueryを受け取る。

    -

    第二、第三引数の、String key、String valueはIndexの取得に使用する。

    -

    条件に一致したNodeのIteratorを返す。

    +

    第一引数には、探索の条件を記述する関数boolean condition(TreeNode)を定義したQueryを受け取る

    +

    第二、第三引数の、String key、String valueはIndexの取得に使用する

    +

    条件に一致したNodeのIteratorを返す

    public interface Query {
       boolean condition(TreeNode _node);
    @@ -248,14 +249,14 @@

    JungleのIndex

    -

    indexを実装することで探索計算量がO(logN)となる。

    -

    Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っている必要がある。

    -

    version毎にIndexを作るとメモリを多量消費してしまう。

    -

    FunctionalJavaのTreeMapを使用してIndexの実装を行った。

    -

    データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築します。

    -

    その際、過去のIndexとデータを共有している。

    -

    複数のversionのIndexがあっても、データの差分しかメモリは消費されない。

    -

    メモリの使用量を抑えつつ複数のversionでIndexを保持できる。

    +

    indexを実装することで探索計算量がO(logN)となる

    +

    Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っている必要がある

    +

    version毎にIndexを作るとメモリを多量消費してしまう

    +

    FunctionalJavaのTreeMapを使用してIndexの実装を行った

    +

    データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築します

    +

    その際、過去のIndexとデータを共有している

    +

    複数のversionのIndexがあっても、データの差分しかメモリは消費されない

    +

    メモリの使用量を抑えつつ複数のversionでIndexを保持できる

    @@ -263,16 +264,16 @@

    木構造の親を辿るQuery

    -

    maTrixで許認可を判断する際に、木構造の親を辿る検索を行う必要がある。

    -

    以下に親を辿る検索を行う例を記す。

    +

    maTrixで許認可を判断する際に、木構造の親を辿る検索を行う必要がある

    +

    以下に親を辿る検索を行う例を記す

      -
    1. Aさんが、maTrixに工学部の学生にのみ貸出を行っている書籍の貸出許可を求める。
    2. -
    3. Aさんの所属している組織の情報を取得する(情報工学科)。
    4. -
    5. 情報工学科の親の情報を取得する(工学部)。
    6. -
    7. Aさんは工学部に所属しているため本の貸出を許可する。
    8. +
    9. Aさんが、maTrixに工学部の学生にのみ貸出を行っている書籍の貸出許可を求める
    10. +
    11. Aさんの所属している組織の情報を取得する(情報工学科)
    12. +
    13. 情報工学科の親の情報を取得する(工学部)
    14. +
    15. Aさんは工学部に所属しているため本の貸出を許可する
    -

    TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。

    -

    3番目の処理でParentIndexを使用する。

    +

    TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した

    +

    3番目の処理でParentIndexを使用する

    @@ -280,30 +281,20 @@

    maTrixのポリシーファイルのInterpreter

    -

    Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う。

    -

    引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る。

    -

    返り値は、許可(Permit) or 拒否(Deny)がある。

    -

    実際にJungleの上で許認可判断が行えるようになった。

    +

    Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う

    +

    引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る

    +

    返り値は、許可(Permit) or 拒否(Deny)がある

    +

    実際にJungleの上で許認可判断が行えるようになった

    maTrixのポリシーファイルのInterpreter

    -

    Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う。

    -

    引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る。

    -

    返り値は、許可(Permit) or 拒否(Deny)がある。

    -

    実際にJungleの上で許認可判断が行えるようになった。

    -
    -
    - -
    - -

    Interpreterのデモ

    -
  • 首都圏第一営業部責任者
  • -
  • urn:srl-oasis:systems:aso:normal-menu
  • -
  • 読み込みと書き込みを許可する
  • -

    ルールが記述されたpolicyを用いる。

    +

    Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う

    +

    引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る

    +

    返り値は、許可(Permit) or 拒否(Deny)がある

    +

    実際にJungleの上で許認可判断が行えるようになった

    @@ -312,7 +303,7 @@

    今後の課題

  • 分散版の実装

  • maTrix専用のデータ構造の定義
  • -

    今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する。

    +

    今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する

    @@ -320,11 +311,11 @@

    まとめ

    -

    Jungle上で実用アプリケーションを構築できた。

    -

    その際に必要だった機能をJungleに追加した。

    +

    Jungle上で実用アプリケーションを構築できた

    +

    その際に必要だった機能をJungleに追加した

  • Query
  • Index
  • -

    実際にポリシーファイルを読み込み許認可を行えた。

    +

    実際にポリシーファイルを読み込み許認可を行えた