Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

MySQLをファイルシステムとして使う

2008年02月21日 09:39 Ben-Martin(2008年2月15日(金)) 1 2 3

 FUSEでは非正規な動作を行うファイルシステムでもマウントできるため、カスタムFUSEファイルシステムのマウントは、通常、fuseグループに明示的に追加されたユーザーに制限される。次に示す手順は、FUSEファイルシステムをマウントしようとして拒否され、対処しているところだ。この場合、自身をfuseグループに追加してからログインしなければならない。MySQLfsファイルシステムとデータベースは当初は空だが、dfコマンドを実行すると、カーネルがこのファイルシステムのマウントを認識していることがわかる。最後にfusermountコマンドで、ユーザーが作成したFUSEファイルシステムをアンマウントしている。

$ mkdir ~/mysqlfs
$ mysqlfs -ohost=localhost  -odatabase=mysqlfs ~/mysqlfs
* Opening logfile 'mysqlfs.log':  OK
fuse: failed to open /dev/fuse: Permission denied
$ su -l
root# usermod -a -G fuse ben
root# exit
$ exit
...
$ id
uid=500(ben) gid=500(ben) groups=492(fuse), ...
$ mysqlfs -ohost=localhost  -odatabase=mysqlfs ~/mysqlfs
* Opening logfile 'mysqlfs.log':  OK
$ ls -ld mysqlfs
drwxr-xr-x 1 root root 0 2008-01-24 16:24 mysqlfs
$ df -h mysqlfs .
Filesystem            Size  Used Avail Use% Mounted on
mysqlfs                  0     0     0   -  /home/ben/mysqlfs
/dev/sdc3              16G  4.4G   11G  31% /home
$ ls -l mysqlfs
total 0
$ fusermount -u mysqlfs

 以上でMySQLをファイルシステムとしてマウントする環境が整った。次に、ファイルをMySQLデータベースにコピーし、ファイルシステムを操作してみよう。下に示した例では、まず、Project Gutenbergのテキスト・ファイルをMySQLfsにコピーし、読み出してMD5チェックサムが一致することを確認。次いで、44MBもあるLinuxソースのtarballをMySQLfsにコピーしてパフォーマンスを調べている。

 ディスク・キャッシュが空の状態のとき、/tmpにあるtarballを同じ/tmp上でバックアップするには約2秒かかっている。MySQLfsにコピーした場合は約20秒だ。直後に同じテストを行うと、tarballがディスク・キャッシュに残っているため、/tmp上でのバックアップは約0.3秒に短縮したが、MySQLfsへのコピーは20秒で変わらない。これは、MySQLfsにとって書き込みのパフォーマンスが大きな障害になりうることを示している。一方、読み出しのテスト結果を見ると、MySQLでも一部のデータをキャッシュしているようだ。テストを繰り返すと処理時間が短くなる。このことから、読み出しの多いファイルシステムであれば、MySQLfsは検討に値すると思われる。MySQLのキャッシュ機能を活用できるからだ。

~]$ cp -av /.../guten ./mysqlfs/
`/.../guten' -> `./mysqlfs/guten'
`/.../guten/alice13a.txt' -> `./mysqlfs/guten/alice13a.txt'
`/.../guten/boysw10.txt' -> `./mysqlfs/guten/boysw10.txt'
`/.../guten/dmoro11.txt' -> `./mysqlfs/guten/dmoro11.txt'
~]$ cd ~/mysqlfs/guten
guten]$ ls -l
-rw-r----- 1 ben ben 153477 2008-01-12 13:23 alice13a.txt
-rw-rw---- 1 ben ben  48923 2008-01-12 13:23 boysw10.txt
-rw-rw---- 1 ben ben 259214 2008-01-12 13:23 dmoro11.txt
guten]$ md5sum *
135e06ad31b169065bccbf03ec7236f2  alice13a.txt
7dd30f1b37e32cdb5d21fe992bbf248d  boysw10.txt
87c05f11193c0e05b3d0dec0808a0450  dmoro11.txt
guten]$ md5sum /.../guten/*
135e06ad31b169065bccbf03ec7236f2  /.../guten/alice13a.txt
7dd30f1b37e32cdb5d21fe992bbf248d  /.../guten/boysw10.txt
87c05f11193c0e05b3d0dec0808a0450  /.../guten/dmoro11.txt
guten]$ cd ..
mysqlfs]$ time cp /tmp/linux-2.6.23.tar.bz2 .
real    0m16.278s
user    0m0.006s
sys     0m0.531s
mysqlfs]$ time cat linux-2.6.23.tar.bz2  >/dev/null
real    0m0.502s
user    0m0.004s
sys     0m0.035s
mysqlfs]$ time dd if=linux-2.6.23.tar.bz2 of=/tmp/junk bs=1024 count=1024
1048576 bytes (1.0 MB) copied, 0.0200973 s, 52.2 MB/s

real    0m0.058s
user    0m0.003s
sys     0m0.013s
mysqlfs]$ time dd if=linux-2.6.23.tar.bz2 of=/tmp/junk bs=1024 count=1024 skip=9000
1048576 bytes (1.0 MB) copied, 0.0214207 s, 49.0 MB/s

real    0m0.031s
user    0m0.001s
sys     0m0.011s
最終更新:2008年04月22日 17:07