MongoDB
DrifterJ
You must be willing to let go of the life you have planned so as to have the life that is waiting for you. Like a drifter. This is the ultimate dream of my life. I will treasure her at the bottom of my heart.
展开
-
学习MongoDB--(2-3):MongoDB入门(数据类型)
通过前面我们的例子中,我们不难看出,MongoDB中的文档类似于JSON。JSON是一种简单的数据交换格式,在数据类型方面,只支持:null,布尔,数字,字符串,数组和对象。这几种类型在某些实际应用中表现力还是不够,比如JSON本身不直接支持日期类型,对于数字,JSON本身也没法区分整数和浮点数,更不能区分32位数字和64位数字。MongoDB再保留了JSON的各类特性外,又为其添加了一些数据原创 2012-08-03 16:49:17 · 4405 阅读 · 0 评论 -
学习MongoDB--(9-3):复制(主从复制--进阶2)
上一篇主要提及了主从复制的启动选项和从节点的一些实际用途,这篇继续进一步讲一下主从复制的一些内容。【复制状态和本地数据库】在复制过程中,复制状态都会被存储在本地数据库(即local)中,主节点和从节点都是。local数据库的内部不会被复制,这样就可以保证每一个MongoDB服务器上会有一个私有独立的local数据库。local数据库不限于存储复制状态信息,用户本身希望不被复制的文档也可原创 2012-09-01 23:06:14 · 2588 阅读 · 0 评论 -
学习MongoDB--(9-4):复制(副本集)
先说一下副本集的概念:有自动故障恢复功能的主从结构!前面讲到的主从结构和副本集最大的区别就是:副本集没有固定的“主节点”,整个集群结构会动态选举出一个“主节点”,当其不能工作了,则会动态变更到其他节点。副本集对其节点又特殊的称呼:活跃节点(“主节点”)和 备份节点(“从节点”)。副本集最美妙的地方是其自动化,在当前活跃节点因故障停止时,备份节点会自动升级为活跃节点!以维持系统的正常运行。搭原创 2012-09-02 11:42:03 · 7493 阅读 · 0 评论 -
学习MongoDB--(10-2):分片(建立分片)
MongoDB分片系统通常由以下3部分组成:1》 片: 片就是一个存放集合数据的容器。我们上一篇也提到,其可以是一个单独的mongod服务,也可以是一个副本集(多个mongod服务,一个是主活跃节点),这个视使用环境来确定片的形态!2》 mongos: MongoDB自带的路由服务进程,它路由所有的客户端请求,并将各个片的结果进行汇聚返回。这个服务进程本身不会存储任何数据或配置信息(有时会原创 2012-09-02 17:15:47 · 4127 阅读 · 0 评论 -
学习MongoDB--(7-1):进阶指南(数据库命令 & 固定集合)
前面我们谈了很多关于在MongoDB中创建、读取、更新、删除文档。除了这些,MongoDB还支持大量的高级操作,这些操作都是通过命令来实现的。实际上,除了CRUD,MongoDB的其他功能都是直接或间接通过命令来完成的。我们在前面也多次使用了命令操作,如前面的mapreduce,就是通过命令来触发运行的!【命令的工作原理】MongoDB中的命令其实是作为一种“特殊类型的查询”来实现的!这些原创 2012-08-24 16:03:54 · 9885 阅读 · 0 评论 -
学习MongoDB--(7-2):进阶指南(GridFS & 服务器端脚本 & 数据库引用)
【GridFS】GridFS是一个建立在普通MongoDB基础上的轻量级文件存储系统。GridFS的一个基本思想就是将大的文件分成很多块,每块作为一个单独的文档进行存储(MongoDB本身支持在文档中存储二进制数据)。除了这些分拆的数据文档外,还有一个单独的文档用于记录各个存储块的相关信息和文件的元数据信息。那如何使用GridFS呢?使用GridFS的方法最简单的就是利用mongofile原创 2012-08-25 11:01:59 · 3962 阅读 · 1 评论 -
学习MongoDB--(8-1):管理(启动停止 & 运行监控)
前面介绍MongoDB时,我们提到,其管理理念就是尽量简化系统操作,自动完成各种配置。但人工参与有时仍然是不可避免的,我们这次主要就从数据库管理员的角度来看一下MongoDB。【启动MongoDB】执行mongod命令,启动mongod进程,就会启动MongoDB数据库服务。我们在命令行窗口中运行mongod --help可以看到这个命令有大量可选的option,我们这里重点介绍几个:原创 2012-08-25 15:27:51 · 7152 阅读 · 0 评论 -
学习MongoDB--(8-2):管理(安全认证 & 备份修复)
【安全和认证】系统管理员的一个重要工作就是确保系统的安全,使MongoDB安全的最好的方式就是在一个可信的环境中运行服务,保证只有可信的机器才能访问它。MongoDB支持对单个连接的认证。启动MongoDB时,通过使用--auth选项,就可以开启数据库的安全性检查,此时只有经过数据库认证的用户才可以进行读写操作。我们首先要在未开启安全性检查的情况下(不使用--auth选项)向数据库中添加用原创 2012-08-26 13:33:51 · 2966 阅读 · 0 评论 -
学习MongoDB--(9-1):复制(主从复制--基本示例和原理介绍)
在生产环境中,MongoDB极力推荐使用其复制功能!数据库管理员的一个十分重要的工作就是确保复制设置正确且运转良好!复制可以用来应对故障切换、数据集成、读扩展和离线批处理的数据源!马上就来讲一下复制的用法和其基本原理。【主从复制】主从复制是MongoDB中最常用的复制方式,这种方式非常灵活,常见的搭配方式为:一主一从、一主多从。具体操作方式就是,通过mongod --master启原创 2012-08-26 20:45:06 · 6123 阅读 · 1 评论 -
学习MongoDB--(10-3):分片(管理分片 & 生产配置)
经过上篇的学习,我们搭建了自己的分片系统(通俗点就是MongoDB数据库集群系统),我们通过如下命令将两个mongod的服务作为“片”添加到系统中,并且让数据库“mydb”的分片功能打开,指定集合“users”的片键为“name”:C:\Users\liuxj>mongo localhost:30000/adminMongoDB shell version: 2.0.6connecting原创 2012-09-05 20:28:48 · 4925 阅读 · 2 评论 -
学习MongoDB--(10-1):分片(简介 & 自动分片 & 片键)
分片(增加服务器,水平扩展)是MongoDB的扩展方式,通过分片能过增加更多的机器来应对不断增加的负载和数据,还不影响应用。【简介】分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。在关系型数据库中,当一个表太大(超过几亿行数据)时,我们也有分表的做法,和这里的分片是类似的概念。手动分片:当我们应用的瓶颈出现在数据库系统时,如果我们使用的是关系型数据库,我们通常要原创 2012-09-02 16:11:45 · 6991 阅读 · 0 评论 -
学习MongoDB--(11):应用举例(利用java操作MongoDB)
前面我们都是通过shell来操作存取MongoDB的数据,shell中使用的语言就是javascript。我们这次说一下如何通过Java来访问操作MongoDB数据库的。Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定。可以到MongoDB官方网站下载驱动,我的资源中也有,驱动版本为2.9.0。这个jar文件中,有两个包,我们会经常用到com.mongodb 和原创 2012-09-09 13:21:17 · 5584 阅读 · 2 评论 -
学习MongoDB--(9-2):复制(主从复制--进阶)
受益于MongoDB的简化操作的思想,主从复制的结构搭建比较容易。在搭建过程中有有一些选项可以使用,我们先来了解一下。【选项】1》 --only :这个选项在2.0.7版本的MongoDB中无法在启动从服务器时使用。如果要使用该参数,在启动从服务器时不能通过--source选项指定主服务器,启动从服务器后,手动向local.sources集合中插入主服务器信息,并且此时通过键"only"指原创 2012-08-31 21:19:26 · 3549 阅读 · 0 评论 -
学习MongoDB--(1):MongoDB简介
随着应用需要处理数据量的指数级膨胀和分析这种海量数据需求的膨胀,关系型数据库渐渐显露出了疲态。系统进行横向扩展时,关系型数据库也往往成为性能提升的瓶颈。这时,NoSQL相关技术成为这轮更迭的发起者和成功者。这其中MongoDB风头最劲了。MongoDB非常适合于大数据量,高并发,弱事务的互联网应用,并且其内置的水平扩展机制提供了从百万到十亿级别的数据量处理能力!这点可以保证采用MongoDB的应用原创 2012-07-31 16:45:02 · 2570 阅读 · 0 评论 -
学习MongoDB--(6-1):聚合(初级聚合函数使用)
前面主要介绍了MongoDB的基础操作及索引相关内容,同关系型数据库一样,MongoDB同样也提供了对聚合函数的支持!并且因为其集合没有模式这种特殊性,MongoDB对聚合还有了更强大的支持!这次我们先来看看一些基本的聚合函数的使用。【count】集合的count函数是最简单的聚合函数,返回集合中文档的数量,也可以接受一个查询文档,统计符合这个查询的文档数量:> db.user.f原创 2012-08-12 13:40:03 · 7946 阅读 · 0 评论 -
学习MongoDB--(2-1):MongoDB入门(概念简介和启动)
开始进入正式学习使用MongoDB的阶段了,首先还是详细介绍一下MongoDB的一些概念吧:1》 文档:这个是MongoDB中数据的基本单元,非常类似于关系型数据库的行,但比传统行能表示的信息复杂很多。2》 集合:这个在MongoDB中代表一组文档,类似于关系型数据库中的表。但在MongoDB中的表(就是集合)是没有模式的,你可以将完全不同的文档放入同一个集合中,MongoDB不会做这方面原创 2012-08-02 16:13:49 · 5073 阅读 · 3 评论 -
学习MongoDB--(2-2):MongoDB入门(Shell基本操作)
MongoDB自带一个JavaScript Shell。可以通过这个Shell与启动的MongoDB实例进行交互,进行交互的语言就是JavaScript ( 对于接触过Web前台开发的童鞋,这个真是一个惊喜啊!)。在Windows下先启动MongoDB服务,然后运行mongo命令即可打开Shell:Shell启动默认会连接到MongoDB的test数据库。你可以对这个数据库中的集合和文档进原创 2012-08-02 20:38:39 · 7736 阅读 · 0 评论 -
学习MongoDB--(3-1):创建、删除及更新文档
这次主要详细讲解一下通过Shell对文档进行的各种操作,前面我们知道运行mongo命令可以得到一个MongoDB的客户端,在这里可以对数据库发出命令进行各种操作。一般我们假定他和数据库服务运行在同一台机器上,还假定数据库服务使用默认的端口27017,但mongo本身命令还是很强大的,支持远程连接到另一台服务器,也支持连接不同端口,如下操作即可:通过mongo命令连接机器192.168.10原创 2012-08-05 13:16:17 · 5707 阅读 · 1 评论 -
学习MongoDB--(3-2):利用修改器更新文档
前篇大篇幅讲解了update操作,在那部分中,update进行的是替换式更新,但这种更新在实际情况中用处实在很少(应该只会在文档结构发生巨变时使用)。通常我们遇到的是文档的部分更新,比如调整、增加、删除某个键。对于这种需求,MongoDB提供了原子的更新修改器。更新修改器是种特殊的键,专门用来进行复杂的细节的更新操作,比替换式更新更高效。【“$set”修改器】"$set"用来指定一个键,如原创 2012-08-05 20:20:00 · 4244 阅读 · 1 评论 -
学习MongoDB--(3-3):更新文档(结束篇)
上一篇详细讲解了MongoDB中的修改器的使用,今天把《MongoDB权威指南》第三章关于数据库更新的最后一点写一下。【修改器速度】修改器“$inc”能就地修改文档,不会引起文档大小的变化,所以操作会很快。而数组类型的修改器操作后可能引起文档大小的变化,因此会慢一些。修改器"$set"的操作如果引起了文档大小变化,则速度会慢,否则操作很快。MongoDB在为文档分配空间时,会预留一定的补白原创 2012-08-06 22:32:08 · 4012 阅读 · 1 评论 -
学习MongoDB--(4-1):MongoDB查询(基本查询条件操作符介绍)
从前面的学习中,我们得知MongoDB中使用find函数来进行查询。查询最终返回的是一个集合中文档的子集,子集合包括0个文档到这个集合中所有的文档。【第一个查询参数】find函数第一个参数是一个文档,其中给出了我们要查询集合中什么样文档的描述。如果我们要查询所有文档,可以不带任何参数调用find函数,或第一个参数为空文档{},如下例:> db.people.find();{ "_id原创 2012-08-07 21:08:36 · 20010 阅读 · 2 评论 -
学习MongoDB--(4-2):MongoDB查询(数组、内嵌文档和$where)
上篇主要介绍了一些基本的查询条件操作符的使用,主要针对的是一些单值,我们这次来讲讲如何查询文档内的数组和嵌入文档,并讲一下复杂查询"$where"。【查询数组】查询数组很容易,对于数组,我们可以这样理解:数组中每一个元素都是这个键值对键的一个有效值,如下面的例子:我们要查询出售apple的水果店:> db.fruitshop.find();{ "_id" : ObjectId("50原创 2012-08-08 22:21:57 · 79774 阅读 · 6 评论 -
学习MongoDB--(4-3):MongoDB查询(游标使用)
MongoDB中find()函数返回一个游标,客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!我们之前在Shell中进行操作,都是直接使用find()函数,并没有使用其返回值,如:> for(var i=0; i<100; i++){... db.coll.insert({"x" : i});... }原创 2012-08-09 20:47:14 · 23447 阅读 · 2 评论 -
学习MongoDB--(5-1):索引(简介、使用)
我们在使用关系型数据库时都或多或少接触过索引(index),MongoDB作为一种数据库,同样也提供了对索引的支持!索引存在的最主要目的就是加快查询速度!数据库的数据和其索引可以对应实际中我们使用的字典以及字典前面的索引部分。我们使用字典查询一个字时,会先在区区几页的索引中按照某种顺序进行定位,然后再直接翻到数百页字典的某一页。这个过程也是数据库查询数据的过程!数据库会按照索引对数据进行一个排序,原创 2012-08-10 17:18:22 · 4841 阅读 · 0 评论 -
学习MongoDB--(5-2):索引(查看索引的使用,管理索引)
前一篇简单介绍了索引,并给出了基本的索引使用,这一次,我们进一步说一下MongoDB中的索引,包括如何查看查询是否走索引,如何管理索引和地理空间索引等。【使用explain和hint】前面讲高级查询选项时,提到过"$explain" 和 ”$hint“可以作为包装查询的选项关键字使用,其实这两个本身就可以作为操作游标的函数调用!游标调用explain函数会返回一个文档,用于描述当前查询的一原创 2012-08-11 23:41:46 · 33545 阅读 · 2 评论 -
学习MongoDB--(6-2):聚合(MapReduce使用)
MapReduce是聚合工具的明星!前面讨论的count、distinct、group能做到的,MapReduce都可以做!他是一个可以轻松并行化到多台服务器的聚合方法!他会拆分问题,将各个部分发送到不同的机器上执行,当所有机器都完成时,再把结果汇集起来形成最终完整的结果!MapReduce在MongoDB中的使用通常有如下几个步骤:1》 映射(map),将操作映射到集合中的每一个文档,这原创 2012-08-12 17:53:19 · 7678 阅读 · 0 评论 -
学习MongoDB--(12):学习总结
从7月31号到9月9号,41天,27篇博文,1本书《MongDB权威指南》。工作中没使用过,个人兴趣让自己坚持整理完了这本“薄书”。收获也是很大的。写这些东西之前,MongoDB在我眼中是很神秘的,写完后,我猛然就惊醒了,MongoDB到底是什么?她就是一个数据库!她就是为应用提供存储数据的地方!和各种关系型数据库的作用完全一致!对于应用层而言,除了调用的API不同(如果有封装较好的数据库抽象原创 2012-09-09 13:52:40 · 2170 阅读 · 3 评论