Nosql学习
来源:互联网 发布:双色球软件2016破解版 编辑:程序博客网 时间:2024/06/06 11:04
非关系型数据是以键值对的形式存储
目前流行的非关系数据库
CouchDB
Redis 新浪微博
MongDB 优酷运营数据分析 豆瓣社区 视觉中国网站
Neo4j
HBase
BigTable google
NoSql数据库优缺点
优点:简单的扩展
(为某条记录扩展一个字段,实际上就是扩展key,value)快速的读写 低廉的成本灵活的数据模型
缺点:
不提供对sql 的支持..支持的特性不够丰富
现有的产品不:够成熟
对比:
关系型数据库:库,表,记录
非关系型数据库:库,集合,记录
mongodb 的简介
是C++编写的非关系型数据库 文件存储的格式为BSON一种JSON的扩展
mongodb 的 大纲
1:nosql 的概念(非关系型数据库)
2:非关系型数据库与关系型数据库的一个对比
3:mongodb 的安装
下载:http://www.mongodb.org/downloads
解压安装包————>配置环境变量
4:启动mongodb 数据库,
怎么通过客户端连接数据库,跟mongodb 进行数据交互
建立服务端:
1:使用mongod --dbpath="数据存放路径"
如: 1:文件为 D:\ mongdbpath
2:键入命令----->mongod --dbpath=D:\mongdbpath
2: 默认占用27017 端口对外提供服务
客户端:
1:mongo 命令
mongo ip:port
如:键入命令----->mongo 192.168.1.100:27017 链接数据库
2:show dbs 查看所有的数据库
如:键入命令----->show dbs 查看所有的数据库
3:db 查看当前窗口在那个数据库下面..
如:键入命令----->db查看当前数据库
4:创建集合
4.1:显示创建
db.createCollection("collectionName");例如:键入命令----->db.createCollection("c1")
运行结果:{“ok” : 1 }
4.2:隐式创建
在创建集合的同时往里面添加数据.例如:键入命令----->db.c2.insert({name:"wangqiankun",age:31})的
显示创建的库键入命令----->show collections;
4.3添加:删除:查询:
db.collectionName.insert({});例如:键入命令----->db.c1.insert({name:"banzhang",age:19})
删除:
db.collectionName.remove({});
删除:
db.collectionName.remove({});
例如:键入命令----->db.c1.remove()
查询:
db.collectionName.find();
db.collectionName.find();
例如:键入命令----->db.c1.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}});
//大于: 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}});
不同的玩法:
键入命令----->var i =1+2;
键入命令----->i
3
键入命令----->for(var i = 1;i <=10000;i++){
键入命令----->db.c1.insert({name:"wangqiankun",age:19})
键入命令----->}
键入命令----->
排序分页:
db.customer.find().sort({age:-1}).skip(2).limit(3);
数据的查询多个元素的包含关系
$all ,$in, $nin
多个查询条件的组拼:
查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系
$nor
查询包含某个键的文档:
查询集合中的文档 ,$exists,用于查询集合中存在某个键的文档或不存在某个键的文档
游标相当于是一个临时的存储区,它是放在内存当中,查找个某个集合返回记录,我可以把这些
记录放在游标当中,然后我可以迭代游标
更新:
关系型数据库:update tableName set value where condition
非关系型数据库:
1:设置更新的条件
2:设置更新的内容的对象
3:如果没有符合条件的记录,是否新增一条记录(取值为0/1)
4: 如果有有多条记录符合,是否全部更新(取值为0/1)
db.collectionName.update({},{},{},{})
1: 我更新的时候只更新到一条,且其它的key:value 覆盖掉了
2:我只更新到一条
更新集合中的文档,使用 $inc 将集合中name为user1的age加1,其它键不变, $inc表示使某个键值加减指定的数值
删除某个键:db.c1.update({name:”user1”},{$unset:{address:1}},0,1)
5:索引
索引的是用来加速查询。
//创建索引 普通索引
db.collectionName.ensureIndex({key:1})
//1:新建500w 条记录,在没有建立索引的情况下从500w 条记录当中查找某条记录需要花费多久时间
//2:在创建了索引之后查找需要花时间
//唯一索引 怎么新建唯一索引,唯一索引与普通索引有什么区别
db.collectionName.ensureIndex({key:1},{unique:true})
在某个key 建立了唯一索引,那么这个对应的值必须唯一。
6:固定集合
db.createCollection(“collectionName”,{capped:true,size:100000,max:100});
固定集合的概念:固定集合指的是事先创建而且大小固定的集合 。
固定集合的应用场景:聊天记录,日志信息
淘汰机制:当满足size指定集合大小,不能在继续往固定集合里面添加数据
固定集合的容量优先..
7:数据备份
备份(mongodump)和恢复(mongorestore)
>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 指明要导入的集合
本地的文件地址
8:安全认证(权限)
1:我最少得保证有一个管理员账号(admin 数据库当中的用户都是管理员)
连接到admin
use admin
db.addUser("username","password")
2: 有了管理员账号,我就可以为其它的数据库分配用户
2.1:首先需要跳转到被分配的数据库
db.addUser("username",password,false) //读写
db.addUser("username",password,true) //只读
3:需要重新启动mongodb 服务,开启安全检查
mongod --dbpath="" --auth (认证)
4:接下来的客户端连接mongodb ,需要登录才能执行相应的操作.
db.auth()//认证
db.logout() //登出
9:集群(2种方式)
主从复制
1:从节点只做查询的操作
2:当主节点挂机之后,从节点不能自动顶替上来吧。
1:启动主节点 mongod --dbpath="xxx/路径" --port --master
2:启动从节点: mongod --dbpath="xxx/路径" --port --slave --source ip:port
副本集
1:副本集它一般做故障恢复的操作。
我们在实际的应用当中,主从复制与副本集应该结合在一块用
//同一个节点在主从复制当中是从节点,也可以是副本集当中的备份节点。
启动节点1:
mongod --dbpath D:\mongodb\dbs\node1 --logpath D:\mongodb\logs\node1\logs.txt --logappend --port 10001 --replSet itcast/localhost:10002 --master
启动节点2:
mongod --dbpath D:\mongodb\dbs\node2 --logpath D:\mongodb\logs\node2\logs.txt --logappend --port 10002 --replSet itcast/localhost:10001
启动节点3:
mongod --dbpath D:\mongodb\dbs\node3 --logpath D:\mongodb\logs\node3\logs.txt --logappend --port 10003 --replSet itcast/localhost:10001,localhost:10002
初始化节点(只能初始化一次):随便登录一个节点,以10001为例
mongo localhost:10001/admin
db.runCommand({ "replSetInitiate":{ "_id":“itcast", "members":[ { "_id":1, "host":"localhost:10001", "priority":3 }, { "_id":2, "host":"localhost:10002", "priority":2 }, { "_id":3, "host":"localhost:10003", "priority":1 } ]}});
10:分布式存储(分片)
概念:分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。
有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,
不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。
片键:用来作为数据拆分的依据
画图理解:
见图003
11:使用java 代码调用mongodb (增删改查)
数据类型
java代码的实现
第一步:
jar包的导入mongo-2.10.1.jar
代码:
package cn.itcast.mongo;import java.net.UnknownHostException;import org.bson.types.ObjectId;import org.junit.Test;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.Mongo;/** * * 使用java代码调用mongodb * @author Administrator * */public class MongoDBDao {@Testpublic void add() throws UnknownHostException{//建立起连接Mongo mongo=new Mongo("192.168.1.100", 27017);//根据连接获取到数据库DB db=mongo.getDB("test");//获取数据库下面的某个集合,针对结合进行操作...DBCollection dbCollection=db.getCollection("person");//BasicDBObject dbObject=new BasicDBObject();dbObject.put("title", "奔放洋气有深度,简约时尚国际范");dbObject.put("content","高大上");//{key:value,keyvalue}dbCollection.insert(dbObject);mongo.close();}@Testpublic void del() throws UnknownHostException{Mongo mongo=new Mongo("192.168.1.100", 27017);//根据连接获取到数据库DB db=mongo.getDB("test");//获取数据库下面的某个集合,针对结合进行操作...DBCollection dbCollection=db.getCollection("person");//{}DBObject dbObject=new BasicDBObject();dbCollection.remove(dbObject);}/** * 更新 * @throws UnknownHostException */@Testpublic void update() throws UnknownHostException{Mongo mongo=new Mongo("192.168.1.100", 27017);//根据连接获取到数据库DB db=mongo.getDB("test");//获取数据库下面的某个集合,针对结合进行操作...DBCollection dbCollection=db.getCollection("person");//{}//设置更新的条件BasicDBObject query = new BasicDBObject("_id",new ObjectId("53db556a5bcbcfc947854027"));//设置更新的内容的对象...BasicDBObject object = (BasicDBObject) dbCollection.findOne(query);object.put("title", "高端大气上档次");dbCollection.update(query, object);}@Testpublic void find() throws UnknownHostException{Mongo mongo=new Mongo("192.168.1.100", 27017);//根据连接获取到数据库DB db=mongo.getDB("test");//获取数据库下面的某个集合,针对结合进行操作...DBCollection dbCollection=db.getCollection("person");//BasicDBObject dbObject=new BasicDBObject();//dbObject.put("content", "高大上");DBCursor cursor=dbCollection.find();while(cursor.hasNext()){DBObject dbObject2=cursor.next();System.out.println(dbObject2.toString());}//{$lt:{age:20}}//db.collection.find()//{}BasicDBObject basicDBObject=new BasicDBObject();BasicDBObject basicDBObject2=new BasicDBObject();basicDBObject2.put("age", 20);basicDBObject.put("$lt",basicDBObject2);}}
0 0
- NoSQL学习
- NOSQL学习
- 学习NoSQL
- Nosql学习
- nosql 学习
- NoSQL学习系列之一, NoSQL简介
- NoSQL 学习NoSQL数据库的必读资料
- NoSQL数据库学习笔记之 Why NoSQL
- NoSQL数据库学习笔记之 NoSQL百家争鸣
- NoSQL学习资料
- nosql学习笔记
- Nosql Redis学习
- NOSQL资料学习
- NOSQL资料学习
- NoSQL之【memcached】学习
- NoSQL入门学习
- 关于NoSql的学习
- NoSQL数据库学习笔记
- Spark1.0.0 on YARN 模式部署
- Delphi : WebBrowser、MSHTML在Delphi中的使用
- 从smack-config.xml文件中加载文件内容 Loads the configuration from the smack-config.xml file
- unity 武器拖尾效果实现的代码
- 破解YourKit Java Profiler 2014, build 14100
- Nosql学习
- mysql的分区技术
- 移除字符串中的字符和移除字符串数组中的字符
- Leetcode:Word Search
- TCP协议深入理解
- Spark1.0.0 on Standalone 模式部署
- 归纳法求解最大连续子序列
- Mysql分表和分区的区别
- Spark On Yarn(HDFS HA)详细配置过程