当前位置:文档之家› MongoDB 进阶

MongoDB 进阶

MongoDB 进阶
MongoDB 进阶

MongoDB 进阶

1.数据库命令

a.命令的工作原理

drop命令,在shell中删除一个集合,执行db.refactor.drop().其实这个函数实际运行的是drop命令,

可以用runCommand来达到一样的效果:

db.runCommand({"drop":"refactor"})

{

"nIndexesWas" : 1,

"msg" : "indexes dropped for collection",

"ns" : "test.refactor",

"ok" : 1

}

命令的响应是一个文档,包含了命令是否执行成功,还可能有些其他的命令输出的信息.命令的响应文档

都有一个"ok"键.ok键的值为1表示执行成功,为0表示执行失败,当为0时,会有一个"errmsg"键,

它的值表示命令失败的原因.

MongoDB中的命令其实是作为一种特殊类型的查询实现的,这些查询针对$cmd集合来执

行.runCommand

仅仅是接受命令文档,执行等价查询,因此drop调用实际上是这样的:

db.$cmd.findOne({"drop":"refactor"})

当MongoDB服务器得到查询$cmd集合的请求时,会启动一套特殊的逻辑来处理,而不是交给普通的查询代码来执行.

几乎所有MongoDB驱动程序都提供一个类似runCommand的帮助方法来执行命令,如果有必要,也可以使用一个

简单查询的方式来运行命令.

访问有些命令需要有管理员权限,必须在admin数据库里面运行.

b)要获得所有命令的最新列表,可以在shell中运行db.listCommands(),

也可以使用http://localhost:28017/_commands

2.固定集合

MongoDB不仅支持普通集合,还支持固定集合,固定集合要事先创建,而且大小固定.

固定集合像一个环形队列,如果空间不足,最早的文档就会被删除,为新的文档提供空间.

固定集合在新文档插入的时候自动淘汰最早的文档.

固定集合不能删除文档(自动淘汰文档除外),更新(尺寸增大)将导致文档移动.

固定集合中的文档以插入的顺序存储,不用维护一个已删除的文档释放空间列表.

固定集合默认情况下没有索引,即便是"_id"上也没有索引.

a.固定集合的属性和用法

对固定集合插入的速度很快,做插入操作时,无需额外分配空间,服务器也不必查找空闲列表来放置文档,

直接将文档插入集合的末尾就行了,如果有必要就将旧的覆盖.默认情况下插入也无需更新索引.

对固定集合按照插入顺序输出的查询速度很快,以为文档本身就是按照插入顺序存储的,按照这

顺序查询就是遍历一下,返回结果的顺序就是文档在磁盘上的顺序.默认情况下,对固定集合进行查找都

会以插入的顺序返回结果.

固定集合能在新数据插入时,自动淘汰最早的数据.插入快速,按照插入顺序查询也很快,自动淘汰,这几个

属性组合起来使得固定集合特别适合像日志这种应用场景.事实上,MongoDB中设计固定集合

的目的

就是用来存储内部的复制日志oplog.固定集合还有一个用法是缓存少量的文档,一般来说,固定集合

使用与任何想要自动淘汰过期属性的场景.

b.创建固定集合

固定集合必须要在使用前显示的创建.

如:

db.createCollection("refactorCapped",{"capped":true,size:100000,max:100})

上面的命令创建了一个固定集合refactorCapped,大小是100000字节,最大的文档数100.

当指定文档数量的上限时,必须同时指定大小.淘汰机制只有在容量还没有满时才会依据文档数

量来工作.

要是容量满了,淘汰机制则会依据容量来工作.

可以将普通集合转化成固定集合,如将blog集合转换成大小为10000字节的固定集合

db.runCommand({convertToCapped:"blog",size:10000})

固定集合的排序方式叫做自然排序.自然排序就是文档在磁盘上的顺序.

因为固定集合的文档总是按照插入的顺序存储的,自然顺序就是这样的.默认情况下,

查询固定集合后就是按照插入的顺序返回文档.也可以使用自然排序按照反向插入的顺序查询

db.blog.find().sort({"$natural":-1})

3.GridFS

GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS存文件的原因: GridFS可以直接利用已经建立的复制或分片机制,对文件存储来说故障恢复和扩展都很容易

GridFS可以避免用于存储用户上传内容的文件系统出现的某些问题,如GridFS在同一个目录下放置大量的文件是没有问题的.

GridFS不产生磁盘碎片,因为MongoDB分配数据文件空间时以2GB为一块.

a.使用GridFS

最简单使用GridFS的方法是利用mongofiles.mongofiles可以用来在GridFS中上传,下载,列示,查找和删除文件.

可以用mongofiles --help获得帮助

如:

GridFS是一个建立在普通MongoDB文档基础上的轻量级文件存储规范.MongoDB服务器实际上对GridFS请求和普通的

请求一样,所有相关工作都由客户端驱动或者工具来完成.

GridFS的基本思想是可以将大文件分成很多块,每块作为一个单独的文档存储,这样就能存储大文件了.由于MongoDB

支持在文档中存储二进制数据,可以最大限度减小块的存储开销.另外,除了存储文件本身的快,还有一个单独的文档用来

存储分块的信息和文件的元数据.

GridFS的块有个单独的集合,默认情况下,块将使用fs.chunks集合,如果需要可以覆盖.这个块集合里面文档的结构很简单

{

"_id":ObjectId("...."),

"n":0,

"data":BindData("..."),

"files_id":ObjectId("....")

}

和别的MongoDB文档一样,块也有自己唯一的"_id".files_id键是包含这个块元数据的文件文档的"_id".

n表示块编号,也就是这个块在源文件中的顺序编号,data包含组成文件块的二进制数据.

文件的元数据放在另一个集合中,默认是fs.files.这里面的每个文档代表GridFS中的一个文件,与文件相关的

自定义元数据也可以存在其中.除了用户自定义的键,GridFS规范定义了一些键

_id

文件唯一的id,在块中作为files_id键的值存储

length

文件内容总的字节数

chunksize

每块的大小,以字节为单位,默认是256k,必要时可以调整.

uploadDate

文件存入GridFS的时间戳

md5

文件内容的md5检验和,由服务端用filemd5命令生成的,用于计算上传块的md5检验和

也意味着用户可以检验md5键这个值,确保文件正确上传了.

db.fs.files.find()

4.服务器端脚本

在服务器端可以通过db.eval函数来执行javascript脚本,也可以把javascript脚本保存在数据库中,然后

在别的数据库命令中调用.

a. d

b.eval

利用db.eval函数可以在MongoDB服务器端执行javascript脚本.这个函数先将给定的javascript字符串传递给

MongoDB服务器,在服务器上执行,然后返回结果.

db.eval可以用来模拟多文档事务:db.eval锁住数据库,然后执行javascript,再解锁.虽然没有内置的回滚机制,

但这能确保一系列操作按照指定的数序发生.

发送代码有两种方式,封装一个函数或者不封装,如:

db.eval("return 'refactor';")

db.eval("function(){return 'refactor';}")

只有传递参数的时候,才必须要封装成一个函数.参数通过db.eval的第二个参数传递,要写成一个数组的形式.

如:

db.eval("function(name){return 'hello,'+name;}",['refactor'])

若db.eval的表达式要是复杂的话,调试的办法是将调试信息写进数据库的日志中

如:

db.eval("print('hello refactor')")

这样在日志里就能找到hello refactor

b.存储javascript

每个MongoDB的数据库中都有个特殊的集合:system.js,用来存放javascript变量.这些变量可以在任何MongoDB的

javascript上下文中调用,包括"$where"子句,db.eval调用,MapReduce作业.用insert可以将变量存在system.js中

如:

db.system.js.insert({"_id":"x","value":1})

db.system.js.insert({"_id":"y","value":2})

db.system.js.insert({"_id":"z","value":3})

上例在全局作用域中定义了x,y,z,对其求和:

db.eval("return x+y+z;")

system.js可以存放javascript代码,这样就可以很方便的自定义一些脚本,如用javascript写一个日志函数,将其存放在

system.js中:

db.system.js.insert(

{

"_id":"log",

"value":function(msg,level)

{

var levels=["DEBUG","WARN","ERROR","PATAL"];

level=level?level:0;

var now= new Date();

print( now +" "+ levels[level]+msg);

}

}

)

调用:

db.eval("log('refactor bolg test',1)")

使用存储的javascript缺点是代码会与常规的源代码控制脱离,会弄乱客户端发送来的javascript.

最适合使用存储javascript的情况就是程序中有个地方都要用到一个javascript函数,这样要是更新的话,

只需更新这个函数而不必没出都修改.要是javascript代码很长又要繁琐使用的话,也可以使用存储javascript,

这样村一次会节省不少王扩传输时间.

c.安全性

执行javascript代码就要考虑MongoDB的安全性.

如:

>func="function(){print('hello,"+username+"!');}"

如果username是用户自定义的,可以使用这样的字符串"');db.dropDatabase();print('",

代码就变成了这样:

>func="function(){print('hello,');db.dropDatabase();print('!');}"

为了避免这种情况,要限定作用域.

绝大多数驱动程序都为传递给数据库的代码提供了一种特殊类型,这是因为代码实际上可以看成是一个字符串和一个

作用域的组合.作用域是一个保存着变量名和值映射关系的文档.当javascript函数执行的时候,这种映射就

构成了函数的局部作用域.

5.数据库引用

DBRef就像url,唯一确定一个到文档的引用.它自动加载文档的方式就像网站中url通过链接自动加载web页面一样.

a.DBRef是什么

DBRef是一个内嵌文档,DBRef有些必选键,如:

{"$ref":collectionName,"$id":id_value}

DBRef指向一个集合,还有一个id_value用来在集合里面根据"_id"确定唯一的文档.这两条信息可以使DBRef能

唯一标识MongoDB数据库内的任何一个文档.如想引用另一个数据库的文档,DBRef中有可选键"$db"

{"$ref":collectionName,"$id":id_value,"$db":database}//注意键的顺序不能改变.

b.实例

两个集合users(用户),notes(笔记),

用户可以创建笔记,笔记可以引用用户或者别的笔记.

https://www.doczj.com/doc/a616130930.html,ers.insert({"_id":"refactor","displayName":"dis_refactor"})

https://www.doczj.com/doc/a616130930.html,ers.insert({"_id":"refactor2","displayName":"dis_refactor2"})

db.notes.insert({"_id":2,"author":"refactor","text":"refactor in mongodb"})

db.notes.insert(

{

"_id":22,

"author":"refactor22",

"text":"...DBRef likes url",

"references":

[

{"$ref":"users","$id":"refactor"},

{"$ref":"notes","$id":2}

]

}

)

var note=db.notes.findOne({"_id":22});

note.references.forEach(

function(ref){

printjson(db[ref.$ref].findOne({"_id":ref.$id}));

});

c.什么时候使用DBRef

在MongoDB中表示这种对其他文档的引用关系,并不是只有DBRef方式.

上面的例子就用了另外一种引用:每个note的author键仅存储了author文档的"_id"键,没有必要用DBRef,因为已经

知道每个author就是users集合里面的一个文档.这种引用在GridFS的块文档中"files_id"键仅仅就是对文档"_id"的引用.

在保存引用的时候是选择DBRef还是至存储"_id"?

保存"_id"会更加紧凑,对开发者而言就很轻量.但是DBRef能够引用任意集合(甚至是任意数据库)的文档,开发者

不必知道和记住被引用的文档在哪些集合里面.驱动程序和一些工具对DBRef提供了额外的功能(如自动去引用).

总之,存储一些对不同集合的文档的引用时,最好用DBRef.否则最好存储"_id"作为引用来使用,这样更简单,也更容易操作.

mongodb学习总结

MongoDB学习文档 一、NoSQL简介 1、什么是NoSQL? NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。 2、NoSQL的优点/缺点 优点: 高可扩展性。 分布式计算。 低成本。 架构的灵活性,半结构化数据。 没有复杂的关系。

缺点: 没有标准化。 有限的查询功能(到目前为止)。 最终一致是不直观的程序。 3、NoSQL 数据库分类 类型部分代表特点 列存储Hbase Cassandra Hypertable 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 文档存储MongoDB CouchDB 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 key-value存储Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) 图存储Neo4J FlockDB 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 对象存储db4o 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

物联网岗位细分

物联网岗位细分 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

物联网开发工程师职业方向细分 新基建背景下,物联网领域对于人才的需求越发强烈,为此,物联网培训品牌机构-----开物学院综合智联招聘、51job等招聘网站对于相关职位信息进行了汇总。由于物联网技术涉及面太广,我们对于“物联网开发工程师”的岗位技能进行分析,可以看出其方向细分、能力综合的根本特性。无论对于物联网专业的学习者还是跨行从业者,都需要在了解物联网系统架构的基础上,深入培养某个方向的技能,才能在物联网产业发展的过程中找到自己的职业定位。 一、数据架构方向(物联网大数据架构师) 岗位职责: o负责物联网大数据平台系统的设计与实现,包括实时流和离线数据等相关功能的开发与实现。 o根据开发规范与流程独立完成模块的设计、编码、测试以及相关文档。o负责物联网监测行业的算法工程化实现。 任职要求: o有相关的大数据系统架构经验,具有扎实的计算机科学功底,扎实的编程基础和数据结构算法基础,良好的工程素养,极强的问题解决能力 o熟练掌握Hadoop、Kafka、Spark、Storm等分布式框架原理,有相关的调优、运维、开发经验 o具有Postgresql、MySql、MongoDB,ClickHouse等其中一种数据库应用开发经验 o有物联网相关系统、可视化相关系统、微服务相关系统的设计和研发经验。 二、通信方向(物联网通信工程师) 岗位职责: 负责物联网终端、网关及相关通信技术开发。 任职要求:

精通无线通信相关协议及技术,如LoRaWAN、NB-IOT、Wi-Fi、BLE、LTE、Zigbee等 熟悉硬件开发流程,熟悉RF电路,对各种射频技术及参数有较好的理解 熟悉MQTT、CoAP、HTTP REST、WebSocket等相关物联网连接协议 三、软件开发方向(物联网平台软件开发工程师) 岗位职责: 按照软件工程相关工作模式保质保量完成软件产品功能设计和相关文档编写。 独立设计开发物联网应用平台功能模块,完成软件产品集成及测试。 协助支撑完成终端软硬件测试平台搭建和提供终端软件技术咨询服务。 任职要求: 熟悉Java,Python或C/C++等语言,熟悉高并发、高性能的分布式系统的设计优先。 精通物联网技术原理,熟悉物联网相关技术趋势, 熟悉物联网相关协议(MQTT、CoAP、LwIP、LwM2M)及相关开源项目优先。 熟悉Spring MVC、Hibernate、Mybatis开源开发框架。 熟练使用Redis、RabbitMQ、MongoDB等相关或类似技术。 熟练使用Linux(CentOS/Ubuntu)操作和管理。 四、嵌入式开发方向(物联网嵌入式高级开发工程师) 岗位职责: o负责与芯片/模组商/硬件厂商等合作伙伴共同实现IoT产品的开发。 o负责IoT协议制定和各个端包括Linux/Android/各类RTOS等的移植实现。 o负责IoT某些核心模块能力,如网络协议栈等实现。 o负责各类IoT应用场景下终端产品的选型和开发。 任职要求: o精通C/C++语言编程,熟悉嵌入式开发,具有良好的编程风格和文档编制习惯。 o精通嵌入式操作系统,熟练掌握任务调度/内存回收等实现原理,有freertos、UCOS、RT-Thread、linux等系统开发经验者优先。 o熟悉主流ARM处理器体系架构,有STM32、NXP等芯片开发经验优先。 o熟悉各类物联网通讯协议,如:LoRa、NB-IoT、eMTC、WiFi/BLE等,熟悉TCP/IP网络架构,有相关物联网开发经验优先。 o五、移动端开发方向(物联网移动端开发工程师)岗位职责: 负责iOS/Android下AIOT移动端APP SDK开发; 负责对接客户APP开发的接口需求。 任职要求: 熟悉常见数据结构、算法和设计模式,熟悉TCP/IP协议。

MongoDB 使用手册-中文版

MongoDB 使用手册-中文版

目录 第1章MONGODB简介 (4) 1.1功能特点 (4) 1.2适用范围 (4) 第2章MONGODB下载及安装 (5) 2.1下载地址 (5) 2.2安装方法 (5) 第3章MONGODB语法 (6) 3.1基本命令 (6) 3.1.1.启动mongodb (6) 3.1.2.停止mongodb (6) 3.2SQL语法 (7) 3.2.1.基本操作 (7) 3.2.2.数据集操作 (8) 第4章JAVA操作MONGODB (10) 4.1正在整理中 (10) 第5章其它 (10) 5.1正在整理中 (10)

第1章MongoDB简介 1.1功能特点 官方网址:https://www.doczj.com/doc/a616130930.html,/ MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写,旨在为WEB应用提供可护展的高性能数据存储解决方案。 它的特点是可扩展,高性能,易使用,模式自由,存储数据非常方便等,主要功能特性有: ◆面向文档存储:(类JSON数据模式简单而强大)。 ◆高效的传统存储方式:支持二进制数据及大型对象(如照片和视频)。 ◆复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从 模式及服务器之间的相互复制。 ◆Auto-Sharding自动分片支持云级扩展性(处于早期alpha阶段):自动分片功 能支持水平的数据库集群,可动态添加额外的机器。 ◆动态查询:它支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻 易查询文档中内嵌的对象及数组。 ◆全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达 式,并生成一个高效的查询计划。 ◆支持RUBY,PYTHON,JA V A,C++,PHP等多种语言。 1.2适用范围 适用场景: ◆适合实时的插入,更新与查询,并具备应用程序实时数据存储所需的复制及高 度伸缩性。 ◆适合作为信息基础设施的持久化缓存层。 ◆适合由数十或数百台服务器组成的数据库。因为Mongo已经包含对 MapReduce引擎的内置支持。 ◆Mongo的BSON数据格式非常适合文档化格式的存储及查询。 不适用场景: ◆高度事务性的系统。 ◆传统的商业智能应用。 ◆级为复杂的SQL查询。

mysql优化笔记

◆Mysql数据库的优化技术<大型网站优化技术> 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] c: 分表技术(水平分割、垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程[模块化编程,可以提高速度] 数据库的三层结构: f: 对mysql配置优化[配置最大并发数my.ini, 调整缓存大小] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM) CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...) ◆什么样的表才是符合3NF (范式) 表的范式,是首先符合1NF, 才能满足2NF , 进一步满足3NF 1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF ?数据库的分类 关系型数据库: mysql/oracle/db2/informix/sysbase/sql server 非关系型数据库: (特点: 面向对象或者集合) NoSql数据库: MongoDB(特点是面向文档) 2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现id primary key ; 3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放. 比如下面的设计就是不满足3NF:显示推导处理

MongoDB update数据语法

MongoDB update数据语法 本文是参考官方文档来介绍的,之所以有官方文档还要在这介绍,一方面是就当翻译,毕竟每次要用时去看英文文档比较累,第二是官方文档讲解比较简单,有时光看官方文档不好理解,我在实际操作的情况下可以做些补充。 好了,不多说了,下面正式开始: mongodb更新有两个命令: 1).update()命令 db.collection.update( criteria, objNew, upsert, multi ) criteria : update的查询条件,类似sql update查询内where后面的 objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 例: db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一条记录 db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 全更新了 db.test0.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 只加进去了第一条 db.test0.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 全加进去了 db.test0.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );全更新了 db.test0.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );只更新了第一条 2).save()命令 db.collection.save( x ) x就是要更新的对象,只能是单条记录。 如果在collection内已经存在一个和x对象相同的"_id"的记录。mongodb就会把x对象替换collection内已经存在的记录,否则将会插入x对象,如果x内没有_id,系统会自动生成一个再插入。相当于上面update 语句的upsert=true,multi=false的情况。 例: db.test0.save({count:40,test1:"OK"}); #_id系统会生成

Windows下安装MongoDB服务器-王昌军

Windows下安装MongoDB服务器 MongoDB的官方下载站是https://www.doczj.com/doc/a616130930.html,/downloads,可以去上面下载最新的程序下来。在下载页面可以看到,对操作系统支持很全面,OS X、Linux、Windows、Solaris 都支持,而且都有各自的32位和64位版本。目前的稳定版本是2.0.2版本。 1.安装包及安装目录准备 (1). 下载MongoDB url地址: https://www.doczj.com/doc/a616130930.html,/downloads (2). 设置MongoDB目录:在D盘建立D:\Software\MongoDB-2.0.2\bin目录。解压下载的MongoDB安装包,解压并将解压后的文件中的bin目录下的所有文件拷贝到刚才建立的目录下。 (3). 设置数据文件路径:在D:\Software\MongoDB-2.0.2目录下建立data文件夹,用以存放MongoDB数据文件。 (4). 设置日志文件:在D:\Software\MongoDB-2.0.2目录下建立logs文件夹,并在logs下面建立mongodb.log文件。 2.安装MongoDB服务器 打开cmd窗口(如果是win7的话。那启动cmd要用管理员身份来启动(右键以管理员运行)):输入下面命令: C:\Windows\system32>D: D:\>cd D:\Software\MongoDB-2.0.2\bin D:\Software\MongoDB-2.0.2\bin>mongod --dbpath D:\Software\MongoDB-2.0.2\data --logpath=D:\Software\MongoDB-2.0.2\logs\mongodb.log --install

mongodb 对内存的严重占用以及解决方法

mongodb 对内存的严重占用以及解决方法 刚开始使用mongodb的时候,不太注意mongodb的内存使用,但通过查资料发现mongodb对内存的占用是巨大的,在本地测试服务器中,8G的内存居然被占用了45%。汗呀。 本文就来剖析一下mongodb对内存的具体使用方法,以及生产环境针对mongodb占大量内存的问题的解决。 先看一个MongoDB服务器的top命令结果 shell> top -p $(pidof mongod) Mem: 32872124k total, 30065320k used, 2806804k free, 245020k buffers Swap: 2097144k total, 100k used, 2097044k free, 26482048k cached VIRT RES SHR %MEM 1892g 21g 21g 69.6 或者先top后,然后shift+m 把当前进场按占用内存的多少排序。看看你的mongodb 能占用多少内存。 先了解一下linux对内存的管理方式: 在Linux里(别的系统也差不多),内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。 很多人会把虚拟内存和Swap混为一谈,实际上Swap只是虚拟内存引申出的一种技术而已:操作系统一旦物理内存不足,为了腾出内存空间存放新内容,就会把当前物理内存中的内容放到交换分区里,稍后用到的时候再取回来,需要注意的是,Swap的使用可能会带来性能问题,偶尔为之无需紧张,糟糕的是物理内存和交换分区频繁的发生数据交换,这被称之为Swap颠簸,一旦发生这种情况,先要明确是什么原因造成的,如果是内存不足就好办了,加内存就可以解决,不过有的时候即使内存充足也可能会出现这种问题,比如MySQL 就有可能出现这样的情况,解决方法是限制使用Swap: shell> sysctl -w vm.swappiness=0 查看内存情况最常用的是free命令: shell> free -m total used free shared buffers cached Mem: 32101 29377 2723 0 239 25880 -/+ buffers/cache: 3258 28842 Swap: 2047 0 2047

MongoDB入门经典

第一讲MongDB数据库的基本安装文件 https://www.doczj.com/doc/a616130930.html,/display/DOCS/Home MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo 使用C++开发。Mongo的官方网站地址是:https://www.doczj.com/doc/a616130930.html,/ 首先下载数据库的基本软件安装包,下载地址:https://www.doczj.com/doc/a616130930.html,/download 第二,新建目录“D:\MongoDB”,解压下载到的安装包,找到bin目录下面全部.exe文件,拷贝到刚创建的目录下。 第三,在“D:\MongoDB”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。 配置Mongo服务端: https://www.doczj.com/doc/a616130930.html,/scotthernandez/mongo-seattle-java-development 打开CMD窗口,按照如下方式输入命令: > d: > cd D:\MongoDB > mongod --dbpath D:\MongoDB\data

就基本成功了 然后在浏览器中输入http://localhost:27017/ 显示以下网页You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number 然后就OK啦 第二讲关于在java平台下的mongodb的使用的操作 首先下载mongodb在java中的驱动库文件,下载地址分别为 https://https://www.doczj.com/doc/a616130930.html,/KentBeck/junit/downloads https://https://www.doczj.com/doc/a616130930.html,/mongodb/mongo-java-driver/downloads 第二部新建java工程添加库文件如图所示

Mongodb集群搭建的三种方式

Mongodb集群搭建的三种方式 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 Mongodb的存储方式是文档式存储,并不是Key-Value形式。 Mongodb的三种集群方式的搭建:Replica Set、Sharding、Master-Slaver。 1、Replica Set(副本集) 简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。如下图: Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。 默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设

置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。 仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。 2、Sharding 和Replica Set类似,都需要一个仲裁节点,但是Sharding还需要配置节点和路由节点。就三种集群搭建方式来说,这种是最复杂的。部署图如下:

168 道2019年最新的Python面试题,让你最短时间内掌握核心点

1.列出5 个常用Python 标准库? 2.Python 内建数据类型有哪些? 3.简述with 方法打开处理文件帮我我们做了什么? 4.列出Python 中可变数据类型和不可变数据类型,为什么? 5.Python 获取当前日期? 6.统计字符串每个单词出现的次数 7.用python 删除文件和用linux 命令删除文件方法 8.写一段自定义异常代码 9.举例说明异常模块中try except else finally 的相关意义 10.遇到bug 如何处理 语言特性 1.谈谈对Python 和其他语言的区别 2.简述解释型和编译型编程语言 3.Python 的解释器种类以及相关特点? 4.说说你知道的Python3 和Python2 之间的区别? 5.Python3 和Python2 中int 和long 区别? 6.xrange 和range 的区别? 编码规范 7.什么是PEP8? 8.了解Python 之禅么?

9.了解docstring 么? 10.了解类型注解么? 11.例举你知道Python 对象的命名规范,例如方法或者类等 12.Python 中的注释有几种? 13.如何优雅的给一个函数加注释? 14.如何给变量加注释? 15.Python 代码缩进中是否支持Tab 键和空格混用。 16.是否可以在一句import 中导入多个库? 17.在给Py 文件命名的时候需要注意什么? 18.例举几个规范Python 代码风格的工具 数据类型 字符串 19.列举Python 中的基本数据类型? 20.如何区别可变数据类型和不可变数据类型 21.将"hello world"转换为首字母大写"Hello World" 22.如何检测字符串中只含有数字? 23.将字符串"ilovechina"进行反转 24.Python 中的字符串格式化方式你知道哪些? 25.有一个字符串开头和末尾都有空格,比如“adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。

MongoDB应用

MongoDB数据库 一、MongoDB简介 MongoDB是一个面向文档的数据库系统。使用C++编写,不支持SQL,但有自己功能强大的查询语法。 MongoDB使用BSON作为数据存储和传输的格式。BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。 MongoDB很像MySQL,document对应MySQL的row,collection对应MySQL的table。 二、Wind ows下MongoDB操作 MongoDB在Windows上的安装运行很方便。直接下载、解压,然后运行bin/mongod 即可启动服务器,运行bin/mongo 即可运行命令行客户端。 2-1、下载与解压 官方网站:https://www.doczj.com/doc/a616130930.html,/downloads。 下载对于版本,解压并抽取相关的bin目录到C:\MongoDB下(这个任意选择)。 在启动MongoDB之前,我们必须新建一个存放mongoDB数据和日志的目录。数据库目录:C:\MongoDB\data\db\,日志目录:C:\MongoDB\data\。 2-2、运行服务端 打开CMD窗口,进入到C:\MongoDB\bin目录下,运行服务端mongod.exe。 C:\>cd C:\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可中断。 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的: > show dbs // 列出所有数据库 > use memo // 使用数据库memo。即使这个数据库不存在也可以执行,但该数据库不会立刻被新建,要等到执行了insert等的操作时,才会建立这个数据库。

MongoVUE简单操作手册

MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久使用,一、基础操作 新增一个连接 进入的界面形如

二、进阶操作 1、查看所有数据,会有三种格式的观看方式,分别为树形,表格,bjosn,详情见1.1 2、查看特定的数据,使用的时候shell命令,需要一些基础的语法知识,详情见2.1 3、更新数据,详情见3.1 4、删除数据,慎用,如果没有备份,删除之后无法恢复

5、插入数据,详情见5.1 6、复制文档到统一集合,详情见6.1 7、复制集合到不同的数据库,详情见7.1 8、删除文档内所有数据、慎用,如果没有备份,删除之后无法恢复 9、删除数据库慎用,如果没有备份,删除之后无法恢复 1.1 查看所有数据 点击”view之后”,会出现文档内的数据 树形: 表格: 需要修改什么值的时候,可以直接点击要修改的字段进行修改,修改完成之后按回车

Txt形,Bjson格式的 2.1查看特定的数据 1.点击”find”,输入条件之后点击find便可以进行查询,这里简单的讲一下基本的 查询语句 有点模糊,可以放大点 1、区域为基本查询 一组键值,key为要查询的字段,value为要查询字段的值,如有多个用逗号隔 开 语法{“要查询的字段”:“要查询字段的值”,“第二个”…..} 比如,我们想查一个名为huihh的人信息,并且年龄为30,那么写成

{“name”:”huihh”,”age”:30} 2、字段查询 和1有点不同,这么如果写查询语句 {"name":"huihh"}那么查询出来的数据,出了id,是一整列的name,并不会进行 筛选,所以,这里我们可以写成{“name”,“”},查询之后只显示name这一列, 如果需要其他的特别查询条件,与1合用 3、排序 方法使用一组键值对做参数,key是document里的key的名字,value是1升序或者-1降序。 比如,查询huihh会有3个人呢,那么就使用age进行排序, {“age”:-1} 4、结果集的筛选

mongodb安装及简单操作附截图

MongoDB安装及简单操作 1.下载mongodb 链接:https://www.doczj.com/doc/a616130930.html,/s/1gdKtrUz 密码:9af8这是我网盘的链接,下载解压到D 盘 2.配置文件 第一步,解压之后将文件夹放在D盘; 第二步,将mongodb-win32-x86_64-2.0.6文件夹重命名为mongodb; 第三步,在D:\mongodb\下创建data文件夹,路径D:\mongodb\下包含下面文件; 第四步,在data文件夹下创建db文件夹和log文件夹如下图; 第五步,在log文件夹下创建日志文件MongoDB.log如下图

3.连接数据库 打开命令提示符(管理员权限) D: cd d:\mongodb\bin mongod -dbpath "d:\mongodb\data\db" 正常情况下会看到下面的界面 这时候,已经成功打开mongodb的服务了,27017是默认端口。在浏览器中检验一下是否真的成功的启动了mongodb的服务,在浏览器输入http://localhost:27017/

只要看到上面的界面就证明连接成功了。 这时候,再打开一个命令提示符窗口,可以不是管理员权限,去进行数据库的操作。 输入mongo 输入show dbs 插入一条数据https://www.doczj.com/doc/a616130930.html,er.insert({name:”laowang”}) 也可以是https://www.doczj.com/doc/a616130930.html,er.save({name:”laowang”}) 或者,一次添加姓名和年龄数据,二维数据https://www.doczj.com/doc/a616130930.html,er.save({name:”laowang”,age:”25”}) 查看数据 https://www.doczj.com/doc/a616130930.html,er.find() 相当于sql的select * from user 其他的mongodb常用操作命令,我在网上找了一些,直接给你粘贴上来。 1、Help查看命令提示 help db.help(); db.yourColl.help();

MongoDB学习

MongoDB学习 笔记 学习笔记 一、环境搭建 1.安装 解压出来就OK。mongoDB缺省使用磁盘根目录的data文件夹和data\db文件夹 这两个文件夹需要手工建立,如果想使用其他路径,那么启动mongoDB的时候需要指明路径 2.运行 运行CMD打开控制台窗口,导航至mongodb的bin目录,运行mongod.exe,服务器就启动起来了,按ctrl-c结束程序。 链接到服务::导航至mongodb的bin目录,运行mongo.exe来启动shell,,缺省连接到链接到服务 test数据库。 二、简单介绍 1.基本概念 document :mongoDB里边数据的基本单位,相当于关系数据库里的行 collection: 相当于关系数据库的表,不过是没有数据结构定义的每个mongoDB的实例可以运行多个database,每个database有自己的collection和权限控制 mongoDB拥有一个强大的javascript shell,用于管理数据库和操作数据每个document 都有一个特殊的key:"_id",这个值在collection内是唯一的。 Document: document是一组有序的key/value对,使用json风格的数据。 {"foo": 3, "greeting": "Hello, world!"} key是个UTF-8字符串,value 可以是很多类型,甚至是一个嵌入的document。Collection: collection是一组document,它是无结构定义的,所以你可以把任何document存入一个collection里。

MongoDB使用手册

MongoDB使用说明手册

目录 第1章MONGODB简介 (4) 1.1功能特点 (4) 1.2适用范围 (4) 第2章MONGODB下载及安装 (5) 2.1下载地址 (5) 2.2安装方法 (5) 第3章MONGODB语法 (6) 3.1基本命令 (6) 3.1.1.启动mongodb (6) 3.1.2.停止mongodb (6) 3.2SQL语法 (7) 3.2.1.基本操作 (7) 3.2.2.数据集操作 (8) 第4章JAVA操作MONGODB (10) 4.1正在整理中 (10) 第5章其它 (10) 5.1正在整理中 (10)

第1章MongoDB简介 1.1功能特点 官方网址:https://www.doczj.com/doc/a616130930.html,/ MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写,旨在为WEB应用提供可护展的高性能数据存储解决方案。 它的特点是可扩展,高性能,易使用,模式自由,存储数据非常方便等,主要功能特性有: ◆面向文档存储:(类JSON数据模式简单而强大)。 ◆高效的传统存储方式:支持二进制数据及大型对象(如照片和视频)。 ◆复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从 模式及服务器之间的相互复制。 ◆Auto-Sharding自动分片支持云级扩展性(处于早期alpha阶段):自动分片功 能支持水平的数据库集群,可动态添加额外的机器。 ◆动态查询:它支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻 易查询文档中内嵌的对象及数组。 ◆全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达 式,并生成一个高效的查询计划。 ◆支持RUBY,PYTHON,JA V A,C++,PHP等多种语言。 1.2适用范围 适用场景: ◆适合实时的插入,更新与查询,并具备应用程序实时数据存储所需的复制及高 度伸缩性。 ◆适合作为信息基础设施的持久化缓存层。 ◆适合由数十或数百台服务器组成的数据库。因为Mongo已经包含对 MapReduce引擎的内置支持。 ◆Mongo的BSON数据格式非常适合文档化格式的存储及查询。 不适用场景: ◆高度事务性的系统。 ◆传统的商业智能应用。 ◆级为复杂的SQL查询。

Spring-data-mongodb使用手册

Spring-data-mongodb使用手册

文档信息(Document Info) 标题(Title) Spring-data-mongodb使用手册 文档编号(No) 2012-09-19 作者(Author) 张瑜 最后发布时间(Last Update) 2012-09-20 概述(Summarize) 安装mongodb以及掌握spring-data-mongodb的使用方法,一些最佳实践

修订信息(Revise Info) 修订日期(Date)修订人(Reviser) 修订内容(Revises)

附件信息(Attachment Info)

目录 文档信息(Document Info) (2) 修订信息(Revise Info) (3) 附件信息(Attachment Info) (4) 1.概述 (5) 1.1.目的 (5) 1.2.范围 (6) 2.准备 (6) 2.1.环境配置 (6) 2.2.Windows7安装mongodb (6) 2.2.1.配置环境变量 (6) 2.2.2.启动配置mongodb (7) 3.Spring-data-mongodb (8) 3.1.背景 (8) 3.1.1.高级API (9) 3.1.2.低级API (9) 3.2.MongoDbFactory (9) 3.3.MongoTemplate (9) 3.4.Operations (10) 3.4.1.常用Api的方法: (10) 3.5.项目中如何配置实用mongodb (11) 3.6.Callback .................................................................................. 错误!未定义书签。 3.7.Topic和Messaging/PubSub (14) 3.8.Cache (14) 4.NoSQL数据库设计 (14) 4.1.案例1 (14) 5.最佳实践 (14) 5.1.项目案例1(Tinybee项目) (14) 1.概述 1.1. 目的 让团队成员比较快的上手mongodb的相关功能,思考如何结合自己的项目使用。

利用graylog收集各类安全设备日志实现大屏展示

在一个集中视图中展示公司所有安全设备的日志汇总和关联安全事件,是建立安全运营中心的一个前提,作为统一的日志中心,集中管理来自多个数据源的日志。来进行高效检索与分析,更快定位问题,持续挖掘数据价值,业界有商业的splunk软件,以及开源的ELK能够实现。本次将介绍Graylog来实现统一的日志收集和分析。 Graylog是一款优秀的日志收集分析软件,区别于ELK,它更加简洁,高效,部署使用更加简单,Graylog几乎集合了ELK的常用功能,支持数据收集、检索、可视化Dashboard管理,并提供REST服务接口服务,方便功能扩展与定制。 通过Graylog监控防火墙和waf日志并形成报告 在本例中,通过graylog,将防火墙和waf的日志进行收集并呈现,最终的效果图如下:

一:Graylog的安装部署 环境 1. 日志源:安全设备日志(Imperva WAF、Paloalto防火墙)等; 2. 日志分析:通过虚拟机单机部署,操作系统Centos 7.5,安装Graylog v 3.0.2版本,通过syslog收集防火墙和WAF日志。 graylog采用单机部署,架构如下

安装环境:linux centOS系统安装,本实例中准备的为7.5版本# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 安装顺序: 1.安装java sudo yum install java-1.8.0-openjdk-headless.x86_64 同时,后面需要pwgen工具,所以需要安装 EPEL,安装方法: sudo yum install epel-release sudo yum install pwgen 2.安装部署mongodb

MongoDB开发使用手册

MongoDB开发使用手册 一.基础部分 MongDB简介 1.NOSQL历史和产生原因 原因: 互联网用户数的增长和用户参与互联网习惯的改变 1.初始的静态内容网站,提供中心化的内容服务, 特点: 中心化,用户阅读内容 系统:Apache 2.动态网页内容,电子商务和论坛网站出现。 特点: 用户访问动态内容,并提供少量内容 系统:Apache+Mysql+Php, IIS+ASP+SQLSERVER, IIS+https://www.doczj.com/doc/a616130930.html,+SQLSERVER, TOMCAT+JSP+ORACLE 3. 博客出现: 去中心化网站出现。 特点:Web2.0网站的雏形用户阅读内容,并开始更多地参与网站的交互 系统: 高并发访问,数据库压力增大Memcached 缓存的出现,并出现数据库集群的概念 4.微博,淘宝等网站出现,以及云计算平台出现,如google,百度广告,等大规模系统 特点: 用户重复参与网站交互,和内容提供,而系统需要对用户行为进行分析 系统:支持高并发,及时响应,并能够实现分布式计算 NOSQL:Memcached, Redis, Hbase, 等NOSQL数据库,不仅仅是简单缓存,并能够提供分布式要求,包括复制,分片,水平分区,并提供复杂格式的数据存储 总结: 1.高并发读写操作 普通关系型数据库,很难满足高并发读写的要求,上万次读写的需求 2.海量数据存储 上亿用户产生大量数据,包括用户数据,访问日志,用户提供内容,用户状态记录等,这种海量数据的存储,关系型数据库已经很难满足,尤其是从海量数据中提取和汇总数据成为瓶颈 3.高可用性和高扩展性 关系型数据库也能支持,同步复制,水平分区扩展,但维护工作相当繁杂,并很难做到热扩展 4.内存操作(快速), 并发量高(非阻塞进程), 硬盘回写(数据完整和高效的平衡),备份和恢复 复制(高可用性,和连续服务), 分片(热扩展,海量数据) 操作简单(JSON),负载均衡,分布式部署(局域网,和物理部分), 事务支持

MongoDB基础教程

目录 1下载与安装---------------------------------------------------------------------------------2 2启动------------------------------------------------------------------------------------------2 3基本概念------------------------------------------------------------------------------------3 4常用命令------------------------------------------------------------------------------------3 4.1调用命令----------------------------------------------------------------------------3 4.2use------------------------------------------------------------------------------------4 4.3插入数据----------------------------------------------------------------------------4 4.4查询数据----------------------------------------------------------------------------5 4.4.1查询返回document---------------------------------------------------------6 4.4.2查询返回field---------------------------------------------------------------6 4.4.3结果排序--------------------------------------------------------------------7 4.4.4分页查询--------------------------------------------------------------------7 4.4.5查询数量--------------------------------------------------------------------7 4.5删除数据----------------------------------------------------------------------------7 4.6更新数据(与关系型差异较大)----------------------------------------------7 4.6.1增加field---------------------------------------------------------------------8 4.6.2upset--------------------------------------------------------------------------8 4.6.3批量更新--------------------------------------------------------------------8 4.7索引----------------------------------------------------------------------------------8 5其他------------------------------------------------------------------------------------------9 5.1使用web获得mongoDB的信息--------------------------------------------------9 5.2数据备份和恢复-------------------------------------------------------------------9 5.3导入导出数据----------------------------------------------------------------------9 6使用MongoDB-----------------------------------------------------------------------------9

相关主题
文本预览
相关文档 最新文档