view Slide/prosym.md @ 48:cd3da6f21601

add section.
author Kazuma Takeda
date Fri, 16 Dec 2016 22:30:25 +0900
parents 5541d77910b9
children a894ba522389
line wrap: on
line source

title: ソフトウェア内部で使用するのに適した木構造データベースJungle
author: Tatsuki Kanagawa
profile: 琉球大学理工学研究科
lang: Japanese
code-engine: coderay

[](プロシン発表時間 セッション4 1/7 8:50 - 10:10)

## 研究目的

プログラムからデータを分離して扱うデータベースにはデータ構造とRDBの表構造のインピーダンスミスマッチという問題がある。

- ORMapper
- Json

などにより、不定形のデータ構造を格納できる機能拡張もなされてきたが、複雑な構造をメモリ上に構築しているため、これらの方法でもまだギャップがある。

今回提案する木構造データベースJungleはプログラム内部に直接木構造を構築する。
トランザクションは木のルートをアトミックに入れ替えることで実現する。
また、木構造のデータの変更を非破壊的、つまり元の木を保存しつつ、新しい木を構築する方法を採る。

## この発表では

- Jungleデータベースの構造
- WebServer(BBS)
- maTrix
- RenderingEngine
- まとめ

Jungleデータベースの構造とこれを用いたアプリケーション、実装時に発生した問題と解決方法について解説する。

## Jungleデータベース

JungleデータベースはJavaで実装されている。
木構造型のデータベースで、プログラム上に直接木構造を構築する。

木は複数のノードの集合でできており、その木の集合によりJungleが構成されている。
ノードは自身の子のリストと属性名と属性値の組でデータを持つ。これはデータベースのレコードに値する。
通常のレコードと異なるのは、ノードに子どもとなる複数のノードがつくところである。
なお、親から子への片方向の参照しか持たない。

[]( 理由はノードをコピーするときにその参照までもコピーしないといけないし、特定のノードから探って行くので子は誰が知る必要はない)

[]( ノードの図入れた方が良い?)

データの変更は一度生成した木を上書きせず、ルートから変更を行うノードまでコピーを行い、新しく木構造を構築する。
その際にルートをアトミックに入れ替える。
[](失敗時の具体的な意味Either)

<div style="text-align: center;">
 <img src="./images/nonDestractTreeEdit.pdf" alt="message" width="600">
</div>

以降はJungleの構造をAPIとともに紹介。
[](70分あるので入れてもいいかな)

## 木の生成

Jungleは複数の木を名前を利用して管理しており、名前により作成・編集・削除を行う。
Jungleクラスの木の生成、管理を提供するAPIは以下のようになっている。

``` Java
/* If the name of the tree duplicates, it fails and returns null */
JungleTree createNewTree(String treeName);

/* If there is no matching Tree name, it fails and returns null  */
JungleTree getTreeByName(String treeName);
```

## 木のノード

Jungleの木は、複数のノードの集合でできている。