boost.asio开发的key-value服务
本帖最后由 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脚本:
- $mem = new Memcache();
- //Memcpp
- connect('127.0.0.1', 11210);
- //Memcached
- //$mem->connect('localhost', 11211);
- $t = microtime(true);
- for($i = 0; $i < 50000; ++$i ) $mem->set($i,'test');
- for($i = 0; $i < 50000; ++$i ) $mem->get($i);
- 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强大。
./bin/Release windows生成的可执行文件 Memcpp.exe
./linux linux下的安装文件,直接
# make
运行方法 程序名 listen IP port
linux
# memcpp 127.0.0.1 11210
windows
> memcpp 127.0.0.1 11210
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论