Mongodb使用总结
学习Mongodb已经有半年多了,为啥学习它,工作需要啊。好了,废话不说,总结在实际项目应用中的几点问题。
学习总结
首先,mongodb基本上既照顾到了sql某些语法,又有nosql的许多优点。入门简单,上手快,所以很多人开始探索nosql及云计算时,基本上都是从mongodb开始。但有几点需要注意:
1、mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。
2、mongodb的优势不是在于他能很快进行排序和检索,而是他支持一些nosql的特性,比如,高可用性,面向文档,支持子文档,文档内数组,松散的文档结构定义(这个使用的时候要注意哦,特别是某些字段不是必须的时候)等许多特性。当你像利用他来代替常规数据库以提高排序性能或者复杂检索时,你会死的很惨。
3、Mongodb自带的学习资料(MongoDB-manual-master.pdf)很重要,基本上所有的问题,都能在上面找到答案,而且文档很丰富。因此学习起来比较轻松,但是文档大部分是英语,如果英语有困难,那就无能为力了。不过里面的英语也很简单。
4、其Java API基本上没有文档,如何怎么使用JAVA API呢?这个其实用的多了,基本上也不用看client API了,mongodb里面操作的都是json。json也可以理解成java中的map,key就是你要执行的操作,比如你想set一个列的值,key就是$set,value可能是一个字符串,也可能还是一个json。mongodb的BasicDBObject就是一个继承自map的类。
使用经验
1、Mongodb在内存够用的时候,性能特别高,但是当你的数据超过内存限制时,性能急剧下降(通常会下降10倍)。如果你使用mongodb,一定要配尽量大的内存,足以保留你业务的热数据。
2、Mongodb跟mysql一样,对于常用的查询条件,该建索引的建索引。不要认为内存够用,数据就会在内存,有时,内存够用,数据也不一定在内存。不知道mongodb怎么处理这些数据的。
3、一定要使用副本集,一个主库,进行更新等操作,一个replicaset,用于检索查询。如果使用一个实例的话,更新等操作会锁定整个库,从而影响到查询检索的速度。项目中经过测试,有副本集的库,速度要比没有副本的库快至少5倍。
4、Mongodb对两个及以上的数组列,不能建立复合索引。也就是说,一个复合索引中,不能包含两列都是数组的列。
由于个人对mongodb的使用时间较短,使用的特性有限,总结难免出现差错,欢迎大家拍砖。
Mongodb使用总结的更多相关文章
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- MongoDB系列(一):简介及安装
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...
- [原]分享一下我和MongoDB与Redis那些事
缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...
- 用MongoDB分析合肥餐饮业
看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...
随机推荐
- Java系统程序员修炼之道
一:Java语言学习 对线程(thread),串行化,反射,网络编程,JNI技术,容器(Map,List, Iterator), 类加载器 (ClassLoader),输入输出流,垃圾回收机制, 有比 ...
- javascript for in 循环时,会取到Array.prototype
/** *删除数组指定下标或指定对象 */ if(!Array.prototype.remove){ Array.prototype.remove = function(obj){ for(var i ...
- 自己写http获取网络资源和解析json数据
虽然github上有很多开源的,方便的jar报,用起来也很方便,但我们也需要了解其中的原理,如何自己不用第三方jar包来获取网络资源 主要代码如下: 因为联网是耗时的操作,所以需要另开一个线程来执行 ...
- golang 依赖控制反转(IoC)
主流开发语言,为了达到项目间的低耦合,都会借助IoC框架来实现.即抽象和实现分离,使用抽象层,不用关心这些抽象层的具体实现:抽象层的实现,可以独立实现.现在比较流行的领域驱动设计(ddd),为了达到将 ...
- Google搜索技术
命令 双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配.bd和Google都支持这个指令. 减号 减号代表搜索不包含减号后面的 ...
- 获取文件sha1 值
单元 IdHashSHA申明 function GetFile_SHA1(const iFileName: String): String; //Checksum hash value for fir ...
- ios数据库FMDB
一.下载fmdb类库 二.添加libsqulite3.0.dylib 三.添加头文件#import "FMDB.h" 四.打开数据库 a.设置路径NSString *path = ...
- 为 Date 对象添加 ago 属性
/* * 此处,__defineGetter__与__defineSetter__相当于C#实体中类中的get与set **/ Date.prototype.__defineGetter__('ago ...
- vue防止闪烁
v-text也可以 转意的话使用v-html <style> [v-clock]{ display:none } <style> <span>{{msg}}< ...
- 10_Jaxws使用自定义pojo发布服务
[简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...