当前位置:  数据库>nosql
本页文章导读:
    ▪mongodb数据文件格式      本文适合于对mongodb有一定了解的朋友阅读。mongodb的数据文件存在dbpath选项指定的目录里。每个库(database)都有一系列的文件:dbname.ns, dbname.0, dbname.1, ...数据文件也叫pdfile,意思是Portable Data Fil.........
    ▪在Window平台安装MongoDB      本文介绍如何安装在windows 7中安装MongoDB。注:MongoDB并不像Windows上安装其他软件,只需要下载Zip包并解压,然后配置数据存放目录并启动即可。1.下载MongoDB从MongoDB官方网站,根据你的平台选.........
    ▪mongodb journal文件格式      如果开启journal,在dbpath选项指定的目录下会创建journal目录来存放journal文件,文件名形如j._<n>。journal文件存储的是对数据库文件(dbname.ns、dbname.<#>系列文件)的修改日志,包括写操.........

[1]mongodb数据文件格式
    来源:    发布时间: 2013-10-18

本文适合于对mongodb有一定了解的朋友阅读。

mongodb的数据文件存在dbpath选项指定的目录里。每个库(database)都有一系列的文件:dbname.ns, dbname.0, dbname.1, ...数据文件也叫pdfile,意思是Portable Data File。

dbname.ns文件

dbname.ns文件存储命名空间信息。在mongodb里,每个collection都具有一个命名空间,名字为dbname.collection_name。dbname.ns文件存储的是一个哈希表节点数组。key是根据命名空间的名字,value是命名空间信息。哈希表节点的大小是628字节,dbname.ns文件的默认大小是16M,一共可以存放26715个命名空间。nssize选项可以设置dbname.ns文件的大小。

相关代码类

  • NamespaceIndex NamespaceIndex is the ".ns" file you see in the data directory
  • NamespaceDetails 命名空间信息,存储在哈希表节点里面。
  • HashTable 哈希表实现

dbname.<#>系列文件

dbname.<#>系列文件存储了每个库的所有数据,其文件格式为

--------------------------------------------
DataFileHeader
--------------------------------------------
Extent (for a particular namespace)
Record
...
Record (some chained for unused space)
--------------------------------------------
more Extents...
--------------------------------------------

DataFileHeader是数据文件的头部,后面的部分为Extent。文件空间的分配以Extent为单位。每个命名空间的所申请的Extent形成一个双向链表,表头和表尾存在命名空间信息里。Record即记录,在Extent里分配,每个Extent里的所有Record形成一个双向链表,表头和表尾存在Extent头部。可以想到,对命名空间的所有Record的遍历方法为:遍历Extent链表,对每个Extent,遍历其Record链表。空闲的Record(Extent里剩余的空间、或者Record被删除),称作DeleteRecord,根据其大小,形成19个单向链表(表头也存在命名空间里)。可以想到,申请一个Record的方法:先从空闲的Record里面找;如果找不到,则分配新的Extent。

当一个命名空间被删除的时候,它的所有的Extent都会挂到名为$freelist的collection的Extent链表中。那么,分配Extent的时候,会先从$freelist的Extent链表中寻找。如果找不到,就申请新的Extent。

相关代码类

  • DataFileHeader
  • Extent
  • DeletedRecord、Record

本文链接


    
[2]在Window平台安装MongoDB
    来源:    发布时间: 2013-10-18
本文介绍如何安装在windows 7中安装MongoDB。注:MongoDB并不像Windows上安装其他软件,只需要下载Zip包并解压,然后配置数据存放目录并启动即可。

1.下载MongoDB

从MongoDB官方网站,根据你的平台选择对应的windows的压缩包并解压,本文解压到D:\mongodb\。

 

注:如果需要在命令行中快速使用MongoDB bin目录下的命令,可以将D:\mongoDB\bin加入到Window环境变量。

2.配置数据文件

在D:\mongodb\创建mongo.config文件,如下(并在d:\mongodb目录下新建data,log文件夹)
##数据存储的位置
dbpath=D:\mongodb\data
 
##所有的输出位置
logpath=D:\mongodb\log\mongo.log
 
##日志读写操作
diaglog=3

3.运行MongoDB Server

在命令控制行,切换到d:\mongodb\bin目录下,使用命令mongod.exe --config d:\mongdb\mongo.config启动MongoDb Server。
D:\mongodb\bin>mongod.exe --config d:\mongodb\mongo.config
all output going to: D:\mongodb\log\mongo.log

4.连接MongoDB

新开启一个命令行控制窗口,使用mongo.exe连接MongoDB Server.

5.设置MongoDB为Windows服务

在命令行控制窗口,加入--install选项可以把MongoDB安装为Windows服务。
D:\mongodb\bin>mongod.exe --config d:\mongodb\mongo.config
启动MongoDB的命令为:net start MongoDB

停车MongODB的命令为:net stop MongoDB

删除MongoDB的命令为:mongod --remove

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 在Window平台安装MongoDB

本文链接


    
[3]mongodb journal文件格式
    来源:    发布时间: 2013-10-18

如果开启journal,在dbpath选项指定的目录下会创建journal目录来存放journal文件,文件名形如j._<n>。

journal文件存储的是对数据库文件(dbname.ns、dbname.<#>系列文件)的修改日志,包括写操作和创建文件操作。对数据库文件的写操作会记录一个WriteIntent,创建数据库文件会记录一个DurOp。WriteIntent记录了写操作的指针和长度,可以定位到修改的数据文件的位置和长度。DurOp由一个操作码来确定是什么操作,不同的操作,日志的格式不一样。每个WriteIntent或者DurOp都会形成一个JEntry。

struct WriteIntent { /* copyable */

private:
void *p; // intent to write up to p
unsigned len; // up to this len
};

class DurOp { /* copyable */
public:

/** serialize the op out to a builder which will then be written (presumably) to the journal */
void serialize(AlignedBuilder& ab);


virtual void replay() = 0;

protected:
/** DurOp will have already written the opcode for you */
virtual void _serialize(AlignedBuilder& ab) = 0;

private:
const unsigned _opcode;
};

journal文件由一个头部JHeader和很多Section组成,每次group commit都会产生一个Section。Section由一个头部JSectHeader、很多个JEntry和一个JSectFooter组成,每个JEntry代表一条修改日志。另外,JEntry前面可能会有一个JDbContext,表示修改的是哪个数据文件。如果多个JEntry都是同一个数据文件的操作,则只有一个JDbContext。除掉JSectHeader 和JSectFooter ,Section中间那部分会压缩。

 

JHeader

beginning header for a journal/j._<n> file
there is nothing important int this header at this time. except perhaps version #.

char magic[2]"j\n". j means journal, then a linefeed, fwiw if you were to run "less" on the file or something...unsigned short _version0x4149char n1'\n'char ts[20]ascii timestamp of file generation.  for user reading, not used by code. for example: "Jan 29 14:14:23"char n2'\n'char dbpath[128]path/filename of this file for human reading and diagnostics.  not used by codechar n3, n4'\n', '\n'unsigned long long fileIdunique identifier that will be in each JSectHeader. important as we recycle prealloced fileschar reserved3[8026]8KB total for the file headerchar txt2[2]"\n\n" at the end

头部的大部分字段都是可读的,很直观,用文本文件打开可以看到。

JSectHeader

"Section" header. A section corresponds to a group commit.len is length of the entire section including header and footer.header and footer are not compressed, just the stuff in between.

unsigned _sectionLenunpadded length in bytes of the whole sectionunsigned long long seqNumbersequence number that can be used on recovery to not do too much workunsigned long long fileIdmatches JHeader::fileId

_sectionLen是unpadded的长度,每个Section都会填充对齐。

每个Section都会有一个seqNumber,其值是上次同步数据库文件到磁盘的服务器时间,会不断增长。LSNFile(文件名是lsn)里面也存储了一个seqNumber,含义是一样的。恢复数据的时候,如果Section的seqNumber小于LSNFile的seqNumber,则不需要恢复。

JEntry

an individual write operation within a group commit section. Either the entire section should be applied, or nothing. (We check the md5 for the whole section before doing anything on recovery.)

unsigned len length in bytes of the data of the JEntry. does not include the JEntry header. 实际就是数据data的长度OpCodes opcode此字段和上面len字段共用的。如果是对数据库文件的修改,则为长度len;否则为操作类型。unsigned ofsoffset in file. 指的是被修改的数据文件的偏移量int _fileNo
high bit is set to indicate it should be the <dbpath>/local database. dbname.#文件中的数字,即#。
如果是dbname.ns文件,则值为0x7fffffff。高位bit为1表示是local库。
char data[]更新的数据

 OpCodes的取值

OpCode_FooterJSectFooter的sentinel字段的取值OpCode_DbContextJDbContext的sentinel字段的取值OpCode_FileCreated表示创建pdfile的操作OpCode_DropDb表示dropDb的操作,目前没有使用

这几个取值都很大,因为跟JEntry的len是共用,必须比可能的长度值大得多
事实上JEntry、JDbContext和JSectFooter的前4字节是含义是相同的。这样比较容易解析。

当JEntry为Op时,格式根据不同的Op而变化,如OpCode_FileCreated的格式为

OpCodes opcodeOpCode_FileCreatedunsigned long long reserved1 unsigned long long reserved2 unsigned long long _lensize of file, not length of nameRelativePath _p文件名的相对路径,以'\0'结尾的字符串

 

JDbContext

declares "the next entry(s) are for this database / file path prefix"

sentinel哨兵值,为了解析方便,为OpCode_DbContextfile pathdbname.#文件的相对路径,相对于dbpath,以'\0'结尾的字符串。使用相对路径是为了节省空间

 


    
最新技术文章:
▪30G 的redis 如何优化 - 沐訫    ▪[教程]MongoDB 从入门到进阶 (User系统) - magicD...    ▪Redis使用总结之与Memcached异同 - ceecy
▪MongoDB学习 (六):查询 - 辞职回家卖烧饼    ▪在.net中使用aquiles访问Cassandra(一) - amwicfai    ▪在.net中使用aquiles访问Cassandra(二) - amwicfai
▪高性能队列Fqueue的设计和使用实践 - 蒋叶湖    ▪MongoDB开发学习 - 喵 喵    ▪MongoDB开发学习 - 喵 喵
▪Spring-MongoDB简单操作 - CN.programmer.Luxh    ▪MongoDB 聚合 - 蒋叶湖    ▪nosql数据库 - 蒋叶湖
▪Spring-MongoDB简单操作    ▪Redis源码研究--字典    ▪Redis源码研究--字典 - feiyunruyue
▪[译]Cassandra 架构简述    ▪[译]Cassandra 架构简述    ▪Spring-MongoDB简单操作
▪MongoDB 聚合    ▪NoSQL生态系统    ▪NoSQL生态系统
▪nosql数据库    ▪mongodb持久化    ▪MongoDB 聚合
▪CentOS 6上的redis搭建实战记录    ▪非关系型数据库的研究与实践    ▪高性能队列Fqueue的设计和使用实践
▪php中使用memcached的性能问题    ▪NoSQL架构实践(二)——以NoSQL为主    ▪NoSQL架构实践(三)——以NoSQL为缓存
▪在MongoDB中一起使用$or和sort()时,查询性能差...    ▪[转]NoSQL生态系统    ▪NoSQL数据库探讨之一 - 为什么要用非关系数...
▪初识Redis及Redis在Windows下的安装和使用    ▪MongoDB 开发学习    ▪Redis.conf
▪关于twemproxy和redis分布式    ▪NoSQL学习之路(四):创建、读取、更新、删除...    ▪NoSQL学习之路 (五):查询操作符(Query Operators).1st...
▪NoSQL学习之路(三):MongoDB Shell的使用    ▪NoSQL学习之路 (二):MongoDB 数据类型和基本...    ▪NoSQL学习之路 (一):MongoDB 环境的搭建
▪NoSQL学习之路 (一):mongoDB 环境的搭建    ▪NoSQL学习之路 (一):mongoDB 环境的搭建和shel...    ▪NoSQL学习之路 (二):mongoDB 数据类型和基本...
▪那点所谓的分布式——redis    ▪mongodb查询嵌入式文档    ▪NoSQL历史简介
▪Mongo服务器集群配置学习三——分片    ▪MongoDB 导出和导入命令的使用    ▪HBase常用的数据库API操作
▪启动HBase后遇到的一个问题    ▪Mongo服务器集群配置学习一——主从复制    ▪Mongo服务器集群配置学习二——副本集
▪完全分布式安装HBase    ▪搞一些好玩的东西——redis    ▪Tair监控及统计技巧
▪MongoDB 之旅(四) 深入学习    ▪MongoDB 问题123    ▪MongoDB——安装部署以及简单的运用
▪MongoDB 之旅(一) 简介    ▪MongoDB 之旅(二) 基本操作(MongoDB Javascript Sh...    ▪MongoDB 之旅(三) 基本管理(MongoDB Javascript Sh...
▪mongoDB之windows下安装mongo数据库服务    ▪mongoDB之数据备份恢复工具    ▪CentOS通过yum安装CouchDB
▪MongoDB从入门到提高【第一集】---------MongdoDB配...    ▪MongoDB从入门到提高【第二集】---------MongdoDB权...    ▪[教程]MongoDB 从入门到进阶 (TextSearch)
▪mongodb数据文件格式    ▪在Window平台安装MongoDB    ▪mongodb journal文件格式
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3