mongodb学习笔记

1.介绍
是最接近数据库的nosql
nosql中的分布式文档数据库 便捷的查询方式 高可用 横向扩展 分库分表(分表)
支持多个存储引擎(wiredtiger mmap ) 存储引擎API 可用做第三方扩展

2.从官网下载mongodb
linux解压安装
进入mongodb的目录
bin/mongod --dbpath=db 指定当前db并启动 db是新建的文件夹
bin/mongod --dbpath=db --res 默认28017是web端口
下载mongodb GUI 可视化工具客户端
robomongo、 mongochef 、desktop style
3.mongodb三要素
1.Databases db 数据库
2.Collections=》数据库中的table
3.Document相当于row
每一行都是一样的字段 不可添加不可减少 也就是说fields的个数在定义table的时候就声明好了
每一个document都是独立的 互相之间没有关系 但可以放在一个Collections中
Document和json相似 扩展出Bson 但没有object 可以限制长度 最大16M
分布式部署存在俩个问题 内存(粒度太大)和网络带宽
在客户端操作mongodb的语法和mysql类似

4.capped collection 上线集合
一个集合 可以做到size的上限 和document个数的上限
客户端 右击库中的Collections Create Collection
bytes maxinum 指定collection的大小
document maxinum 指定collection中的document的个数
只要用于不太重要且量大的日志记录、疲劳度过滤(例如几天内不能给用户发送同样的信息)是一个find和insert的操作
document限制最大个数 则不需要自己删除 是一个固定集合 后面新加的会顶替掉最开始的

5.Collection的一些操作
db.createCollection(“mylog”,{capped:true,size:524288,max:5000})//创建集合
db.getCollection(‘mylog’).find({})//获取集合数据
sort用于排序

6.Bson结构 $type和_id原理
Bson是json的扩展 可以支持20种以上类型 正则表达式,二进制,js代码也可以
1.使用find操作 用underfinde KaTeX parse error: Expected '}', got 'EOF' at end of input: ….find({"name":{type:‘undefined’}})).toArray();
ISODate表示本地时间
NumberLong()表示存放64位int
2.ObjectID
无索引的情况 我们的数据较heap
有索引的情况就是一个BTree

7.mongodb shell
是一个测试工具 封装了v8引擎 可以运行js代码
bin目录下的一个monogo是对mongodb进行测试的一个程序 并不实用
还有一个带有代码提示的robomongo

8.在shell中进行多行编程
采用外部jsfile的形式执行命令
1.load方法
写一个js文件 写比较复杂的语句
load(js文件地址)
2.help操作 辅助查询
如果没有代码提示的环境下 不清楚 db collection下有哪些方法
db.help()显示常用的方法

9.远程连接mongodb
var mongo=new Mongo(“地址:端口/databases”)
var db=mongo.getDB(“库名”);
var table=db.getCollection(“person”);

10.mongodb的增删改查
sql statement 查询语句
在官网对比sql和mongodb的写法 sql to mongodb

11.mongodb的运算符
1.比较运算符 $eq 等于 $gt 大于 $ls小于 KaTeX parse error: Expected '}', got 'EOF' at end of input: ….find({"tags":{eq:“A”}}); 查询数组中包含A的
2.逻辑运算符
$or $and n o t d b . i n v e n t o r y . f i n d ( not db.inventory.find( notdb.inventory.find(and:[{“item.name”:“ab”},{“qty”:{$gt:4}}]);
3.评估运算符
$mod 相当于c#中的%百分号 做除法运算
$regex 使用正则匹配查询 性能不高
$text 全文索引 不支持中文 没用
$where 条件查询 可以写js方法
$all 全部满足
i n 当 中 几 个 满 足 4. u p d a t e 中 的 运 算 符 1. in 当中几个满足 4.update中的运算符 1. in4.update1.inc 递增
2. m u l 乘 法 3. mul 乘法 3. mul3.rename 更新内嵌文档
4. s e t O n I n s e r t 如 果 有 则 修 改 没 有 则 插 入 5. setOnInsert 如果有则修改 没有则插入 5. setOnInsert5.set 相当于sql中修改表中的某个值
6. u n s e t 删 除 一 个 字 段 7. unset 删除一个字段 7. unset7.min 如果当前指定值小于之前的值 则修改
8. m a x 9. max 9. max9.currentDate 指定当前时间

12.Array中的一些操作
1. $ placeholder占位符 用于找匹配的字段
{".KaTeX parse error: Expected 'EOF', got '}' at position 8: ":value}̲ db.students.…set:{"grades.KaTeX parse error: Expected 'EOF', got '}' at position 5: ":82}̲} ); 2.addto…pop 弹出元素 找最后或第一条
4. p u l l 删 除 已 存 在 的 值 5. pull 删除已存在的值 5. pull5.pushAll 追加
6. p u s h 和 push和 pusheach组合批量添加
7. s o r t 用 于 排 序 8. sort用于排序 8. sort8.bit 按位运算 去重操作

13.索引操作 目的 加速查找
single Field 单键索引
Compound Index 复合索引 哪个字段在前在后都有区别
Partial Index 局部索引 可以使用更小的内存空间 减少开销
Multikey Index 多键值索引
Geospatial Index 地理位置索引 二维三维
Text Indexes 全文索引 不支持中文
Hashed Indexes hash索引 hash为了做定值查找
Unique Indexes 唯一索引
Sparse Indexes 稀疏索引
建立的index字段必须在有这个字段的document上才可建立 sparse:true
TTL Indexes 过期索引 可以用来做定时过期的效果
指定过期秒数
创建索引
db.person.createIndex({“age”:1}) 为age创建单键索引
db.person.find({“age”:45});

14.索引管理 manage indexes
Views Indexes
获取集合中的索引
db.person.getIndexes()
Remove Indexes 不能删除主键索引
db.person.dropIndex({“tax-id”:1})
Modify an Indexes 修改索引
Rebuild Indexes 重建索引
磁盘不够时可重建索引

15.Query plan
用于优化和建立索引

16.索引的一些建议
1.创建的索引最好能覆盖大多数的查询
2.sort的键也要建立索引
3.index 最好都能存储在内存中

17.分布式文件系统Grid File System 存放音频视频 大于16M的
TFS 淘宝的文件存储系统
HDFS 是 Hadoop File System
作用 多机器存储备份
突破一般文件系统对files的限制 而windows对文件权限有限制
分段存储
导入功能实现
1.mongodfiles命令导入一个files
本质上是分段存储 把一个文件分段chunks存放
fs.chuncks 分块存储文件
fs.files 记录上传文件的一些简要信息
2.需要c#语言驱动来实现

18.重量级Aggregation Pipeline框架
管道模型 后面操作的数据源来自于前一个的操作结果
主要操作 聚合操作 $group
可以多机器查询 而普通group是做不到的
$project 相当于sql操作中的select
$match 相当于where
$limit 相当于sql中的limit
$skip
$unwind 将数据拆解成多个document
$group 用于分组
$sample 随机选择文档
$sort sql中的desc asc
$geoNear 经纬度
$lookup sql中的join操作
$out 将最后的结果输出到指定的collection中去

19.轻量级聚合框架之db.collections.group 不能跨机器
ns 要聚合的group集合
key group键
$keyf 采用函数中定义我们的key 灵活性更高
$reduce 聚合进行中的各操作
$initial 聚合的初始文档
cond 相当于where
finalize 在某个groupkey结束后插入点

20.分布式计算框架MapReduce 重量级聚合框架 可以使用在集群上 多机器并行计算 然后通过reduce汇总
主要用于汇总运算
map 通过emit(this.cust_id,1);函数进行投影 生成键值对 this指的是当前document
reduce 对键值对进行累计
query可以进行一些加德纳的查询
finalize 聚合完成后执行
21.group和 MapReduce比较 一下方法命令相互对应
1.key keyf =>map
2.reduce =>reduce
3.cond => query
4.finalize => finalize

22.WiredTiger,MMap,In-Memory三种存储引擎 管理数据存储
WiredTiger已经被mongodb收购 是默认存储引擎
1.文档级别的并发 粒度小
2.快照 生成快照点 事务日志模式journal保存数据 如果mongodb挂掉了 mmp会通过事务日志回访来恢复collection
3.compression压缩 占用空间更小
4.
MMap 在3.0前开始使用 内存文件映射
1.集合级别的并发 粒度大
2.aof 一直在记录
journal是上一次快照和下次快照之间的数据
In-Memory 基于内存的 基本不用 和membercache类似

23.集群操作
Master-Slave集群 分布式部署
在config中配置
主服务器配置
port=27000
bind_ip=192.168.161.138
dbpath=./db
master=true

ReplicaSet集群 副本级
mongodb Sharding分片

24.ReplicaSet集群

25.mongodb Sharding分片终极之海量数据部署

26.mongostat,mongotop,HttpConsole实时监控

27.C#下载之连接我们的mongodb进行高效开发
1.安装驱动Install-Package MongoDB.Driver
2.在官网上找代码实现
连接mongodb服务器
对数据进行增删改查
https://zhuanlan.zhihu.com/p/58011194
https://www.cnblogs.com/lhxsoft/p/11736260.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亚历山大铁憨憨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值