Address
:
[go:
up one dir
,
main page
]
Include Form
Remove Scripts
Accept Cookies
Show Images
Show Referer
Rotate13
Base64
Strip Meta
Strip Title
Session Cookies
More Web Proxy on the site http://driver.im/
Submit Search
Java8でRDBMS作ったよ
•
10 likes
•
16,485 views
なおき きしだ
Follow
1 of 37
Download now
Downloaded 45 times
More Related Content
Java8でRDBMS作ったよ
1.
https://github.com/kishida/sqlparser
2.
RDBMSの構成
3.
リレーショナルエンジン
4.
今回のデータベース方針 ● 勉強用 ● 単なる作業はやらない ●
リレーショナル処理からはずれることはしない ● リレーショナルエンジンと実行エンジンのみ実装
5.
データベース仕様 ● オンメモリ ● シングルスレッド ●
型なし ● JOINはLEFT INNERのみ ● UNIONなし ● サブクエリーなし
6.
Javaでのデータベース ● 言語としてはあんまり向いてない – ライブラリはあまり使わない –
パターンマッチが欲しい ● ScalaやHaskellのほうがいい ● Erlangもいいかもね – 並行処理が必要になる
7.
Java SE 8はいい ●
ラムダ便利 ● Stream使いまくり – コレクション操作が主 ● Optionalのありがたさ
8.
解決策 ● パターンマッチは自作 – AST処理で活躍 ●
lombok – コンストラクタやtoStringの生成 – http://projectlombok.org/
9.
データベースの寿命は長い ● アプリケーションより寿命が長い ● バージョンの有効期間が短い言語は不向き ●
Javaは寿命の長さだけが取り柄 ● でも勉強なら好きな言語で
10.
JParsec ● Parserライブラリ ● 外部ツール不要 – JavaCCやANTLRは構文定義が別ファイル ●
LL(トップダウン解析) ● Haskelのparsecの移植 ● パーサーコンビネータ – コンビネータ:引数だけから結果がきまる関数 ● 内部DSL ● Java8が便利 ● ただしドキュメントはない ● http://jparsec.codehaus.org/
11.
字句解析 ● 文字列からトークン(字句)を抜き出す – 識別子、文字列、キーワード、コメントなど ●
基本的に正規表現 ● 終端記号 ● 今回はJParsecで用意されたものを利用
12.
構文解析 ● トークン列から構文木をつくる ● トークンの正規表現 ●
非終端記号 ● パターンに非終端記号を使える – 終端記号だけ使うなら正規表現 ● カッコの入れ子が表現できる
13.
数式解析 ● 数式の優先順位決めが面倒 ● だいたいLR(ボトムアップ解析) ●
演算子の優先順位を指定すればいい
14.
リレーショナル代数 ● SQL≠リレーショナル代数 ● 射影:select ●
直積:join ● 選択:where
15.
リレーショナル代数
16.
ストリーム処理 ● フィルタ結果を渡していくと非効率 ● 一行ずつ処理できるようにする
17.
JOIN処理 ● ネストループJOIN – 結合対象のテーブルで2重ループ ●
ソートマージJOIN ● インデックスを使うJOIN
18.
GROUP BY ● グループ化フィールドで並べ替え ●
グループ化フィールドとHAVINGで使う項目を追 加で出力
19.
インデックス ● ハッシュインデックス ● ツリーインデックス ●
Bツリー – ブロック単位で扱える – ロックが効率化しやすい – データベースに向いてる
20.
最適化 ● インデックスの使いどころをさがす
21.
CNF ● Conjunctive Normal
Form ● 連言標準形 ● andでつないだ形にする – (id=1 and flag=true) or id=2 – (id=1 or id=2) and (flag=true or id=2) ● id in (1,2) and (flag=true or id=2)
22.
CNF
23.
機械的最適化 ● フィルタをなるべく下におろす
24.
インデックスの利用 ● いろいろルールを決める ● ルールベース最適化
25.
ルールベース最適化の問題
26.
コストベース最適化 ● 統計情報をとる – 確率的 ●
統計情報からコストを計算する
27.
実際は最適化ではない ● 最適なプランは現実的ではない – 全データでの統計処理がいる –
時間をかけすぎては意味がない ● 妥当化 – 制限時間時点で最適なもの
28.
トランザクション ● ACID – ATOMICICY:不可分性 –
CONSISTENCY:一貫性 – ISOLATION:独立性 – DURABILITY:永続性 ● ようするに、並行に実行されるひとまとまりの操作 が、順番に実行されたと見えるようにする
29.
MVCC ● トランザクションごとにバージョン番号を振る
30.
データ抽出処理
31.
隔離レベル
32.
今後 ● 永続化 ● 障害対策 ●
外部接続 ● 平行化 ● 分散化?
33.
永続化 ● 処理時にストレージとのやりとりは実装が大変 ● 終了時に保存、開始時に読み込み
34.
障害対策 ● 更新ログをとる – WAL(Write
Ahead Log) ● 起動時にコミット済みで未保存のデータがあれば 反映させておく
35.
外部接続 ● JDBC対応 ● TCP/IP接続対応
36.
平行化 ● マルチスレッド – スレッド同期が必要 ●
ロックが必要
37.
分散化? ● たいへん!
Download