您好,欢迎访问一九零五行业门户网

将MySQL的作为文件系统使用(2)_MySQL

bitscn.com
 因为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安装为fuse文件系统,接下来,让我们复制一些文件到mysql数据库中,使之与文件系统相结合。在下面的例子中,我将项目gutenberg的一些文本文件复制到mysqlfs并验证它们在读取的时候,与原始文件有同样的md5返回值。然后,我将linux文件tarbar复制到mysqlfs,想看看mysqlfs是如何处理一个44m文件的。
通过冷磁盘高速缓存将内核从/tmp目录备份到/tmp目录需要花2秒,而将之复制到mysqlfs将花费20秒,为了利用磁盘中的缓存,马上将上述操作再次执行,/tmp目录下的备份花费0.3秒,而复制到mysqlfs中依旧花费20秒。这说明,写操作是mysqlfs的主要瓶颈。当读取内核的时候,mysqlfs似乎缓存了一些数据,这使得响应时间大大快于其他测试。如果你的文件系统经常用到读操作,则mysqlfs将是一个有意思的选择,因为mysqlfs的缓存可以派上用场。
~]$ 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
虽然被很多人所不齿,但我还是决定在bonnie++文件系统下使用mysqlfs。我通过虚拟机进行了这些测试,由于是在虚拟机中,性能可能会呈线性下降,但由于mysql数据库和/tmp目录存储于同一虚拟硬盘上,其性能比还是有效的。
在如下的结果中,你能看到,在运行bonnie++ (version 1.03a-7)时,mysqlfs的速度是/tmp/bonnie (ext3)的十分之一。这说明,我们并不太想使用mysqlfs来直接存储邮件目录。bonnie++被设计成适合在本地内核文件系统上工作而非fuse,这种定位非常适用于大行文件的读写。
$ /usr/sbin/bonnie++ -d /tmp/bonnie
version
           1.03
                ------sequential output------ --sequential input- --random-
-per chr- --block-- -rewrite- -per chr- --block-- --seeks--
machine
                 size k/sec %cp k/sec %cp k/sec %cp k/sec %cp k/sec %cp
           /sec %cp
v8tsrv
                    2g 18155
           31 16726
            5 13338
            6 26207
           46 74527
           24
           9840 144
------sequential create------ --------random create--------
-create-- --read--- -delete-- -create-- --read--- -delete--
files
           /sec %cp
           /sec %cp
           /sec %cp
           /sec %cp
           /sec %cp
           /sec %cp
16 24878
           94 +++++ +++ +++++ +++ 29018
           99 +++++ +++ +++++ +++
$ /usr/sbin/bonnie++ -d ~/mysqlfs/bonnie
version
           1.03
                ------sequential output------ --sequential input- --random-
-per chr- --block-- -rewrite- -per chr- --block-- --seeks--
machine
size k/sec %cp k/sec %cp k/sec %cp k/sec %cp k/sec %cp
           /sec %cp
v8tsrv
                    2g
           2615
            5
           1207
            1
           1323
            1
           2143
            2
           2363
            0 138.1
            0
------sequential create------ --------random create--------
-create-- --read--- -delete-- -create-- --read--- -delete--
files
           /sec %cp
           /sec %cp
           /sec %cp
           /sec %cp
           /sec %cp
           /sec %cp
16
            186
            2
            505
            1
            296
            2
            209
            2
            441
            1
            282
            2
bitscn.com
其它类似信息

推荐信息