利用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的稳定性和性能,本文主要在提供一种思路。或许在某些时候,能提供一些方便的解决方案。