随锐旗下互动传媒:

将MySQL作为文件系统使用

http://www.weaseek.com  2008-02-21 17:04:35  来源:IT168

  因为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/gutenguten]$ 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.txtguten]$ md5sum *135e06ad31b169065bccbf03ec7236f2  alice13a.txt7dd30f1b37e32cdb5d21fe992bbf248d  boysw10.txt87c05f11193c0e05b3d0dec0808a0450  dmoro11.txtguten]$ md5sum /.../guten/*135e06ad31b169065bccbf03ec7236f2  /.../guten/alice13a.txt7dd30f1b37e32cdb5d21fe992bbf248d  /.../guten/boysw10.txt87c05f11193c0e05b3d0dec0808a0450  /.../guten/dmoro11.txtguten]$ cd ..mysqlfs]$ time cp /tmp/linux-2.6.23.tar.bz2 .real    0m16.278suser    0m0.006ssys     0m0.531smysqlfs]$ time cat linux-2.6.23.tar.bz2  >/dev/nullreal    0m0.502suser    0m0.004ssys     0m0.035smysqlfs]$ 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.058suser    0m0.003ssys     0m0.013smysqlfs]$ time dd if=linux-2.6.23.tar.bz2 of=/tmp/junk bs=1024 count=1024 skip=90001048576 bytes (1.0 MB) copied, 0.0214207 s, 49.0 MB/s real    0m0.031suser    0m0.001ssys     0m0.011s

[责任编辑:海燕]热门关键词: MySQL 数据库 系统

相关文章