#存入数据
#基于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();
*/
}
}
分享到:
相关推荐
mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践,mongodb实践。
MongoDB简介与实践
Mongodb是主流的NOSQL数据库之一,Mongodb最佳实践,详细介绍了Mongodb使用以及底层原理,和运维管理; 1.Mongodb数据结构,以及存储方式 2.增删改查使用,分页,排序,投影,以及多种扩展使用 3.丰富查询语句,比如...
MongoDB实践
视觉中国的MongoDB应用实践 视觉中国的MongoDB应用实践
关系型数据库迁移MongoDB实践.pptx
MongoDB 性能最佳实践.
MongoDB应用实践 MongoDB应用实践 MongoDB应用实践 MongoDB应用实践
-涵盖了将数据从RDBMS移至MongoDB时的最佳实践和注意事项 MongoDB现代化记分卡 -使用它来确定哪些现有的旧版应用程序适合迁移到MongoDB 实践Medical_Claims_RDBMS_ERD和Medical_Claims_MongoDB -此方案适用于...
day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合操作 day5:索引的特性及应用 day6:MongoDB实例搭建仓位管理API day7:数据模型优化及设计 day8:复制集介绍及演练 day9:海量数据分片 day10:数据库认证与授权...
高可用的MongoDB集群部署实践
mongodb 最佳实践,官方团队指导,内容非常详细丰富,适合指导阅读
MongoDb是一种非关系型的数据库(Nosql)相比关系型数据库其中之一的好处是它有灵活 的拓展字段, 二、MongoDB结构 MongoDB的数据模型是面向文档性的,这里的文档指的是类似json的机构。 MongoDB层次机构如下图,...
网易游戏MongoDB数据备份与恢复实践.pdf
《MongoDb in Action》讲解mongodb方面的书籍,比较详细,配合那个权威指南
MongoDB热温数据的最佳实践.pdf
mongdodb实践总结(中文版),一份工作中常遇到mongodb问题的总结文档
MongoDB热温数据的最佳实践.pptx
Node.js 实践: 使用 MongoDB 存储数据 MongoDB命令行工具的使用 在项目中如何有效组织和使用Mongoose
MongoDB数据库优化实践.pptx