MONGODB学习总结入门篇.docx

上传人:b****8 文档编号:9098325 上传时间:2023-02-03 格式:DOCX 页数:15 大小:221.35KB
下载 相关 举报
MONGODB学习总结入门篇.docx_第1页
第1页 / 共15页
MONGODB学习总结入门篇.docx_第2页
第2页 / 共15页
MONGODB学习总结入门篇.docx_第3页
第3页 / 共15页
MONGODB学习总结入门篇.docx_第4页
第4页 / 共15页
MONGODB学习总结入门篇.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

MONGODB学习总结入门篇.docx

《MONGODB学习总结入门篇.docx》由会员分享,可在线阅读,更多相关《MONGODB学习总结入门篇.docx(15页珍藏版)》请在冰豆网上搜索。

MONGODB学习总结入门篇.docx

MONGODB学习总结入门篇

MongoDB

1Mongodb基本概念

1.1简介

WhatisMongoDB?

MongoDB是一个基于分布式文件存储的数据库。

由C++语言编写。

旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。

Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB很像MySQL,document对应MySQL的row,collection对应MySQL的table。

1.2特点

它的特点是高性能、易部署、易使用,存储数据非常方便。

主要功能特性有:

  *面向集合存储,易存储对象类型的数据。

  *模式自由。

  *支持动态查询。

  *支持完全索引,包含内部对象。

  *支持查询。

  *支持复制和故障恢复。

  *使用高效的二进制数据存储,包括大型对象(如视频等)。

  *自动处理碎片,以支持云计算层次的扩展性。

  *支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

  *文件存储格式为BSON(一种JSON的扩展)。

  *可通过网络访问。

1.3使用原理

所谓“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。

每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。

集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。

如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。

键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。

我们称这种存储形式为BSON(BinarySerializeddOcumentFormat)。

推荐64位系统。

参考官方API(建议英文)。

2Window下Mongodb操作

2.1下载与解压

官方网站:

http:

//www.mongodb.org/downloads。

下载对于版本,解压并抽取相关的bin目录到C:

\MongoDB下(这个任意选择)。

在启动MongoDB之前,我们必须新建一个存放mongoDB数据和日志的目录。

数据库目录:

C:

\MongoDB\data\db\,日志目录:

C:

\MongoDB\data\。

2.2运行服务端

打开CMD窗口,进入到C:

\MongoDB\bin目录下,运行服务端mongod.exe。

C:

\>cdC:

\MongoDB\bin

C:

\MongoDB\bin>mongod.exe--dbpath=C:

\MongoDB\data\db--directoryperdb--logpath=C:

\MongoDB\data\logs--logappend

注:

日志文件为C:

\MongoDB\data\logs,以及添加方式记录(追加)。

数据目录为C:

\MongoDB\data\db,并且每个数据库将储存在一个单独的目录(--directoryperdb)。

服务端要一直运行。

Ctrl+C可中断。

//例:

创建名为MongoDB_DaShu的服务

mongod--install--serviceNameMongoDB_DaShu--serviceDisplayNameMongoDB_LBJ--logpathc:

\MongoDB\data--dbpathc:

\MongoDB\data–directoryperdb

2.3运行客户端

再打开一个CMD窗口,进入到C:

\MongoDB\bin目录下,运行客户端mongo.exe来登录MongoDB。

(要保持服务端mongod.exe的窗口不关闭)

2.4测试操作

MongoDB使用GridFS来储存大文件。

每个BSON对象大小不能超过4MB。

字段名限制:

不能以“$”开头;不能包含“.”;“_id”是系统保留的字段,但用户可以自己储存唯一性的数据在字段中。

MongoDB为每个数据库分配一系列文件。

每个数据文件都会被预分配一个大小,第一个文件名字为“.0”,大小为64MB,第二个文件“.1”为128MB,依此类推,文件大小上限为2GB。

MongoDB没有新建数据库或者collection的命令,只要进行insert或其它操作,MongoDB就会自动帮你建立数据库和collection。

当查询一个不存在的collection时也不会出错,Mongo会认为那是一个空的collection。

一个对象被插入到数据库中时,如果它没有ID,会自动生成一个“_id”字段,为24位16进制数。

MongoDB命令行客户端的脚本语法有些类似MySQL的:

>showdbs//列出所有数据库

>usememo//使用数据库memo。

即使这个数据库不存在也可以执行,但该数据库不会立刻被新建,要等到执行了insert等的操作时,才会建立这个数据库。

>showcollections//列出当前数据库的collections

>db//显示当前数据库

>showusers//列出用户

更多语法,查看help

新建数据库与数据集合:

插入数据:

(插入数据的方式有很丰富)

查询数据:

MongoDB的查询语法很强大,类似于SQL的条件查询。

例如,很多SQL可以做的,它都可以做:

db.foo.find()//select*fromfoo

db.foo.find().limit(10)//select*fromfoolimit10

db.foo.find().sort({x:

1})//select*fromfooorderbyxasc

db.foo.find().sort({x:

1}).skip(5).limit(10)//select*fromfooorderbyxasclimit5,10

db.foo.find({x:

10})//select*fromfoowherex=10

db.foo.find({x:

{$lt:

10}})//select*fromfoowherex<=10

db.foo.find({},{y:

true})//selectyfromfoo

一些SQL不能做的,MongoDB也可以做:

db.foo.find({"address.city":

"gz"})//搜索嵌套文档address中city值为gz的记录

db.foo.find({likes:

"math"})//搜索数组

db.foo.ensureIndex({"address.city":

1})//在嵌套文档的字段上建索引

更新数据:

db.foo.update({},{})更新对象,第一个参数是查询对象,第二个是替代的,可以在第二个对象里指定更新哪些字段,要使用$set。

删除条件查询:

删除数据集合(表):

删除当前数据库:

db.foo.remove()是用来删除数据,只删除匹配的对象

索引:

db.foo.ensureIndex({productid:

1})//在productid上建立普通索引

db.foo.ensureIndex({district:

1,plate:

1})//多字段索引

db.foo.ensureIndex({productid:

1},{unique:

true})//唯一索引

总的来说,使用mongodb可以满足常见的增删改差,但是不能完成复杂的跨表级联查询,mongodb努力使数据变得简单紧凑。

2.5备份与恢复

二进制数据格式,常用于备份、还原。

Mongodb的备份工具mongodump:

事例:

下图把备份数据库test中所有的数据集合(表)

MongoDB的数据恢复工具mongorestore:

事例:

恢复数据库test中的表t002的数据

2.6数据导出,导入

json或csv格式,每次一个collection

数据导出:

数据导入:

2.7安全与认证

usetest2//选择数据库test2

db.addUser("username","password");//普通权限,可读写

db.addUser("username","password",true);//只可读,不可写

db.system.users.remove({user:

“username”});//删除用户

3Mongodb研究性学习

3.1Mongodb应用方案优化

Mongodb系统采用Auto-Sharding算法存在着数据在各个节点上分配不均匀现象,这就是CPU利用率过高的原因,直接影响了系统性能。

这里提出Mongodb在大数据量情况下CPU占有率过高的解决办法——Mongodb分片优化。

Mongodb中的分片机制提供如下功能:

●当数据量和负载个数发生变化时,分片机制可以自动平衡负载和数据分布的变化

●分片机制可以灵活的添加新的硬件设备类满足数据的需求

●拓展性强,最大可以扩展到1000个节点

●出现故障时,利用sharding可以实现自动故障转移。

Auto-Sharding架构图如下:

说明:

●Client:

客户端请求

●Sharding:

分片

即存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例

构成的ReplicaSet。

为了实现每个Shard内部的auto-failover,MongoDB官方建议每个Shard

为一组ReplicaSet。

●Mongos:

路由进程

这是一个前端路由,客户端由此接入,然后询问ConfigServers需要到哪个Shard上查询或

保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。

客户端只需要将原本

发给mongod的查询或更新请求原封不动地发给RoutingProcess,而不必关心所操作的记录

存储在哪个Shard上。

●Mongod:

配置服务器

为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shardkey,

例如{age:

1},shardkey可以决定该条记录属于哪个chunk。

ConfigServers就是用来存储:

所有shard节点的配置信息、每个chunk的shardkey范围、chunk在各shard的分布情况、

该集群中所有DB和collection的sharding配置信息。

Auto-sharding,是通过mongos的自动分片功能简历一个水平扩展的数据库集群系统,将数据存储在sharding的各个节点上。

当增加节点时,sharding能够自动对数据进行分片,对整个系统进行负载均衡。

导致CPU占用率最大的主要原因:

空间的预分配问题:

为了避免形成过多的硬盘碎片,mongodb在每次空间不足时,都会申请一大块硬盘空间(由Auto-sharding机制决定),而且申请的量呈指数增长,64M,128M,256M知道2G为单个文件的最大体积。

Mongodb的sharding在存储数据时采用分块存储(chunk),每一块的大小默认为200M,而sharding每一次数据迁移的最小单元就是chunk,而这个数据迁移的过程则是引发cpu占有率最大的根本原因,过程是:

Mongodb后台有个banlence的进程会检查各个sharding节点数据的分配情况,当不同节点的chunk相差达到一定的大小时,就开始进行数据迁移,以平衡数据在各sharding节点的分布。

Balancer迁移数据的过程是,先将数据读都内存,然后进行迁移,这导入cpu占用率高的原因。

3.2构建简单的mongodb集群

架构如下:

ShardServer1:

20000

ShardServer2:

20001

ConfigServer:

30000

RouteProcess:

40000

●创建文件目录

●启动shardingserver

mongod--shardsvr--port20000--dbpath/data/shard/s0--logpath

/data/shard/log/s0.log--directoryperdb--启动ShardServer实例1

/Apps/mongo/bin/mongod--shardsvr--port20001--dbpath/data/shard/s1--logpath

/data/shard/log/s1.log--directoryperdb--启动ShardServer实例2

●启动configserver

mongod--configsvr--port30000--dbpath/data/shard/config--logpath

/data/shard/log/config.log--directoryperdb--启动ConfigServer实例

●启动路由

mongos--port40000--configdblocalhost:

30000--logpath

/data/shard/log/route.log--chunkSize1--启动RouteServer实例

●Sharding配置

添加shard节点

Ø连接admin库:

Mongoadmin–port40000

Ø添加shardserver:

db.runCommand({addshard:

”localhost:

2000”})

db.runCommand({addshard:

”localhost:

2000”})

Ø设置分片存储的数据库:

db.runCommand({enableSharding:

”test”})

Ø设置分片的集合名词,且必须指定shardkey,系统会自动创建索引:

db.runCommand({shardCollection:

”test.users”,key(_id,1)})

●Sharserver基本操作

列出说有shardserver:

db.runCommand({listshards:

1})

查看sharding信息:

printShardingStatus()

判断是否是sharding:

db.runCommand({isdbgrid:

1})

新增分片表,新增shardingserver

(续)…

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1