[互联网]MongoDB详解.ppt
《[互联网]MongoDB详解.ppt》由会员分享,可在线阅读,更多相关《[互联网]MongoDB详解.ppt(49页珍藏版)》请在三一文库上搜索。
1、NoSql非关系数据库 NoSQL,意即反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发 展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对 于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。 李清华 Email: 随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关 系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和 高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题, 例如: 1、High performance - 对数据库
2、高并发读写的需求 web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使 用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关 系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已 经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如像 JavaEye网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是 一个相当普遍的需求。 2、Huge Storage - 对海量数据的高效率存储和访问的需求 类似Facebook,twitter,Friendfeed这样的
3、SNS网站,每天用户产生海量的用户动态,以 Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条 记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户 登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。 3、High Scalability $gte : = ; $lt : 20 Mongo: db.user.distinct(name, age: $lt : 20) Dynamic querys Advanced MySQL: SELECT name, sum(marks) FROM user GR
4、OUP BY name Mongo: db.user.group( key : name : true, cond: name : foo, reduce: function(obj,prev) prev.msum += obj.marks; , initial: msum : 0 ); MySQL: SELECT name FROM user WHERE age mongo.tgz 如果没有安装curl 先安装apt-get install curl 添加用户 $ adduser mongodb $ passwd mongodb 解压到mongdb用户server目录下 $ tar xzf
5、mongo.tgz 步骤二:创建数据文件夹 默认情况下,MongoDB会在/data/db/这个文件夹存放数据,这个文件夹需要自己手动创建。 通过如下方式创建: su mongodb 进入mongodb解压目录 $ sudo mkdir -p data/db/ $sudo mkdir p data/log/ 当然 可以 通过-dbpath 命令 指定MongoDB将数据存储到另外的目录中去。 步骤三:启动数据库 ./bin/mongod fork port 10000 dbpath data/db logpath data/log/mdb.log 步骤四:进入数据库 ./bin/mongo p
6、ort 10000 db.foo.save( a : 1 ) 结果是: “_id“ : ObjectId(“4cd181a31415ffb41a094f43“), “a“ : 1 OK,搞定! Windows安装 步骤一:下载文件 对于32位的windows http:/downloads.mongodb.org/win32/mongodb-win32-i386-1.8.0.zip 解压到e:/mongodb 步骤二:创建数据文件夹 进入mongodb解压目录 创建目录data/db/ 创建目录data/log/ 步骤三:启动数据库 ./bin/mongod fork port 10000 d
7、bpath data/db logpath data/log/mdb.log 步骤四:进入数据库 ./bin/mongo port 10000 db.foo.save( a : 1 ) 结果是: “_id“ : ObjectId(“4cd181a31415ffb41a094f43“), “a“ : 1 OK,搞定! MongoDB JAVA简单操 作 MongoDB提供JAVA连接操作接口。 下载地址: http:/ API地址: http:/api.mongodb.org/java/2.6-pre-/index.html 1 、建立连接 要建立MongoDB的连接,你只要指定要连接到的数据库
8、就可以。这个数据库不一定存在,如 果不存在,MongoDB会先为你建立这个库。同时,在连接时你也可以具体指定要连接到的网 络地址和端口。下面的是连接本机数据库的一些例子: import com.mongodb.Mongo; import com.mongodb.DBCollection; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBCursor; import com.mongodb.MongoAdmin; Mongo db = new Mongo(“mydb“); Mo
9、ngo db = new Mongo(“localhost“, “mydb“); Mongo db = new Mongo(“localhost“, 10000, “mydb“); 2 安全验证(非必选) MongoDB服务可以在安全模式运行,此时任何客户端要连接数据库时需使用用户名和密码。 在JAVA中可使用如下方法连接: boolean auth = db.authenticate(userName, password); 如果用户名密码验证通过,返回值为true,否则为false。 3 获取集合列表 每个数据库都存在零个或多个集合,需要时你可以获得他们的列表: Set colls = d
10、b.getCollectionNames(); for(String s : colls) System.out.println(s); 4 获得一个集合 要获得某个特定集合,你可以指定集合的名字,并使用getCollection()方法: DBCollection coll = db.getCollection(“testCollection“); 当你获取了这个集合对象,你就可以对数据进行增删查改之类的操作。 5 插入文档 当你获得了一个集合对象,你就可以把文档插入到这个对象中。例如,存在一个JSON式的小 文档: “name“ : “MongoDB“, “type“ : “databas
11、e“, “count“ : 1, “info“ : x : 203, 请注意,这个文档包含一个内部文档。我们可以使用BasicDBObject类来创建这个文档,并且 使用insert()方法方便地将它插入到集合中。 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
12、“, 102); doc.put(“info“, info); coll.insert(doc); 6 使用findOne()查找集合中第一个文档 要查找我们上一步插入的那个文档,可以简单地使用findOne()操作来获取集合中第一个文档。 这个方法返回一个单一文档(这是相对于使用DBCursor的find()操作的返回),这对于只有一 个文档或我们刚插入第一个文档时很有用,因为此时并不需要使用光标。 DBObject myDoc = coll.findOne(); System.out.println(myDoc); 返回类似: “_id“ : “ac907a1f5b9d5e4a233ed3
13、00“ , “name“ : “MongoDB“ , “type“ : 1 , “info“ : “x“ : 203 , 注意_id和_ns元素是由MongoDB自动加入你的文档。记住:MongoDB内部存储使用的元素名 是以“_”做为开始。 7 加入多种文档 为了做更多有趣的查询试验,让我们向集合中加入多种文档类型,像: “i” : value 可以通过循环来实现。 8 统计文档数量 使用getCount()方法 System.out.println(coll.getCount(); 9 使用光标(cursor)来获取全部文档 为了获取集合中的所有文档,我们可以使用find()方法。这个方法
14、返回一上DBCursor对象,来 允许我们将符合查询条件的文档迭代出来。 DBCursor cur = coll.find(); while(cur.hasNext() System.out.println(cur.next(); 10 在查询中获取单一文档 我们可以创建一个查询,并传递给find()方法来获取集合中所有文档的一个子集。例如,我们想 要查询域名为“i“,并且值为71的文档: BasicDBObject query = new BasicDBObject(); query.put(“i“, 71); cur = coll.find(query); while(cur.hasNex
15、t() System.out.println(cur.next(); 11 使用条件查询获取集合 例如,我们想要查询所有i50的文档: BasicDBObject query = new BasicDBObject(); query.put(“i“, new BasicDBObject(“$gt“, 50); cur = coll.find(query); while(cur.hasNext() System.out.println(cur.next(); 当然,我们也可以做20 指定主服务器及端口 -only arg arg specifies a single database to re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 互联网 MongoDB 详解
链接地址:https://www.31doc.com/p-1998403.html