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,是因为 ...
随机推荐
- ViewFlipper的简单使用实现图片轮播效果
/** * ViewFlipper: * 安卓系统自带的一个多页面管理控件,它可以实现子页面的自动切换 * 为ViewFlipper加入View: * (1)在layout布局文件静态导入子View ...
- 简单的monkey使用
先推荐大家看一篇http://www.cnblogs.com/wfh1988/archive/2010/11/16/1878224.html,里面有一些命令的使用 简单在说就是象猴子一样乱点,为了测试 ...
- 【itclx面向对象二】窥探itcl面向编程源码
从上一篇博客看出,itcl的语法其实不难,但是有个缺点,编程习惯与当前类似C++常见的面向编程还是有些区别,并且在大型项目实施中这种方式很费劲. 于是有了itclx. 例如: 1.成员变量.成员方法调 ...
- 汉诺塔的问题:4个柱子,如果塔的个数变位a,b,c,d四个,现要将n个圆盘从a全部移到d,移动规则不变
四柱汉诺塔问题的求解程序.解题思路:如a,b,c,d四柱. 要把a柱第n个盘移到目标柱子(d柱),先把上层 分两为两部份,上半部份移到b柱,下半部分移到c柱,再把第n盘移到 目标柱子,然后,c柱盘子再 ...
- 【译文】NginScript – 为什么我们要实现自己的JS引擎?
在上周的nginx.conf 2015用户大会上,我们发布了全新的JavaScript引擎nginscript的预览版.历史上,JavaScript语言已经应用在许多方面,首先是作为客户端脚本,然后又 ...
- linux时间自动同步
1,修正本地时区及ntp服务 #yum -y install ntp#rm -rf /etc/localtime#ln -s /usr/share/zoneinfo/Asia/Shanghai /et ...
- 在页面生命周期执行时 Page 对象在 SaveState 阶段都发生了什么事?
先看下 SaveViewState 的源码: // Answer any state this control or its descendants want to save on freeze. / ...
- makefile文件制作入门
一.首先,看一下最简单的C文件 //hello.c文件 #include <stdio.h> void main() { printf("hello world\n") ...
- JavaScript中事件绑定的方法总结
最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...
- ZOJ 2625 Rearrange Them(DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1625 题目大意:将n个数重新排列,使得每个数的前一个数都不能和之前的 ...