mongoDB

来源:互联网 发布:2016年青少年犯罪数据 编辑:程序博客网 时间:2024/06/16 01:09
nosql:
关系型的数据库:mysql,Oracle ,SqlServer
nosql not only sql 它不仅仅是sql,它指的是非关系型的数据库
结构化的数据:固定的格式,固定的长度,固定的类型 (关系型数据库)
非结构化的数据:pdf,doc,ppt ...


在优势方面主要体现在下面几点:
简单的扩展
快速的读写
低廉的成本
灵活的数据模型


在不足方面主要有下面几点:
不提供对SQL的支持
支持的特性不够丰富
现有的产品不够成熟
mongodb 面向集合存储:数据库,集合,文档 (记录)
关系型数据库当中:数据库,表,记录


关系型数据库与非关系型数据库的对比关系:
文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)
集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
每一个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键




mongodb 大纲:
1:nosql 的概念
2:mongodb 的下载安装
服务端:
2.1:配置环境变量,制定到bin 目录下
2.2:创建一个目录,这个目录用来存放mongodb 的数据..
mongod --dbpath=“数据的存放路径”
它既然是一个数据库,它为我们提供存储数据库的服务,肯定占用一个端口对外提供服务,27017


客户端:mongo  localhost:27107
show dbs 查看所有的数据库
db 查看当前所在那个数据库.
创建集合分两种方式:
显示创建:
db.createCollection("");
隐式创建:
就是在创建集合的同时往集合里面添加数据..
db.collectionName.insert();
3:怎么跟mongodb 完成增删改查的操作
往集合当中添加数据:
db.collectionName.insert({key:value})
查询:
db.collectionName.find({查询条件})
大于等于:
//大于: field > value
db.collection.find({field:{$gt:value}});


//小于: field < value
db.collection.find({field:{$lt:value}});


//大于等于: field >= value
db.collection.find({field:{$gte:value}});


//小于等于: field <= value
db.collection.find({field:{$lte:value}});


//不等于:  field != value
db.collection.find({field:{$ne:value}});


排序分页:
db.customer.count();
db.customer.find().count();
db.customer.find({age:{$lt:5}}).count();
db.customer.find().sort({age:1}); 降序-1
db.customer.find().skip(2).limit(3);
db.customer.find().sort({age:-1}).skip(2).limit(3);
db.customer.find().sort({age:-1}).skip(2).limit(3).count();
db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);
db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);


$all 用来查询数据当中包含关系,只要有一个不包含就不返回..


$in  查询集合中的文k档 ,$in,类似于关系型数据库中的IN


$nin 不包含


$or:查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询name为user2或者age为3的文档,命令为:

$exists 非关系型的数据库的key:value 的组成是不一样
我可以查找集合当中包含某些key 的文档





db.collectionName.findOne(); 查找集合当中的第一个文档
删除:
db.collectionName.remove({查询条件})


更新:
/**
update tableName set ?  where 
1: 用于设置更新的条件
2:用于设置更新的内容的对象
3:如果没有符合条件的记录,是否新增一条记录   1 新增,0 不新增
4:如果有多条记录被匹配,是否全部更新


*/
db.collectionName.update({条件},{更新的内容的对象},1,0);




     
$inc表示使某个键值加减指定的数值




4:索引
索引的概念:数据库索引与书籍的索引类似:有了索引就不需要翻遍整本书,
数据库则可以直接在索引中查找,使得查找速度能提高几个数量级。在索引中找到条目以后,就可以直接跳转到目标文档的位置。
索引的作用:加速查询
怎么建立索引:
普通索引:
建立索引:在某个集合当中建立索引
db.collectionName.ensureIndex({key:1})
我们可以添加500w 条记录 然后我们从500w 条记录当中找到我想要的某条记录需要花多久时间
建立索引之后,我们在从建立索引之后的集合当中查找某条记录需要花多久时间..
唯一索引:在某个key上面建立了唯一索引,key 对应的值必须唯一..




5:固定集合


概念:固定集合指的是事先创建而且大小固定的集合 。
应用场景:通话记录,日志信息,聊天记录,微博信息.. 
例子:
淘汰机制:
当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没有满时才会依据文档数量来工作。
要是容量满了,淘汰机制会依据容量来工作。 
6:数据备份与恢复,导入导出
第一步:将mongodb 当中的数据备份到我的硬盘上
第二步:删除调用mongodb 数据库里面的数据局
第三种:将备份好的数据导入到数据库当中.


MongoDB提供了备份和恢复的功能,分别是MongoDB下载目录下的mongodump.exe和mongorestore.exe文件 
备份数据使用下面的命令:
>mongodump -h dbhost -d dbname -o dbdirectory
-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。


恢复数据使用下面的命令:
>mongorestore -h dbhost -d dbname -directoryperdb dbdirectory
-h:MongoDB所在服务器地址
-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
-directoryperdb:备份数据所在位置,例如:c:\data\dump\test


导入与导出: mongoexport  与mongoimport


导出数据可以使用命令:
mongoexport -h dbhost -d dbname -c collectionName -o output


参数说明:
-h  数据库地址
-d 指明使用的库
-c 指明要导出的集合
-o 指明要导出的文件名


导入数据可以使用命令:
mongoimport -h dbhost -d dbname -c collectionname 文件的地址...
参数说明:
-h  数据库地址
-d 指明使用的库
-c 指明要导入的集合
本地的文件地址...



7:mongodb 的数据库安全认证
所有的操作数据的部分都不需要认证就可以直接操作
1:我需要有一个管理员账号:(admin 数据库当中的用户都是管理员)
1:登录到admin 
use admin
db.addUser("root","1234");
2:我有了管理员账号我就可以为其它的数据库(itcast)分配用户以及用户对应的权限
//为对应的数据库分配账号  
use 数据库
db.addUser("zhangsan","1234") //读写
db.addUser("zhangsan","1234",true) //只读
3:我需要重新启动mongodb 服务端,开启安全检查
mongod --dbpath=""  --auth
4:客户端重新登录,接下来的所有操作需要认证。
db.auth();  认证 (登录)
db.logout (登出)
8:mongdb 集群
8.1 主从复制
1:做集群就首先必须要做数据同步.
2:主从集群没有自动故障恢复的功能
这个里面的从节点是用来分流的..
8.2 副本集
副本集就是有自动故障恢复功能的主从集群。
副本集当中的备份节点是做故障恢复的


当节点挂掉,回来之后又是主节点,
1:第一先恢复数据
2: 把之前的顶替的主节点变成备份节点...









9:mongodb 的分布式存储
1:概念
2:画图理解
3:例子
4:疑问



10:使用java代码来调用mongodb 数据库..


使用java代码来调用mongodb,它提供了一套客户端的api 给你。你面向api 编程就能直接操作数据库.
使用api 搞定增删改查..


1:加强自己方面的技能
2:取长补短
3:培养自己的战略性的思维。行业思维。
4:用心用脑,动手动脚
















  



































0 0