MongoDB学习小结

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: (本文来源于我的工作笔记,是刚接触Mongo时整理的)1,mongodb是面向文档类型的层次型数据库,documents -> collections -> databases -> m...

(本文来源于我的工作笔记,是刚接触Mongo时整理的)

1,mongodb是面向文档类型的层次型数据库,documents -> collections -> databases -> mongodb;
2,在需要存储大数据量的情况下使用;
3,操作的语言是js,里面的对象是js生成的,例如mongo,collection,而里面的操作例如:find,sort,insert,update,remove和$等都是用js解析的;
4,mongodb本身可以说就是一个js解析器;
5,mongodb是一个免安装的服务,和redis一样,支持在命令行下运行,也支持后台单进程运行,只需要使用-fork参数;
6,mongodb运行的命令是mongod -dbpath mypath,其中mypath是要指定的数据库的目录;
7,mongodb的bin目录下还有一些常用工具,mongod是服务程序,mongo则是客户端连接工具,mongostat是实时监控工具;
8,mongodb的性能测试报告中指出,mongodb的批量导入与批量导出的性能很高,而其并发处理的能力只是一般,若并发数较大,则命中率会有所降低;
9,我目前使用java连接mongodb的方式有两种:mongo-java-driver和spring-data-mongodb,都不难使用,后者支持spring;
10,mongodb里默认有个主键叫_id,若插入的数据没有指定一个具体的_id,mongodb则会自动生成一个ObjectId,由于mongodb的设计初衷是分布式,所以主键没有自增的功能;
11,mongodb中插入操作有时会变成更新操作,当插入的_id和已经存在的_id相同时;
12,mongodb中判断两个document是否相同是根据_id的;
13,mongodb的分布式是由于支持分片(shard)功能,而其高性能的批量导入与导出是基础;
14,分片就是取其某一子集;--------------MongoDB宏观-------------
1,mongodb是面向文档类型的层次型数据库,documents -> collections -> databases -> mongodb;
2,在需要存储大数据量的情况下使用;
3,操作的语言是js,里面的对象是js生成的,例如mongo,collection,而里面的操作例如:find,sort,insert,update,remove,save和$等都是用js解析的;
4,mongodb本身可以说就是一个js解析器;
5,mongodb是一个免安装的服务,和redis一样,支持在命令行下运行,也支持后台单进程运行,只需要使用-fork参数;
6,mongodb运行的命令是mongod -dbpath mypath,其中mypath是要指定的数据库的目录;
7,mongodb的bin目录下还有一些常用工具,mongod是服务程序,mongo则是客户端连接工具,mongostat是实时监控工具;
8,mongodb的性能测试报告中指出,mongodb的批量导入与批量导出的性能很高,而其并发处理的能力只是一般,若并发数较大,则命中率会有所降低;
9,我目前使用java连接mongodb的方式有两种:mongo-java-driver和spring-data-mongodb,都不难使用,后者支持spring;
10,mongodb里默认有个主键叫_id,若插入的数据没有指定一个具体的_id,mongodb则会自动生成一个ObjectId,由于mongodb的设计初衷是分布式,所以主键没有自增的功能;
11,mongodb中save操作有时会变成updata操作,当save的_id和已经存在的_id相同时;
12,mongodb中判断两个document是否相同是根据_id的;
13,mongodb的分布式是由于支持分片(shard)功能,而其高性能的批量导入与导出是基础;
14,分片就是取其某一子集;


--------------查询与性能---------------
15,查询区分大小写(大小写敏感),虽然可以使用正则表达式,但那样会降低性能;
16,单个文件的大小是有限制的(旧版是4M,新版是16M);
17,高速的写入和更新的原因是没有明确的错误通知(也就是不安全写入),若需要安全写入可用getLastError with 'j',0.1s/次保存到日志;
18,(原文引用)MongoDB使用内存映射文件并且每60秒向磁盘输出一次通知,这就意味着最大程度上你可能丢失60秒加上向硬盘输出通知这段时间内所有的数据。为了避免数据丢失,MongoDB从2.0版本起就添加了Journaling(默认情况下开启)。当然Journaling会轻微的影响到性能,大约5%。但是对于多数人来说额外带来的安全性肯定是物有所值的。


-------------查询与索引------------------
19,最好要创建查询中用到的键的索引,不然MongoDB会做整个表的扫描,那样会影响查询性能,索引的创建方式是db[.集合名].ensureIndex({"键名" : 1},{"background" : true});
20,某个键的索引当且仅当用该键查询时才有用,对于用其他键查询无用;
21,要尽可能少的创建索引,因为插入,更新和删除都会因为索引而带来额外的开销,同样影响到性能;
22,使用{"background" : true}使创建索引的过程在后台完成,这样数据库不会阻塞建立索引时的所有请求;
23,删除索引(system.indexes中会有所有索引名),db.runCommand({"dropIndexes" : "集合名", "index" : "索引名"})


-----------------MongoDB聚合--------------
24,db.collection.count()返回集合中的文档数量;
25,db.runCommand({"distinct" : "集合名", "key" : "键名"}),用来找出指定键的所有不同值;


-----------------MongoDB操作--------------
26,db.collection.save()与db.collection.insert()的区别:insert有判断主键(_id)是否存在,若存在则不做任何操作,而save则不做判断,不存在则insert,存在则update;
27,db.collection.update()默认只更新一条数据,若要更新多条,要加{"multi" : true};
28,后台入口:http://host:http:28017/,需要启动时加-rest参数支持;
29,MongoDB通过db.eval(javascript代码)在服务器端执行javascript代码;


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
存储 NoSQL MongoDB
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 需要一个 MongoDB 驱动程序来访问 MongoDB 数据库。我将使用 MongoDB 驱动程序 PyMongo 建议您使用 PIP 来安装 PyMongo。PIP 很可能已经安装在您的 Python 环境中。将命令行导航到 PIP 的位置,然后键入以下内容:
93 1
|
9月前
|
NoSQL MongoDB 数据库
【mongo 系列】mongodb 学习九,MongoDB 主从集群 2
继续咱们 mongodb 集群的学习和分享 上次分享了 mongodb 主从集群的同步机制(oplog),心跳机制,这次我们继续看看选举机
|
9月前
|
存储 NoSQL MongoDB
【mongo 系列】mongodb 学习七,索引实操练习
向 mydoc 集合中,插入多条数据,mydoc 之前是没有存在过的,我们直接使用 db.mydoc.insertMany() ,mongodb 会默认给我们新建这个集合
|
4月前
|
JavaScript NoSQL MongoDB
【Vue学习】 图书管理系统—mongodb的使用(一)
【Vue学习】 图书管理系统—mongodb的使用(一)
|
4月前
|
存储 NoSQL Linux
小白带你学习linux的MongoDB(三十四)
小白带你学习linux的MongoDB(三十四)
53 1
|
8月前
|
存储 NoSQL 关系型数据库
【数据库MongoDB的学习】
【数据库MongoDB的学习】
49 0
|
9月前
|
存储 NoSQL MongoDB
【mongo 系列】mongodb 学习十,MongoDB 分片集群
之前说到了主从集群,关于主从集群的搭建以及细节后面会再次分享,这次我们先初步来看看 分片集群
114 0
|
9月前
|
存储 NoSQL MongoDB
【mongo 系列】mongodb 学习十三,内存引擎及配置
上次我们分享到了 wiredTiger 引擎以及他对于以前默认的 MMAPV1 引擎的优势 关于 wiredTiger 引擎 配置这里补充一下
250 0
|
9月前
|
存储 缓存 NoSQL
【mongo 系列】mongodb 学习十二,MongoDB 存储引擎
上次我们说到了关于 mongodb 的集群,分为主从集群和分片集群,对于分片集群中的分片这里需要注意如下几点,一起来回顾一下
193 0
|
9月前
|
NoSQL MongoDB Cloud Native
【mongo 系列】mongodb 学习十一,MongoDB 分片集群之分片集合
MongoDB 中 分片集群有专门推荐的模式,例如 分片集合