MongoDB面试题
所属分类 mongodb
浏览量 1068
mongodb特点
面向文档存储
设置任何属性的索引
支持丰富的查询表达式
Map/reduce 对数据进行批量处理和聚合操作
MapReduce 使用 Javascript 编写,通过 db.runCommand 或 mapreduce 命令执行
支持在服务端执行脚本 Javascript
分析器 Profiler 的作用
显示每个操作性能特点 ,定位慢查询 ,性能优化
数据库分析工具(Database Profiler)会针对正在运行的mongod实例收集数据库命令执行的相关信息。
包括增删改查的命令以及配置和管理命令。
分析器(profiler)会写入所有收集的数据到 system.profile 集合,capped集合
Capped集合是一个固定大小,高性能的,文档按照插入顺序的一个集合。
新对象会覆盖旧的对象,像环形缓存一样。
分析器默认是关闭的
查询分析可以确保建立的索引是否有效,是查询语句性能分析的重要工具。
查询分析常用函数 explain() hint()
使用 hint 强制 使用指定的索引
db.users.ensureIndex({gender:1,user_name:1})
db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
删除属性然后对象会重新保存 re-save()
table collection 表/集合
row document 记录行/文档
column field
更新操作是否立刻fsync到磁盘
否, 磁盘写操作默认延迟执行
为何数据文件很大
预分配预留空间防止文件系统碎片
新分配文件大小是上一个数据文件的2倍,最大2G
启用备份故障恢复需要多久
从备份数据库声明主数据库宕机到选出一个备份数据库作为新的主数据库将花费10到30秒时间。
这期间在主数据库上的操作将会失败
写入和强一致性读取(strong consistent read)操作。
可以第二数据库上执行最终一致性查询(eventually consistent query)
master/primary
secondary/slave
Seconday从primary上复制相应的操作 ,跟踪复制oplog(local.oplog.rs)
getLastError的作用
调用getLastError 可以确认当前的写操作是否成功的提交
数据在什么时候才会扩展到多个分片(shard)里
MongoDB 分片基于区域(range) ,一个集合(collection)中的所有的对象都被存放到一个块(chunk)中,每个默认块的大小是 64MB
试图更新一个正在被迁移的块(chunk)上的文档时会发生什么
更新操作会立即发生在旧的分片(shard)上,然后更改才会在所有权转移(ownership transfers)前复制到新的分片上。
moveChunk目录
在分片(shard)进行均衡操作(balancing)的时候产生的临时文件
查看正在使用的连接
db._adminCommand("connPoolStats");
支持存储过程,用javascript编写,保存在 db.system.js 表中
GridFS是一种将大型文件存储在MongoDB中的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样能够有效的保存大文档,而且解决了BSON对象有限制的问题。
mongod 处理数据请求,管理数据存储,和执行后台管理操作
mongod 参数
数据库存储路径,默认 /data/db
端口号 默认 27017
mongo 命令行工具用于连接一个特定的mongod实例
use DB , DB 不存在则创建
show dbs
如何在集合中插入一个文档
使用 insert() 或 save() 方法
db.collectionName.insert({"key":"value"})
db.collectionName.save({"key":"value"})
db.dropDatabase()
创建集合 db.createCollection(name, options)
show collections
db.CollectionName.drop()
不支持主键和外键
支持的数据类型
String Integer Double Boolean Object ObjectID Arrays Datetime Code
Min/Max Keys
Regular Expression
Code 类型用于在文档中存储 JavaScript 代码
Regular Expression 类型用于在文档中存储正则表达式
ObjectID 类型用于存储文档id
ObjectID 由哪几部分组成
四部分:时间戳 ,客户端ID ,客户进程ID、三个字节的增量计数器
4 + 3 + 2 + 3
总共 12字节
_id 12字节 的十六进制数,保证每一个文档的唯一性
插入文档时,需要提供 _id ,不提供则自动生成
db.collectionName.createIndex({columnName:1})
格式化输出结果
db.collectionName.find().pretty()
AND 或 OR 条件 查询
db.mycol.find({key1:value1, key2:value2}).pretty()
OR 使用关键字$or
db.mycol.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
如何更新数据
update() 与 save()
update() 更新已有文档中的值
save() 替换已有文档
db.collectionName.remove({key:value})
db.connectionName.find({key:value}).sort({columnName:1})
1 升序, -1 降序
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
副本集
副本集由一组MongoDB实例组成,一个主节点多个从节点
主节点(Primary) 写,从节点从主节点同步数据
索引
db.collection.createIndex({user_id: 1, add_time: 1}, {background: true})
建索引的过程会阻塞其它数据库操作,background 指定以后台方式创建索引,默认为false
mongodb简介
上一篇
下一篇
Java异常知识点
mysql explain 简介
mysql中的浮点数
MongoDB优缺点
延迟任务处理总结
springboot最核心的三个注解