摘要:
在本系列的第一篇文章(主函数入口)中,介绍了mongodb会在系统启动同时,初始化了日志持久化服务,该功能貌似是1.7版本后引入到系统中的,主要用于解决因系统宕机时,内存中的数据未写入磁盘而造成的数据丢失。其机制主要是通过log方式定时将操作日志(如cud操作等)记录到db的journal文件夹下,这样当系统再次重启时从该文件夹下恢复丢失的(内存)数据。 阅读全文
摘要:
在之前的一篇文章中,介绍了mongodb的主程序入口main()的执行流程,其实main只是实始化一些参数信息并做了些后台线程任务的启动工作(包括数据准备和恢复),并最终启动一个线程进行循环侦听。今天将会介绍在mongodb中数据查询 (find)的流程,以了解mongodb是如果对message进行拆包分析,以及数据进行表扫描及索引使用的。 阅读全文
摘要:
作为这个系列的开篇,本人特此声明,因为本人技术功力有限,且对mongodb源码目前也在研究探索中,可能会对mongodb内部某些实现机制及原作者的意图领会不够精确,因此错误再所难免,希望大家批评指正。另外本文所使用的mongodb源码为1.8 rc1,同时如果有条件的话,大家可以安装vs2010,用C++来编译调试mongodb源码,以便通过运行过程中的数据和流程来验证自己的判断。 阅读全文
摘要:
考虑到mongodb使用了boost库源码,参考mongodb官方文档后,下载编译boost版本是1.42(时间为2010-2-2)或更新版本:
boost版本1.42:
http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download 阅读全文
摘要:
之前在网上看过memcache-mutex的场景分析和实现代码,这里将.net方式加以实现,当然这里主要是依据原文的伪代码照猫画虑,以作为总结及记录。如果您对相应实现感兴趣可以尝试使用本文提供的代码进行测试,如果有问题请及时与我联系。
原文链接:http://timyang.net/programming/memcache-mutex/ 阅读全文
摘要:
原文链接:http://timyang.net/programming/memcache-mutex/场景 Mutex主要用于有大量并发访问并存在cache过期的场合,如 首页top 10, 由数据库加载到memcache缓存n分钟微博中名人的content cache, 一旦不存在会大量请求不能命中并加载数据库需要执行多个IO操作生成的数据存在cache中, 比如查询db多次 问题 在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险。我 们曾经在线上系统出现过类似故障。 解决方法 方法一 在load db之 阅读全文
摘要:
在之前的Discuz!NT缓存的架构方案中,曾说过Discuz!NT采用了两级缓存方式,即本地缓存+memcached方式。在近半年多的实际运行环境下,该方案经受住了检验。现在为了提供多样式的解决方案,我在企业版里引入了Redis这个目前炙手可热的缓存架构产品,即将memcached 与Redis作为可选插件方式来提供了最终用户,尽管目前测试的结果两者的差异不是很大(毫秒级),但我想多一种选择对用户来说也是好的。 阅读全文
摘要:
注:关于如何在windows,linux下配置redis,详见这篇文章:)
目前网上有一些链接Redis的C#客户端工具,这里介绍其中也是目前我们企业版产品中所使用的ServiceStackRedis, 链接地址: 阅读全文
摘要:
为了方便查阅资料,特将网上搜索到的Redis相关安装配置进行归档整理:
1.window平台Redis安装
2.linux平台Redis安装
3.配置文件参数说明
4.问题讨论 阅读全文
摘要:
c:\dir /ahs 阅读全文
摘要:
最近在拜读潘爱民老师的《windows 内核原理与实现》一书,在看其“内存管理概述”一章中,也就是书中第183页时,发现其“段描述符格式”一图不是很直观,在反复阅读书中相关上下文内容时,发现理解上还是有些模糊,主要还是相应地址位用途不太清楚(图中蓝笔问号部分),原图如下: 阅读全文
摘要:
当然这一年也是兴趣和关注领域发生变化较大的一年。首先是暂停了对silverlight产品和相关开发领域的研究学习,将更多精力转投到了海量数据操作,检索方面。同时开始关注和使用nosql领域的相关技术产品,开始在产品中因地制宜的引入了nosql数据产品,比如tokyotyrant,mongodb等,同时为了加深理解和更好的使用它们,开始研究相应代码(又拿起了放下多年的C和C++)。 阅读全文
摘要:
在中国社会中,普通人没法子独立自主地追求尊严和幸福的生活,人与人之间便形成了一种"看"与 "被看","杀"与"被杀",的窝里斗劣根性。"看"就是幸灾乐祸旁观别人的倒霉,"被看"就是被别人幸灾乐祸地旁观自己的倒霉,"杀"就是为了一己私利 杀别人,"被杀"就是在夺私利中败下阵来被别人杀掉。因为中国人之间既无人权意识又无法制来保障自己的人权,所以只能从生到死在自己的圈子中不断地结党营 私与别人的圈子明争暗斗,简明扼要地讲便是中国人为了保护自己的利益不被他人侵害,只能经营自己在社会中的人际关系网。比如中国人打官司,他们首先想到的 不是求助司法的公正,而是求助自己的人际关系网,找硬后台来替自己打赢官司,因为在中国司法权都操控在关系网中的掌权者手中。 阅读全文
摘要:
北国沧桑,千米长队,万人首翘。望龙泽大军,人流莽莽,车厢上下,骂声滔滔。大包小包,男女老少,金鸡站立试比高。须分流,看黑车白车,生意火爆。
城铁如此多娇,引无数乘客掏腰包。惜秦皇汉武,日头晒爆,唐宗宋祖,被雨水浇。一代天娇,成吉思汗,也得排队往前稍。俱往矣,数人流长流,龙泽今朝。
阅读全文
摘要:
之前的文章中,介绍了如何将RabbitMQ以WCF方式进行发布。今天就介绍一下我们产品中如何使用RabbitMQ的!在Discuz!NT企业版中,提供了对HTTP错误日志的记录功能,这一点对企业版非常重要,另外存储错误日志使用了MongoDB,理由很简单,MongoDB的添加操作飞快,即使数量过亿之后插入速度依旧不减。在开始正文之前,先说明一下本文的代码分析顺序,即:程序入口==》RabbitMQ客户端===>RabbitMQ服务端。好了,闲话少说,开始正文!
首先是程序入口,也就是WCF+RabbitMQ客户端实现: 阅读全文
摘要:
在之前的两篇文章中,主要介绍了RabbitMQ环境配置,简单示例的编写。今天将会介绍如何使用WCF将RabbitMQ列队以服务的方式进行发布。注:因为RabbitMQ的官方.net客户端中包括了WCF的SAMPLE代码演示,很适合初学者,所以我就偷了个懒,直接对照它的SAMPLE来说明了,算是借花献佛吧,呵呵。首先我们下载相应源码(基于.NET 3.0),本文主要对该源码包中的代码进行讲解,链接如下: 阅读全文
摘要:
在上一篇文章中,介绍了在window环境下安装erlang,rabbitmq-server,以免配置用户,权限,虚拟机等内容。今天将会介绍如果使用rabbitmq进行简单的消息入队,出队操作,因为本文演示的环境要用到上文中配置的环境,所以要运行本文sample,请先按上一篇中完成相应环境配置。首先,我们下载官方的.net客户端软件,链接:http://www.rabbitmq.com/dotnet.html.下载并安装之后,将安装目录下的这两个DLL文件复制到我们示例项目中,并添加引用: 阅读全文
摘要:
这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战。当然不排除加餐情况。 介绍:rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。他遵循Mozilla Public License开源协议。采用 Erlang 实现的工业级的消息队列(MQ)服务器。
RabbitMQ的官方站:http://www.rabbitmq.com/ 阅读全文
摘要:
之前的文章中介绍了如何基于Mongodb进行关系型数据的分布式存储,有了存储就会牵扯到查询。虽然用普通的方式也可以进行查询,但今天要介绍的是如何使用MONGODB中提供的MapReduce功能进行查询。有关MongoDb的MapReduce之前我写过一篇文章 Mongodb Mapreduce 初窥,今天介绍如何基于sharding机制进行mapreduce查询。在MongoDB的官方文档中,这么一句话: 阅读全文
摘要:
在之前的文章中介绍了如何对关系型数据数据通过auto-sharding进行分布式数据存储,今天介绍如何对物理文件(小文件,基本小于100K)进行分布式存储。接着看一下要配置的测试环境(与前一篇中类似):模拟2个shard服务和一个config服务, 均运行在10.0.4.85机器上,只是端口不同: 阅读全文