
MongoDB
jackfirst86
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Mongodb源码分析--更新记录
<br /> 在之前的一篇文章 中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下:<br /> view plaincopy to clipboardprint?enum Operations { opReply = 1 , /* reply. responseTo is set. */ dbMsg = 1000 , /* generic转载 2011-05-19 08:27:00 · 677 阅读 · 0 评论 -
Discuz!NT千万级数据量上的两驾马车--TokyoCabinet,MongoDB
<br /> <br />在Discuz!NT的企业版设计过程中,处理大数据表一直是一个让人头疼的问题,特别是像主题表(topic),用户表(user)等,因为对于一个流量和发帖量都很大的论坛而言,在运行几年之后,这两个表的数据量可能会破千万(注:因为帖子表采用分表机制,所以这里暂未涉及,但出于性能考虑,也提供了本文中类似的解决方案)。当时考虑的架构设计中有两种思路来解决这种问题:<br /> 一种是采用类似MYSPACE的方式,即按一定记录KEY值(比如用户表的UID)来对大数据表中的记转载 2011-04-01 10:07:00 · 1055 阅读 · 0 评论 -
使用Mongodb存储上传物理文件并进行SQUID加速(基于aspx页面)
<br /> <br />之前在阅读MongoDB GFS文档时,学习了它如何存储物理文件(包括大文件)的方式。为了加深印象,专门写了一个上传文件存储到Mongodb的示例。当然后因为是存储到文档数据库中,所以就不能用普通方式来访问这些物理文件了,这里又专门写了一个aspx页面专门读取这些文件(比如图片或MP3等),所以下载示例之后会看到两个页面,一个是uploadfile.aspx(上传),一个是getfile.aspx(从mongodb中把文件以流的方式读出来)。当然考虑到访问速度,这里还引入了SQ转载 2011-04-01 10:13:00 · 501 阅读 · 0 评论 -
基于Mongodb进行分布式数据存储
<br /> <br />注:本文是研究Mongodb分布式数据存储的副产品,通过本文的相关步骤可以将一个大表中的数据分布到几个mongo服务器上。<br /> MongoDB的1.6版本中auto-sharding功能基本稳定并可以尝试放到生产环境下使用。因为其是auto-sharding,即mongodb通过mongos(一个自动分片模块,用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器)自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点转载 2011-04-01 10:16:00 · 571 阅读 · 0 评论 -
基于Mongodb分布式存储物理文件
<br /> <br />在之前的文章中介绍了如何对关系型数据数据通过auto-sharding进行分布式数据存储,今天介绍如何对物理文件(小文件,基本小于100K)进行分布式存储。<br /> <br /> 接着看一下要配置的测试环境(与前一篇中类似):<br /> 模拟2个shard服务和一个config服务, 均运行在10.0.4.85机器上,只是端口不同: <br /> Shard1:27020<br />转载 2011-04-01 10:27:00 · 707 阅读 · 0 评论 -
基于MongoDB分布式存储进行MapReduce并行查询
<br /> <br />之前的文章中介绍了如何基于Mongodb进行关系型数据的分布式存储,有了存储就会牵扯到查询。虽然用普通的方式也可以进行查询,但今天要介绍的是如何使用MONGODB中提供的MapReduce功能进行查询。<br /> 有关MongoDb的MapReduce之前我写过一篇文章 Mongodb Mapreduce 初窥,<br /> 今天介绍如何基于sharding机制进行mapreduce查询。在MongoDB的官方文档中,这么一句话:转载 2011-04-01 11:16:00 · 763 阅读 · 0 评论 -
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 下载boost源码之后,我把boost解压在D盘。 1.在D:/boost_1_42_0/下找到该批处理文转载 2011-04-01 11:20:00 · 557 阅读 · 0 评论 -
Mongodb源码分析--主程序入口main()
作为这个系列的开篇,本人特此声明,因为本人技术功力有限,且对mongodb源码目前也在研究探索中,可能会对mongodb内部某些实现机制及原作者的意图领会不够精确,因此错误再所难免,希望大家批评指正。另外本文所使用的mongodb源码为1.8 rc1,同时如果有条件的话,大家可以安装vs2010,用C++来编译调试mongodb源码,以便通过运行过程中的数据和流程来验证自己的判断。 VS2010 C++下编译调试MongoDB源码 http://www.cnblogs.转载 2011-04-01 11:21:00 · 556 阅读 · 0 评论 -
mongodb源码分析--查询
在之前的一篇文章中,介绍了mongodb的主程序入口main()的执行流程,其实main只是实始化一些参数信息并做了些后台线程任务的启动工作(包括数据准备和恢复),并最终启动一个线程进行循环侦听。今天将会介绍在mongodb中数据查询 (find)的流程,以了解mongodb是如果对message进行拆包分析,以及数据进行表扫描及索引使用的。 好了,开始今天的正文吧! 这里继续昨天的代码浏览过程,从connThread函数说起,看了上一篇文章的朋友都清楚了该函数主要工作就转载 2011-04-01 11:22:00 · 540 阅读 · 0 评论 -
Mongodb Mapreduce 初窥
<br /> <br />声明:本文是学习Mongodb过程中的副产品,因为接触时间并不长,难免有理解上的偏差,希望借此文与感兴趣的朋友讨论切磋,呵呵。<br /> 去年年底,开始接触并学习Mapreduce模型。因为工作上的关系,最近开始研究Mongodb,其中对其新特性(2010年四月)reduce模型实现产生的兴趣,因为特别留意了一下。当然网上关于该方面的内容并不是很多,且多为EN文,所以我想有必要将学习使用过程中的一些问题作一下记录并加以整理,因为就有了此文。<br />转载 2011-04-01 10:05:00 · 483 阅读 · 0 评论 -
Mongodb源码分析--插入记录及索引B树构建
<br />在之前的一篇文章 中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下:<br /><br /><br /> enum Operations {<br /> opReply = 1 , /* reply. responseTo is set. */ <br /> dbMsg = 1000 , /* gene转载 2011-04-01 10:02:00 · 1077 阅读 · 0 评论 -
Mongodb源码分析--插入记录及索引B树构建
<br /><br />在之前的一篇文章 中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下: enum Operations {<br /> opReply = 1 , /* reply. responseTo is set. */ <br /> dbMsg = 1000 , /* generic msg command fo转载 2011-05-19 08:23:00 · 673 阅读 · 0 评论 -
Mongodb源码分析--删除记录
<br /><br />在之前的一篇文章 中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下: view plaincopy to clipboardprint?enum Operations { opReply = 1, /* reply. responseTo is set. */ dbMsg = 1000, /* generic msg com转载 2011-05-19 08:26:00 · 886 阅读 · 0 评论 -
Mongodb源码分析--更新记录
<br /> 在之前的一篇文章 中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下:<br /> view plaincopy to clipboardprint?enum Operations { opReply = 1 , /* reply. responseTo is set. */ dbMsg = 1000 , /* generic转载 2011-05-19 08:28:00 · 717 阅读 · 0 评论 -
Mongodb源码分析--内存文件映射(MMAP)
<br />在Mongodb中,其使用了操作系统底层提供的内存映射机制,即MMAP。MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息 位置就会在内存中有对应的地址空间,这时对文件的读写可以直接用指针来做,而不需要read/write函数了。同时操作系统会将数据刷新保存到磁盘上。 如下图:<br /> <br /> 鉴于linux,window系统为mmap所提供的API大同小异(见下图)。这里仅以mongodb对window系统的mmap调用机制为例,来说 明一下转载 2011-05-19 09:27:00 · 853 阅读 · 0 评论 -
Mongodb源码分析--消息(message)
<br />在Mongodb中,客户端和服务端进行通信是基于mongodb wire protocol 。说白了,该协议是一个简单的基于socket,请求/响应方式的协议,客户端使用常规的TCP/IP套接字(socket)进行通信。<br /><br /> 客户端与服务端使用约定的消息(格式)进行通信,其消息头结构与C语言中的struct类似。具体的代码(位于message.cpp):<br /> <br /> view plaincopy to clipboardprint?stru转载 2011-05-19 08:25:00 · 596 阅读 · 0 评论 -
Mongodb源码分析--游标Cursor
<br /><br /> 在Mongodb中,其提供了类似关系型数据中cursor对象来遍历数据集合,同时mongodb并要根据不同的场景生成不同的游标对象 (cursor),比如顺序遍历游标(basicCursor),反向游标(reverseCursor), B树索引游标(btreeCursor)等。 下面是其游标体系架构类图(位于cursor.cpp, cursor.h, clientcursor.cpp, clientcursor.h):<br /> <br /> 从该图中,可以看到转载 2011-05-19 09:00:00 · 638 阅读 · 0 评论 -
Mongodb源码分析--Command体系架构
<br />Command在Mongodb中是一类特殊操作,它提供了强大的管理及各项操作(比如建库,索引,删除集合等)。可以说通过Command可以完成几乎 所有想做的事情。同时Mongodb开发者在Command上又做了非常清晰体系架构和设计,便于管理和高效执行各种类型的Command。<br /> 今天就专门用一篇篇幅来着重介绍一下其Command的体系架构,并用例子来介绍mongod是如何将Command引入其中的。<br /> <br /> 为了对其中大部分command对一个大转载 2011-05-19 09:29:00 · 748 阅读 · 0 评论 -
mongodb小结
<br />用了一阵子mongodb,作一些小结,作为将来的参考。按照以往的习惯,先作一个总览,然后再挑出一些自己比较关注的几个点,作为珠玑,加以串联阐述。<br />mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理。关于它的一个最简洁描述为:scalable, high-performance, open source, schema-free, document-oriented database。我对于文档型数据库有一些个人转载 2011-04-01 09:12:00 · 402 阅读 · 0 评论 -
Mongodb源码分析--日志及持久化
在本系列的第一篇文章(主函数入口)中,介绍了mongodb会在系统启动同时,初始化了日志持久化服务,该功能貌似是1.7版本后引入到系统中的,主要用于解决因系统宕机时,内存中的数据未写入磁盘而造成的数据丢失。其机制主要是通过log方式定时将操作日志(如cud操作等)记录到db的journal文件夹下,这样当系统再次重启时从该文件夹下恢复丢失的(内存)数据。也就是在_initAndListen()函数体(db.cpp文件第511行)中下面这一行代码: dur::startup(); 今天就以转载 2011-04-01 11:24:00 · 551 阅读 · 0 评论