nosql

nosql是非关系型数据库。
非关系型数据库的优点
1.简单的扩展(以键值对的方式进行的存储,结构比较的灵活)
2.快速的读写()
3.低廉的成本
4,灵活的数据模型

缺点:
1.不提供sql语句的支持
2.支持的特性不够丰富(没有事务的概念)
3.现有的产品不是很成熟(相对与关系数据库)
特点
支持完全索引的,包括内部的对象
支持复制和故障的恢复
(文件的存储格式是)BSON(一种json的扩展)
mongdb是没有主外键的。
MongDB自带简洁但功能强大的js脚本!!!
//数据库的位置文件夹
mongod –dbpath=地址
默认端口是27017

数据库的命令:
查看所有的数据库 :show dbs
新建一个数据库: use 数据库名
创建集合分为两种方式:1.隐式创建:
就是创建集合的同时添加数据
2.显示创建:
db.createCollection(“文件名”);//函数进行的创建
查看数据库里的所有的集合:
show collections;

查看集合里面的数据:
db.c1.find();
这里我们看数据会发现一个事情,那就是系统会给每一条数据生成一个_id 生成一个唯一标示符
db.c1.find(“条件”); (注意:条件也是要以键值对的形式存在的)

最变态的是mongdb可以在里面写js代码。。。。。
for(var i=0;i<11000;i++)
//写生成语句
}

这里还可以嵌入表达式的:
db.c4.find({age:{$gt:5}}) //查找所有年龄大于5的数据 lt《 ne!

db.c4.find().skip().limit();//分页

all in 相当于mysql中的 in 就是满足其中的一条就行了
nin or
{sex:{exists:1}}  //作用是查询sex这个键存在的  
{sex:
{exists:0}} //与上面相反

db.collection.update(criteria,objNew,upsert,multi)

参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1

注意:默认情况下,只会更新第一个符合条件的记录
一般情况下后两个参数分别为0,1 ,即:
db.collection.update(criteria,objNew,0,1)
db.c1.update({“name”:”xiaoxue”},{set:{“name”:”zhangsan”}},0,1)  
对于上面语句参数的分析:  
    第一个参数是查询的条件  
    第二个参数是添加的东西  
    第三个参数是如果没有该记录是否需要增加一条,1是需要的意思  
   第四个参数是如果有多条该记录,是否全部跟新 ,1是需要的意思  
db.c1.update({},{
inc:{age:1}},1,1)
//对所有的年龄都加一
建立索引:
//普通索引的创建
db.c3.ensureIndex({age:1})
db.c3.ensureIndex({age:1},{unique:true})
数据库的备份

备份数据使用下面的命令:

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 -h dbhost -d dbname -c collectionName -o output

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

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

固定集合是事先创建好的集合,大小固定的集合
固定集合就像一个环形的队列一样的,当空间不足的时候就会自动把原来的旧的文档删除掉,
他的运用场景就是想要自动的淘汰旧的东西。
创建固定集合使用命令:db.createCollection(“collectionName”,{capped:true,size:100000,max:100});
size指定集合大小,单位为KB,max指定文档的数量
当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没有满时才会依据文档数量来工作。要是容量满了,淘汰机制会依据容量来工作。

数据库的安全和认证:
在开启安全检查的时候需要一个管理员的账号,admin数据库中的用户会被当成超级管理员

在admin数据库中创建管理员账号:
use admin;
db.addUser(“root”,”root”);

在test数据库中创建普通账号:
use test;
db.addUser(“zhangsan”,”123”);
db.addUser(“lisi”,”123”,true);
注意:用户zhangsan,密码为123,对test数据库拥有读写权限
用户lisi,密码为123,对test数据库拥有只读权限

重新启动数据库服务,并开启安全检查:
mongod –dbpath d:\mongo_data –auth

为了方便演示,可以在一台计算机上来模拟主节点和从节点。在D盘创建两个目录master和slave,master目录作为主节点的数据文件的目录,slave目录作为从节点的数据文件的目录。
注意:主节点和从节点要指定不同的端口。
启动主节点:mongod –dbpath d:\master –port 10000 –master
启动从节点:mongod –dbpath d:\slave –port 10001 –slave –source localhost:10000

启动成功后就可以连接主节点进行操作了,而这些操作会同步到从节点。
以三个节点为例:
节点1:
HOST:localhost:10001
Log File:D:\mongodb\logs\node1\logs.txt
Data File:D:\mongodb\dbs\node1

节点2:
HOST:localhost:10002
Log File:D:\mongodb\logs\node2\logs.txt
Data File:D:\mongodb\dbs\node2

节点3:
HOST:localhost:10003
Log File:D:\mongodb\logs\node3\logs.txt
Data File:D:\mongodb\dbs\node3

启动节点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

//主从节点就是进行了读写分离的操作
分片的意思是把数据库的存储放在不同的电脑硬盘上面去,也被叫做是分区。

片键:数据拆分的依据

我在这里举一个例子:一个人的年龄有从0到100岁的,但是我们可以0-30在一个片上,30-60可以写在一个片上,。。。如果出现了增删查改之类的话那么就会再次进行平衡。

mongod –dbpath E:\sharding\mongod_node1 –port 4444
mongod –dbpath E:\sharding\mongod_node2 –port 5555
添加片键进来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值