(看完这个文章,想对源码有进一步了解,可以到我的git里面看注释,或者邮件我讨论。附上地址:https://github.com/PhoneLi/beansdb)
在开始看这篇文章之前,建议花几分钟看下beansdb的结构分析。
beansdb的结构分析:http://blog.csdn.net/l402398703/article/details/19371515
简述:
1:数据存储实现。bitcask储存模型,HashTree 实现数据索引。
2:协议实现。使用memcached的代码;修改redis的AE事件异步驱动库;多worker线程, leader/follower 模式;
(leader/follower模式介绍:http://www.habadog.com/2012/01/11/leader-follower-thread-model
bitcask模型介绍:http://blog.nosqlfan.com/html/955.html)
(由上图看出,数据冗余直接在服务server之间实现。采用3为冗余数量。)
--------------------------==============水平分割线=================------------------------------
运行流程:
1:beansdb.c的main函数启动;
2:getopt处理各参数;
3:一些资源的初始化,例如 getrlimit() , item_init(); stats_init(); conn_init();(资源参数很多,建议不要花事件耗在这里。等看完后面的函数代码,便会自然理解参数的含义。);
4:hs_open函数 {
打开数据目录(没有则创建),hstore的初始化。函数结尾调用parallelize函数;
parallelize函数:启动一些线程运行scan_thread,每个scan_thread