MongoDB补充

索引
for(var index = 0; index < 200000; index ++) {
db.user.insert({number:index,name:index+"book"});
}

var start = new Date();
db.user.find({number:199999})
var end = new Date();
end-start

db.user.ensureIndex({number:1}); 1正序索引 -1倒序索引
db.user.ensureIndex({name:-1},{name:"idx_name",unique:true});
dropDups:true 自动删除重复的值
background:true 后台创建索引
db.user.dropIndex("idx_name")
db.user.getIndexes()

.hint("指定索引查询")
db.user.find({name:"0book"}).hint({name:-1});

db.user.find({name:"0book"}).explain("executionStats");

# 数据库已经建立的索引
db.system.indexes.find();
db.system.namespaces.find();


2D地图
# 数据准备
var mapList = [
{
	"gis":{
		"x":185,
		"y":150
	}
},
{
	"gis":{
		"x":70,
		"y":180
	}
},
{
	"gis":{
		"x":75,
		"y":180
	}
},
{
	"gis":{
		"x":185,
		"y":185
	}
},
{
	"gis":{
		"x":65,
		"y":185
	}
},
{
	"gis":{
		"x":50,
		"y":50
	}
},
{
	"gis":{
		"x":200,
		"y":0
	}
},
{
	"gis":{
		"x":200,
		"y":200
	}
}]
for(var index = 0; index < mapList.length; index ++) {
	db.map.insert(mapList[index]);
}

# 创建索引
db.map.ensureIndex({gis:"2d"},{min:-1,max:201});
# 查询出距离(70,180) 最近的3个点
db.map.find({"gis":{$near:[70,180]}}).limit(3);
# 查询(50,50) (190,190)为对角线的正方形中所有的点
db.map.find({gis:{"$within":{$box:[[50,50],[190,190]]}}});
# 查询(50,50)为圆心 半径为150的圆心中的点
db.map.find({gis:{"$within":{$center:[[50,50],150]}}});

show dbs;
use user;
db.user.count();

# distinct
db.runCommand({distinct:"user",key:"name"}).values;

# db.runCommand详细文档
http://localhost:28017/_commands

# 固定集合(文档数量/集合大小)
1.固定集合没有索引
2.不需要分配新的空间 插入熟读快
3.实用场景日志管理

# GridFS 
# 上传文件
./mongofiles -d data -l /usr/local/mongodb/bin/a.txt put "a.txt"
# 集合查看
db.fs.chunks.find();
db.fs.files.find();

./mongofiles -d data list
./mongofiles -d data get "a.txt"
./mongofiles -d data delete "a.txt"

# db.eval
db.eval("function(name){return name;}","mongo1111");

db.system.js.insert({_id:"name",value:"22233232"});
db.eval("return name;");
db.system.js.find();

# 启动项
mongod -help
--dbpath
--port
--fork 保护进程方式启动
--logpath
--config 配置项在文件中
--auth 安全认证

# 关闭服务器
use admin;
db.shutdownServer();

# Fsync锁
use admin;
db.runCommand({fsync:1,lock:1})
db.currentOp()

# 数据修复
db.repairDatabase()

# 添加用户
use admin;
db.createUser(user, writeConcern)
user  用户身份认证和访问信息
{ user: "<name>",
  pwd: "<cleartext password>",
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ]
}
user  用户名
pwd  密码
cusomData  为任意内容 如可以为用户全名介绍
roles  指定用户角色 可用空数组设定空角色
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、dbOwner、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色:backup、restore
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    超级用户角色:root 
writeConcern  描述保证MongoDB提供写操作的成功报告
{ w: "majority" , wtimeout: 5000 }
# 认证
./mongo -u accountAdmin01 -p yourpassward --authenticationDatabase products

db.createUser({user:"tom",pwd:"123456",roles:[]},{w:"majority",wtimeout:5000});
./mongo -u jack -p 123456 --authenticationDatabase user

# 主从复制
# 主机
./mongod --config master.conf
dbpath=/data/db
port=27017
bind_ip=172.22.3.174
master=true
./mongo --host 172.22.3.174 --port 27017

# 从机
./mongod --config slave.conf
dbpath=/data/db
port=27017
bind_ip=172.22.3.162
source=172.22.3.174
slave=true
./mongo --host 172.22.3.162 --port 27017
--only 
--slaveDelay
--fastSync
--autoResync
--oplogSize

use local
db.sources.find();

# 副本集(2台机器效果不是很明显 最好3台机器)
./mongod --config a.conf
dbpath=/data/db
port=27017
bind_ip=172.22.3.174
replSet=child/172.22.3.162:27017
./mongo --host 172.22.3.174 --port 27017

./mongod --config b.conf
dbpath=/data/db
port=27017
bind_ip=172.22.3.162
replSet=child/172.22.3.174:27017
./mongo --host 172.22.3.162 --port 27017

use admin;
db.runCommand({"replSetInitiate":{
"_id":"child",
"members":[
{"_id":1,"host":"172.22.3.174:27017"},
{"_id":2,"host":"172.22.3.162:27017"}
]
}});
rs.status();

standard 常规节点(参与投票,能成为活跃节点,复制数据)(priority:1~1000代表常规节点)
passive 副本节点(参与投票,不能成为活跃节点,复制数据)(priority:0代表副本节点)
arbiter 仲裁节点(参与投票,不能成为活跃节点,不复制数据)(arbiter:true)

# 读写分离
slaveKey:true

# 分片
# 配置服务器
./mongod --config cgf.conf
dbpath=/data/db1000
port=1000
bind_ip=127.0.0.1
# 路由服务器(监听配置服务器)
./mongos --port 2000 --configdb 127.0.0.1:1000
# 分片01
./mongod --config cgf.conf
dbpath=/data/db3000
port=3000
bind_ip=127.0.0.1
# 分片02
./mongod --config cgf.conf
dbpath=/data/db4000
port=4000
bind_ip=127.0.0.1
# 路由添加分片
db.runCommand({addshard:"127.0.0.1:3000",allowLocal:true});
db.runCommand({addshard:"127.0.0.1:4000",allowLocal:true});
# 初始化
# 为data数据库打开分片功能
db.runCommand({enablesharding:"data"});
# 为集合user进行分片 按_id分片
db.runCommand({shardcollection:"data.user","key":{"_id":1}});
# 测试
插入几十万条数据,然后去各分片查看数据

db.printShardingStatus()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值