`

mongodb实践 4

阅读更多

 

#存入数据

#基于document的数据

*定义一个文档对象@

---

> doc = { author: 'joe',
		  created : new Date('03/28/2009'),
		  title : 'Yet another blog post',
		  text : 'Here is the text...',
		  tags : [ 'example', 'joe' ],
		  comments : [ { author: 'jim', comment: 'I disagree' },
			      { author: 'nancy', comment: 'Good post' }
		  ]
		}
   

*保存该文档@

> db.posts.insert(doc);
 

*检索该文档@

> db.posts.find({"comments.author":"jim"});
		{ "_id" : ObjectId("4ee9550cbd3e00000000337e"), "author" : "joe", "created" : "Sat Mar 28 2009 00:00:00 GMT+0800", "title" : "Yet another blog post", "text" : "Here is the text...", "tags" : [ "example", "joe" ], "comments" : [
			{
				"author" : "jim",
				"comment" : "I disagree"
			},
			{
				"author" : "nancy",
				"comment" : "Good post"
			}
		] }
 

ps:在使用java driver 的时候,可以通过WriteConcern来返回异常信息,如@

db.test.insert(obj, WriteConcern.SAFE);
 

#mongodb优化

 

*使用索引@

db.things.ensureIndex({i:1});
 

 

*限制返回数据条数@

db.things.find().sort({i:1}).limit(10);
 

 

*只返回需要的列@

db.things.find({},{i2:true}).sort({i:-1}).limit(10);
 

返回i2域

db.things.find({},{i2:false}).sort({i:-1}).limit(10);
 

返回除i2的域,即i,i3

db.things.find({},{i2:false,_id:0}).sort({i:-1}).limit(10);
 

返回除i2、_id的剩余域

*还可以这么写(照搬官网示例)@

db.posts.find({}, {comments:{$slice: 5}}) // first 5 comments
		db.posts.find({}, {comments:{$slice: -5}}) // last 5 comments
		db.posts.find({}, {comments:{$slice: [20, 10]}}) // skip 20, limit 10
		db.posts.find({}, {comments:{$slice: [-20, 10]}}) // 20 from end, limit 10
 

 

*使用mongodb profiler(剖面测量仪,性能监视)@

> db.commandHelp("profile");
		help for: profile enable or disable performance profiling
		{ profile : <n> }
		0=off 1=log slow ops 2=log all
		http://www.mongodb.org/display/DOCS/Database+Profiler
		> db.setProfilingLevel(2);
		{ "was" : 0, "slowms" : 100, "ok" : 1 }
 

首选查一下帮助信息,然后将profillingLevel设置为2,was表示以前的设置。查看当前设置@

> db.getProfilingLevel();
		2
 

slowms值>100ms即被认为慢,可以通过如下命令修改默认值@

> db.setProfilingLevel(2,20)
		{ "was" : 2, "slowms" : 20, "ok" : 1 }
 

 

*明确的指明需要使用的索引@

> db.things.find({i:4}).hint({i:1});
		{ "_id" : ObjectId("4ee8510a0c16000000006ec9"), "i" : 4, "i2" : 16 }
		{ "_id" : ObjectId("4ee8514d0c16000000006edd"), "i" : 4, "i2" : 16, "i3" : 64 }
 

 

 

PS:贴一段使用索引的性能测试代码:(测试环境:window7 64 4G RAM)

 

 

 

  
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

public class PerformanceTest {

	private Mongo mongo = null;

	public PerformanceTest() {
	}

	private Mongo getInstance() {
		if (mongo == null)
			try {
				mongo = new Mongo();
			} catch (UnknownHostException e) {
				e.printStackTrace();
			} catch (MongoException e) {
				e.printStackTrace();
			}
		return mongo;
	}

	/**
	 * 插入简单数据
	 */
	public static void Performance() {
		PerformanceTest pt = new PerformanceTest();
		Mongo mongo = pt.getInstance();
		DB db = mongo.getDB("mytest");
		/*// make a document and insert it
		BasicDBObject doc = new BasicDBObject();

		doc.put("name", "MongoDB");
		doc.put("type", "database");
		doc.put("count", 1);

		BasicDBObject info = new BasicDBObject();

		info.put("x", 203);
		info.put("y", 102);

		doc.put("info", info);
		Set<String> colls = db.getCollectionNames();
		for (String s : colls) {
			System.out.println(s);
		}*/

		DBCollection coll = db.getCollection("testCollection");
		int i = 0;

		
		DBObject myDoc = coll.findOne();
//		System.out.println(myDoc);

		for (i = 0; i < 6000000; i++) {
			coll.insert(new BasicDBObject().append("i", i).append("j", i).append("k", i));
		}

		/*DBCursor cur = coll.find();
		while (cur.hasNext()) {
			System.out.println(cur.next());
		}
		coll.drop();*/
		System.out.println(coll.count());
	}
	
	public static void creatIndex(){
		PerformanceTest pt = new PerformanceTest();
		Mongo mongo = pt.getInstance();
		
		DB db = mongo.getDB("mytest");
		DBCollection coll = db.getCollection("testCollection");
		coll.createIndex(new BasicDBObject("i", 1));
	}
	
	public static void query(){
		PerformanceTest pt = new PerformanceTest();
		Mongo mongo = pt.getInstance();
		DB db = mongo.getDB("mytest");
		
		BasicDBObject query = new BasicDBObject();
        query.put("i", new BasicDBObject("$gt", 1234).append("$lte", 1240));  // i.e.   20 < i <= 30
        DBCollection coll = db.getCollection("testCollection");
        DBCursor cur = coll.find(query);

        while(cur.hasNext()) {
            System.out.println(cur.next());
        }
	}
	
	public static void main(String[] args) {
		
		Long cost = System.currentTimeMillis();
		
		PerformanceTest pt = new PerformanceTest();
		Mongo mongo = pt.getInstance();
		DB db = mongo.getDB("mytest");
		
		DBCollection coll = db.getCollection("testCollection");
		System.out.println("count:"+coll.count());
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Long.MAX_VALUE);
		//创建索引后,效率有大幅度的提升,6000000条数据(仅有一列)没有索引时查询耗时2865毫秒,
		//创建索引后,查询耗时111毫秒。
//		creatIndex();
		query();

//		Performance();
		cost = System.currentTimeMillis() - cost;
		System.out.println("cost:"+cost);
		
		/*
		coll.dropIndexes();
		coll.drop();
		db.dropDatabase();
		*/
	}

}
0
0
分享到:
评论

相关推荐

    MongoDB简介与实践.pdf

    4. MongoDB介绍: MongoDB是一种面向文档(Document)的NoSQL数据库,支持多平台如Windows、Linux、Mac OS X、FreeBSD等,并且其核心是用C++实现的Solaris。MongoDB提供多语言驱动支持,包括Ruby/Ruby-on-Rails、Java...

    springboot整合mongodb实践操作

    springboot整合mongodb实践操作

    Mongodb最佳实践

    Mongodb是主流的NOSQL数据库之一,Mongodb最佳实践,详细介绍了Mongodb使用以及底层原理,和运维管理; 1.Mongodb数据结构,以及存储方式 2.增删改查使用,分页,排序,投影,以及多种扩展使用 3.丰富查询语句,比如...

    mongodb 最佳实践

    MongoDB最佳实践是指一系列用于部署和管理MongoDB数据库的高级策略和技术,旨在确保数据库的高效运行、数据安全、以及系统的稳定性和可扩展性。MongoDB是一种高性能、可扩展的分布式文档数据库,广泛用于现代应用...

    视觉中国的MongoDB应用实践.pdf

    ### 视觉中国的MongoDB应用实践 #### 一、背景介绍 随着业务需求的变化和技术的发展,视觉中国在2011年的QCon北京会议上分享了其采用MongoDB作为数据库解决方案的过程与实践经验。这一转变旨在应对多数据源的需求、...

    网易游戏MongoDB数据备份与恢复实践.pdf

    网易游戏MongoDB数据备份与恢复实践 本文将详细介绍网易游戏MongoDB数据备份与恢复实践,涵盖了MongoDB在网易游戏端游数据中心的应用、扩展性、业务需求、priority=0资源情况等多方面的内容,并对MongoDB在网易游戏...

    nosql实验六- MongoDB的安装与基本操作.docx

    4. 将 MongoDB 作为 Windows 服务随机启动 5. 安装 MongoDB VUE 在 Windows 环境下安装 MongoDB 需要下载 MongoDB Windows 版,设置数据文件和日志文件的存放目录,启动 MongoDB 服务,并将其作为 Windows 服务随机...

    mongodb-测试数据

    4. **复制集**:如果数据涉及复制集配置,你可以学习如何设置和管理MongoDB的复制集,以确保数据的高可用性。 5. **分片集群**:对于大规模数据,测试数据可能涉及分片配置,让你了解如何通过分片扩展数据库的存储...

    关系型数据库迁移MongoDB实践.pptx

    【关系型数据库迁移MongoDB实践】的PPT涵盖了从规划到实施的整个迁移过程,重点关注Schema设计、应用迁移和数据迁移。以下是对这些关键知识点的详细说明: 1. **迁移规划**:在进行数据库迁移时,规划是至关重要的...

    mongodb 官方资料

    -涵盖了将数据从RDBMS移至MongoDB时的最佳实践和注意事项 MongoDB现代化记分卡 -使用它来确定哪些现有的旧版应用程序适合迁移到MongoDB 实践Medical_Claims_RDBMS_ERD和Medical_Claims_MongoDB -此方案适用于...

    万亿级文档数据库MongoDB集群性能优化实践.pdf

    知识点4: MongoDB 用户群的重要性 MongoDB 用户群是提高 MongoDB 使用率的关键。通过成立 MongoDB 用户群,可以提高 MongoDB 的使用率,降低 MongoDB 的学习成本。 知识点5: 解决 MongoDB 误解 当前国内对 ...

    MongoDB 性能最佳实践

    在使用 MongoDB 构建高性能应用时,了解并实践性能优化策略至关重要。本篇文章将深入探讨 MongoDB 的性能最佳实践,旨在帮助你充分利用其潜力。 1. **数据模型设计** - **合适的文档结构**:设计紧凑且逻辑清晰的...

    2020年最新MongoDB 4.0专讲从入门到精通视频教程.txt

    day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合操作 day5:索引的特性及应用 day6:MongoDB实例搭建仓位管理API day7:数据模型优化及设计 day8:复制集介绍及演练 day9:海量数据分片 day10:数据库认证与授权...

    MongoDB开发应用实践

    #### 四、MongoDB实践效果 ##### 选择MongoDB的原因: - **读写性能适中**:虽然不如Redis出色,但足够满足需求。 - **文档模型**:MongoDB的文档模型非常适合处理复杂的、变化的数据结构。 - **集群机制**:...

    MongoDB简介与实践

    ### MongoDB简介与实践 #### MongoDB概述 MongoDB是一款先进的、基于分布式文件存储的数据库系统,其核心编程语言为C++。这款数据库系统的设计初衷是为了满足Web应用对高性能、可扩展数据存储方案的需求。MongoDB...

    Mastering MongoDB 4.x - Second Edition.pdf

    《Mastering MongoDB 4.x - Second Edition》这本书旨在帮助读者掌握MongoDB 4.x版本的高级知识与技术,以便于运行高容量和容错性的数据库解决方案。 首先,要掌握MongoDB 4.x的相关知识,需要了解其核心概念和特性...

Global site tag (gtag.js) - Google Analytics