索引
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()
MongoDB补充
最新推荐文章于 2022-08-11 15:48:10 发布