第12回 中国地方DB勉強会 in 出雲
DbmFsのご紹介
Fenrir.inc
岩瀬 高博
@okuyamaoo
ta.okuyamaoo@gmail.com
自己紹介
・岩瀬 高博(@okuyamaoo)
・フェンリル (株) 所属
・仕事と趣味
仕事>Web系開発全般のプロマネ
趣味>OSS開発・車の草レース
本日のお話
• DbmFsとは?
• 仕組みと構造
• データ構造
• 機能のご紹介
• デモ(時間のあるかぎり)
DbmFsとは?
DbmFsとは?
DbmFsとは?
データベースをマウントするファイルシステム
DbmFsとは?
データベースをマウントするファイルシステム
?
データベースがファイルシステムをマウントするのではなく??
DbmFsとは?
そもそもファイルシステムとは?
DbmFsとは?
コンピュータのリソースを操作するための、
オペレーティングシステム (OS) が持つ機能の一つ。
Wikipedia(ファイルシステム)より
Wikipedia(ファイルシステム)より
DbmFsとは?
身近なファイルシステムはローカルに搭載する
HDDやSSDなどにデータを保存している
DbmFsとは?
DbmFsは保存先をデータベースにしたファイルシステム
DbmFs データベース
仕組みと構造
仕組みと構造
ファイルシステムを実装する
仕組みと構造
ファイルシステムを実装するにはカーネルへの
深い知識と
高い技術力が必要
仕組みと構造
Linux用のファイルシステム実装用のFuseを利用
Wikipediaより
仕組みと構造
ファイルシステムへの操作は
Fuseを経由しDbmFsへ送られる
Wikipediaより
DbmFs
データベース
DbmFsは受け取った操作
命令をSQLへ変換しDBへ
仕組みと構造
・実装言語
Java + Fuse Java binding (Fuse-J)
・対応環境
CentOSとRedHatの6系にてテスト
基本的にFuseとJavaが稼働すれば問題なし
・対応データベース
MySQL5.6系とPostgreSQL8.4系にてテスト
・リポジトリ – ライセンス
Version – 0.0.7
GitHub (https://github.com/okuyamaoo/DbmFs)
Apache License, Version 2.0
データの扱い
データの扱い
DbmFsはどのようにデータベースを
ファイルシステムとして扱うか?
データベースの構造は?
データの扱い
データベースの構造は?
user_id mail zip addr tel
テーブル
データの扱い
データベースの構造は?
user_id mail zip addr tel
1 aaaa@bb.cc 111-
2222
XXX県 11-22-3333
2 bbbb@bb.cc 333-
4444
YYY市 00-11-2222
3 cccc@bb.cc 555-
6666
ZZZ町 55-44-6666
4 dddd@bb.cc 777-
8888
LLLL県 66-77-8888
レコード
テーブル
データの扱い
ファイルシステムの構造は?
フォルダ
データの扱い
ファイルシステムの構造は?
ファイル
データの扱い
それぞれをマッピング
テーブルをフォルダへ
データの扱い
それぞれをマッピング
レコードをファイルへ
データの扱い
ファイルの中身はJsonフォーマットでレコードを表現
[ {
"user_id" : 1,
"mail" : "aaa@bb.cc",
"zip" : "111-2222",
"addr" : "XXX県",
"tel" : "11-22-3333",
"__DBMFS_TABLE_META_INFOMATION" : "column_name:user_id,~~~~"
} ]
データの扱い
機能について
参照系
機能
・参照系機能
全てのテーブル、レコードをファイルシステム上で
扱えるためLinuxのコマンドで扱うことが可能
・ファイル名での検索
ファイル名はテーブルの主キーの連結文字列
主キーで検索するのであれば find コマンドで可能
[root@okuyamaoo fusemnt]# find ./user -name [1-2].json
./user/1.json
./user/2.json
機能
・参照系機能
全てのテーブル、レコードをファイルシステム上で
扱えるためLinuxのコマンドで扱うことが可能
・ファイル内容の検索
ファイルの内容はレコーのJson表記なので
grepコマンドを使えば列指定で検索可能
[root@okuyamaoo fusemnt]# grep '"addr"' -r ./user/ | grep 'XXX’
./user/1.json: "addr" : "XXX県",
機能
・参照系機能
・もちろんテキストエディタ等でも開けます
[root@okuyamaoo fusemnt]# vi user/1.json
[ {
"user_id" : 1,
"mail" : "aaa@bb.cc",
"zip" : "111-2222",
"addr" : "XXX県",
"tel" : "11-22-3333",
"__DBMFS_TABLE_META_INFOMATION" :
"column_name:user_id,type_name:INT,column_size:10,null_type:NO,seq_type:NO,javaTypeName:java.lang.I
nteger____column_name:mail,type_name:VARCHAR,column_size:255,null_type:YES,seq_type:NO,javaTypeN
ame:java.lang.String____column_name:zip,type_name:VARCHAR,column_size:10,null_type:YES,seq_type:N
O,javaTypeName:java.lang.String____column_name:addr,type_name:VARCHAR,column_size:255,null_type:Y
ES,seq_type:NO,javaTypeName:java.lang.String____column_name:tel,type_name:VARCHAR,column_size:20,
null_type:YES,seq_type:NO,javaTypeName:java.lang.String____pkey_columns_name:user_id"
} ]
機能
・0.0.7で追加した参照機能
機能
・0.0.7で追加した参照機能
> 任意の参照クエリの結果をマウントする機能
> Readonlyでのマウント
機能
・0.0.7で追加した参照機能
> 任意の参照クエリの結果をマウントする機能
> Readonlyでのマウント
機能
・0.0.6まではテーブルをマウントするだけだった
DbmFs
機能
・0.0.7からはSELECTクエリをマウント可能に
SELECT ・・・・
FROM ・・・・INNDER JOIN ・・・
WHERE ・・・・
SELECTクエリ
クエリ結果がフォルダに
更新系
機能
・更新系機能
テキストエディタなどによるファイル更新
[root@okuyamaoo fusemnt]# vi user/1.json
[ {
"user_id" : 1,
"mail" : "aaa@bb.cc",
"zip" : "111-2222",
"addr" : "XXX県",
"tel" : "11-22-3333",
"__DBMFS_TABLE_META_INFOMATION" :
"column_name:user_id,type_name:INT,column_size:10,null_type:NO,seq_type:NO,javaTypeName:java.lang.I
nteger____column_name:mail,type_name:VARCHAR,column_size:255,null_type:YES,seq_type:NO,javaTypeN
ame:java.lang.String____column_name:zip,type_name:VARCHAR,column_size:10,null_type:YES,seq_type:N
O,javaTypeName:java.lang.String____column_name:addr,type_name:VARCHAR,column_size:255,null_type:Y
ES,seq_type:NO,javaTypeName:java.lang.String____column_name:tel,type_name:VARCHAR,column_size:20,
null_type:YES,seq_type:NO,javaTypeName:java.lang.String____pkey_columns_name:user_id"
} ]
機能
・更新系機能
ファイルコピーによるデータ複製
[root@okuyamaoo fusemnt]# cp user/1.json /var/tmp
ファイルペーストによるデータ復元、更新
[root@okuyamaoo fusemnt]# cp /var/tmp/1.json user/
ファイルペーストによるテーブル複製
[root@okuyamaoo fusemnt]# cp /var/tmp/1.json user_tmp/
機能
・更新系機能
別DB間でのコピーによるデータ移行
mount mount
MySQL PostgreSQL
機能
テーブルを異なるDBへ移行可能
テーブル定義なども全て移行されます
MySQL <-> PostgreSQL間も可能です
MySQL PostgreSQL
mount mount
デモ
まとめ
・DbmFsはファイルシステムをインターフェースとした
DB操作用のソフトウェア
・開発時にSQLに精通していない方によるDB操作の補助
・データバックアップやデータ移行の簡略化
・現在パスフレーズからクエリを動的に変更しデータを
返却する仕組みを開発中
Thank you

20151205 中国地方db勉強会 dbm_fs