20151205 中国地方db勉強会 dbm_fs
TRANSCRIPT
自己紹介
・岩瀬 高博 (@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 tel1 [email protected] 111-
2222XXX 県 11-22-3333
2 [email protected] 333-4444
YYY 市 00-11-2222
3 [email protected] 555-6666
ZZZ 町 55-44-6666
4 [email protected] 777-8888
LLLL 県 66-77-8888
レコード
テーブル
データの扱い
ファイルシステムの構造は?
フォルダ
データの扱い
ファイルシステムの構造は?
ファイル
データの扱い
それぞれをマッピング
テーブルをフォルダへ
データの扱い
それぞれをマッピング
レコードをファイルへ
データの扱い
ファイルの中身は Json フォーマットでレコードを表現
[ { "user_id" : 1, "mail" : "[email protected]", "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" : "[email protected]", "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.Integer____column_name:mail,type_name:VARCHAR,column_size:255,null_type:YES,seq_type:NO,javaTypeName:java.lang.String____column_name:zip,type_name:VARCHAR,column_size:10,null_type:YES,seq_type:NO,javaTypeName:java.lang.String____column_name:addr,type_name:VARCHAR,column_size:255,null_type:YES,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" : "[email protected]", "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.Integer____column_name:mail,type_name:VARCHAR,column_size:255,null_type:YES,seq_type:NO,javaTypeName:java.lang.String____column_name:zip,type_name:VARCHAR,column_size:10,null_type:YES,seq_type:NO,javaTypeName:java.lang.String____column_name:addr,type_name:VARCHAR,column_size:255,null_type:YES,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
mountMySQL PostgreSQL
機能
テーブルを異なる DB へ移行可能
テーブル定義なども全て移行されます
MySQL <-> PostgreSQL 間も可能です
MySQL PostgreSQL
mount
mount
デモ
まとめ
・ DbmFs はファイルシステムをインターフェースとした
DB 操作用のソフトウェア
・開発時に SQL に精通していない方による DB 操作の補助
・データバックアップやデータ移行の簡略化
・現在パスフレーズからクエリを動的に変更しデータを
返却する仕組みを開発中
Thank you