数据结构:
由三个层次构成:database collection document,分别对应传统数据库的:数据库,
表,记录。
mongdb采用BSON结构存储文档,该结构类似Json
数据存储
mongdb内部,每个数据库都包含一个.ns文件和一些数据文件(直接可见),这些数据文件会随着数据量的增加而变多,例如:一个名为test的数据库,他的构成为:test.ns,test.1,test.2,test.3等。而且文件大小依次加倍,从16MB开始,最大为2G,这能减少碎片的产生。为了避免数据爆增带来的磁盘压力,mongo采用预分配机制
内存映射
文件采用MMAP进行内存映射,会将所有数据映射到内存中,但是是虚拟内存,所以mongo在32位系统上只能映射大概2.5G数据。
索引
mongodb默认总是以_id字段创建索引,索引信息保存在system.indexes中。可以使用db.collection.ensureIndex({index:1})的命令创建新的索引,1表示索引是升序排列。索引采用BTree结构
查找
当客户端(mongoshell或者javaAPI)在进行查找操作时,数据库并没有返回真正的数据,而是返回一个游标(cusor),只有当真正用到该条数据时才到数据库中读取出来。
单机:
启动mongo服务端
./mongod
基本参数:--dbpath数据存储位置 --port 端口
--logpath 日志位子 --logappend 日志接着记录
mongodb的NUMA问题
在启动命令前加 numactl --interleave=all
复制集
mongodb的复制机制有两种:
Master-Slave:在mongod启动时加上“-master”或者“-slave”命令
Replica Sets:比Master-Slave强大,各个节点数据一致。
分片:
一个mongodb的sharding cluster需要三个角色:
Shard Server:可以是一个mongod实例,也可以是一组Replica Sets
例:./mongod --shardsvr--port 端口 --dbpath 存储位置 --logpath日志位置 --logappend
Config Server:管理shard key和collection的shard信息
例:./mongod --configsvr--port 端口 --dbpath 存储位置--logpath 日志位置 --logappend
Route Process:客户端由此接入
例:./mongos --port 端口 --configdb ConfigServerIP:ConfigServerPort --logpath 日志位置 --logappend --chunkSize chunk大小(默认为200MB)
配置Sharding:
从客户端链接到Route上,输入以下命令:
db.runCommand({addshard:"ShardServerIP:ShardServerPort"})
...把所有的shard server都加入
db.runCommand({enablesharding:"需要shard的database"})
db.runCommand({shardcollection:"database.collection",key:{shardkey:1}})确定需要shard的collction以及相应的shardkey。
mongodb学习流水笔记
最新推荐文章于 2024-09-07 15:44:21 发布