利用FUSE把memcached当磁盘使用

     [文章作者:孙立 链接:http://www.cnblogs.com/sunli/ 更新时间:2010-12-27]  

     web2.0的盛行,Memcached 用得越来越广泛。所以也越来越多的产品提供了兼容memcached协议的数据存取方式,我们自己开发的NOSQL也提供了memcached协议的支持。一直在想,是否可以把这个NOSQL直接挂载到磁盘上,这样在某些场合,使用起来就更加方便了。比如cat,vi 都可以直接查看和编辑。

     google了一下 ,有现成的工具memcachefs。所以就测试下了,写篇文章分享下。按照这里http://memcachefs.sourceforge.net/ 进行安装和使用。

 

# ./memcachefs 127.0.0.1:11212 ./mnt

# ls -lh ./mnt

total 0

 -rw-rw-rw- 1 root root 5 Jan  1  1970 aa

 -rw-rw-rw- 1 root root 5 Jan  1  1970 bb

      你可以通过 vi来编辑memcached的数据。然后我又测试了下挂载我们开发的NOSQL(INetDB),也成功了,只是不支持ls命令来列出文件列表,这是因为我们没有实现stats items等遍历命令。

      我通过一个php 脚本执行单线程的测试:

<?php
$start=microtime(true);
for($i=0;$i<10000;$i++){
file_put_contents("key_".$i,"abcdef");

}
echo microtime(true)-$start;
?>

写本地通过memcached挂载的磁盘耗时3.3秒,直接写本地磁盘0.4秒左右。

总结:

      1.通过memcachefs可以把支持memcached 协议的存储当成本地文件一样使用,提供了透明的支持,给不支持memcached协议的命令提供了操作的通道。比如cat ,vi。

      2.利用memcached协议,可以通过  memcachefs挂载到本地磁盘,实现一些特殊场景的应用。比如以前的老系统使用文件缓存,那么可以无缝切换到memcached,而无需更改代码

      3.通过memcached协议开发自己的分布式文件系统,主要是存储一些小文件。由于文件数据太大,所以最好去掉stats items等遍历的功能,以提高性能。

      4.变态应用场景。比如挂载数据库,挂载非存储(一些命令等等)

     注:未测试memcachefs的稳定性和性能,本文主要在提供一种思路。或许在某些时候,能提供一些方便的解决方案。

posted @ 2010-12-27 13:22 草屋主人 阅读(...) 评论(...) 编辑 收藏