注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

node.js学习日志(五)—— Mongodb  

2011-09-22 09:46:50|  分类: node |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
介绍:
在了解Mongodb之前一直以为Mongodb是芒果数据库,其实芒果的英文是:Mango,两者好像没有关系。
Mongodb是nosql家族中的重要一员,它是文档型数据库,说白了就是mysql的行 = Mongodb的文档。不同于mysql行的字段,Mongodb的文档键非常灵活,不用事先定义也不会固定不变,当然键也不必定义什么“inter型,varchar型”等等。而且Mongodb设计初衷就是让用户易于使用,分布式,切片等等一些功能只需使用缺省自动设置就能满足大部分用户的需求了。
可以说从易用性来讲Mongodb要远远的方便与传统关系型数据库。

性能测试:
从性能上来说呢?有网友经过测试,我们直接拿他的测试结果来看把:
在100W数据和1000W数据插入和查询时,Mongodb的效率分别都是mysql的4倍和2倍。
而且Mongodb是从2008年就开始发展起来的,至今也有3个年头了,其稳定性也经过时间的考验。
所以对于这样一个效率高,门槛低,稳定性好的数据库我们没有理由说不。

安装和启动流程:
1、安装Mongodb非常容易,不需要编译,直接去官网下载对应操作系统的版本
2、下载好以后在指定目录解压缩:tar  –zxvf  (tar包名字)    //在本目录下解压了
3、进入Mongodb安装目录,在bin文件夹中,输入./mongod +参数(具体参数可以详见手册) ,这样就可以启动Mongodb数据库了

node.js的Mongodb插件:node-mongodb-native
是不是很简单,然后我们利用node.js的node-mongodb-native插件来操作Mongodb数据库。
这个API写的很详细相当好,分以下几段:
Database :数据库
Collections : 集合
Querying documents :查询文档
Inserting/updating documents :插入、更新文档
GridStore :GridFS文件存储
Indexes :索引
Replicasets :分布式管理副本集
官方示例提供的expample我个人觉得不大好,我们重新写一个:
var mongodb = require("mongodb"),   
    mongoserver = new mongodb.Server("127.0.0.1", 27017,{}), //连接Mongodb
    db_connector = new mongodb.Db('test', mongoserver, {});  //这里如果test数据库不存在则创建它,如果存在则连上它
注意:在创建mongoserver时第3个参数有一个:poolSize属性,官方说明: specify the number of connections in the pool, default is 1。
看上去好像可以替代连接池的东西,用generic-pool还是用node-mongodb-native自带的连接池这看个人喜好吧。
db_connector.open(function(err, db){
//dosomething
db.close(); //这只是关闭对“test”的连接,不会切断对Mongodb的连接,所以用完就关闭他
}
具体的操作代码还是看官方提供的API比较靠谱,说的也很详细,我简单将调试代码帖上来参考下:

1、创建文档集合“testcollection”,并且插入一条文档{test:"value"}
db.createCollection("testcollection", function(err, collection){
collection.insert({"test":"value"});
});

2、先选择"testcollection"集合,然后更新{a:4}的文档为{author:"12312213"},然后返回查看整个文档集合"testcollection"的所有文档。
db.collection("testcollection", function(err, collection){
collection.update({a:4}, {$set: {author:"12312213"}},function(err, x){
console.log(arguments.length)
 //注意:这里可能我的mongodb版本是1.8+,官方提供的说明是:the second is the count of records that were modified.但是这里无法返回,不过问题也不大。
collection.find().toArray(function(err, r){
console.log(r)
})
})
});

3、先选择"testcollection"集合,cursor.count代表通过 collection.find({})返回的文档数量cursor.toArray()表示将这些返回的文档数组化。
db.collection("testcollection", function(err, collection){
var cursor = collection.find({});
cursor.count(function(err, count){
console.log("Total matches: "+count);
});
cursor.toArray(function(err, results){
console.log(results.length)
console.log(results[0]._id)
})
});

其他一些功能也没一一测试,不过开发时对照这API应该很轻松就完成了对Mongodb的操作。
另外推荐一本Mongodb入门书籍,图灵出版的 《Mongodb权威指南》,书挺好的,可以大致了解整个Mongodb的优势和一些操作命令。


  评论这张
 
阅读(4889)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016