免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8241 | 回复: 0

[C++] boost.asio开发的key-value服务 [复制链接]

论坛徽章:
0
发表于 2011-04-27 14:34 |显示全部楼层
本帖最后由 bs 于 2011-10-17 16:33 编辑

最近闲来捣鼓了一下boost以及其asio库,总体感觉boost是越来越全面了,
很多时候在开发效率上已经接近java,故花时间弄一个key-value服务,结果
勉强不算太差,核心环节主要是AIO以及多线程,故斗胆献丑请大家多多指教。











Memcpp v1.0.0
特点:
一、Memcpp内建定时清理机制,保证非过期数据安全,正常情况不会以任何方式删除数据。
二、Memcpp采用高性能异步IO网络连接,支持多线程大并发访问。
三、Memcpp支持Memcached协议下常用的set、get、delete、add、replace操作。
四、Memcpp性能较为接近Memcached,综合性能达到单线程Memcahed的90%。
五、完全兼容windows以及linux等平台。



技术细节:
一、使用boost::asio异步IO,更强的并发连接能力。
二、连接环节session使用boost:bject_pool(对象池)+boost::shared_ptr(智能指针)方式,确保连接对象稳定与高性能。
三、兼容Memcached通讯协议。
四、对数字与字符键进行分离存储,区别优化。
五、存储层采用boost::pool_allocator内存池分配技术,保证高性能以及避免内存碎片产生。
六、存储间使用读写锁保障线程同步与安全。
七、使用boost::unordered_map高速存储介质(hash表)。
八、内建Timer定时清理过期数据。
九、全部采用c++ boost或stl标准库,兼容完好。

流程图:


Linux环境下简单性能测试与对比:
这边使用一个php脚本:

  1. $mem = new Memcache();
  2. //Memcpp
  3. connect('127.0.0.1', 11210);
  4. //Memcached
  5. //$mem->connect('localhost', 11211);

  6. $t = microtime(true);
  7. for($i = 0; $i < 50000; ++$i ) $mem->set($i,'test');
  8. for($i = 0; $i < 50000; ++$i ) $mem->get($i);
  9. echo '  run time:' ,microtime(true) - $t;
复制代码
分别对Memcpp和Memcached测试50000条读写操作,性能对比结果如下(秒):
//Memcpp
run time:2.4199938774109

//Memcached
run time:2.1138839607239

结论:
由于保守地使用了读写锁,Memcpp综合性能相较Memcached要逊色一些,其次在Linux下使用异步IO方面,boost.asio的性能还是不如libevent强大。


blog:
http://lajabs.net/memcpp





./bin/Release windows生成的可执行文件 Memcpp.exe
./linux linux下的安装文件,直接
# make


运行方法 程序名 listen IP port

linux
# memcpp 127.0.0.1 11210

windows
&gt; memcpp 127.0.0.1 11210
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP