待学习--中间件
MongoDB
MySQL与MongoDB对比:
MySQL的行列、表结构;MongoDB的文档Document、collection集合结构。
MongoDB的一个文档中,也存在主键ID构建的索引。
MySQL是一个读写数据表行列的服务进程,MongoDB是用于读写集合文档的服务进程。
MongoDB可以看作是一个数据结构灵活的MySQL。
- database:数据库,与MySQL的database类似;
- collection:数据集合,相当于 MySQL 的 table;
- document:数据记录行,相当于 MySQL 的 row,但与mysql等关系型数据库表不同,MongoDB是以key,value形式存储的;
- field:数据域,相当于 MySQL 的 column;
- _id:MongoDB中存储的文档必须有一个_id键,默认创建一个ObjectId对象。ObjectId类似于唯一主键,占用12bytes【Unix时间戳(四个字节)、机器识别码(三个字节)、进程pid(两个字节)、随机数(三个字节)】,可以很快生成和排序。
MongoDB是什么?
MongoDB是一个高性能、开源且无模式的分布式NoSQL数据库,在很多场景下可以代替传统的关系型数据库。MongoDB使用C++编写,不支持SQL,但自己有着强大的语法功能。
它使用BSON(Binary Serialized Document Format)作为自己的数据存储和传输格式,该格式是一种类似于JSON的二进制序列化文档,支持嵌套对象和数组。
BSON 编码是什么?
JSON + Binary ==> BSON
将一个个BSON文档组成的集合写入磁盘中***.wt
文件中。
变种B+树索引
COW写时复制技术,保证高并发读写性能。
缓存策略(Cache + LRU淘汰)
持久化保障:Journal写前日志 + Checkpoint机制
WiredTiger 是什么?和Server层架构的关系
存储引擎的定位与核心功能接口
单机MongoDB的本质,对比MySQL架构的相似性
高扩展性设计:分片集群
分片(Shard)数据切分逻辑
路由服务(mongos)与配置中心(Config Server)是什么
副本集Replica Set是什么?
分布式MongoDB集群是什么
命令 | 释义 |
---|---|
show dbs | 查看所有数据库 |
use 数据库名称 | 切换数据库,如果数据库不存在则创建 |
db | 查看当前所在数据库 |
db.stats() | 查看当前数据库详情 |
show collections | 查看数据库下的所有集合 |
db.createCollection(“user”) | 创建一个名为user的集合 |
db.集合名称.insert({“name”:“张三”,“age”:20})) | 向集合中插入一条key:value格式的数据 |
db.集合名称.remove({删除条件}) | 从集合中删除符合条件的数据 |
db.集合名称.find({条件}) | 条件查询数据 |
db.集合名称.findOne() | 返回第一条数据 |
db.集合名称.count() | 统计集合中的总数 |
db.集合名称.find().count() | 根据条件统计集合中的总数 |
db.集合名称.find().sort({age:1}) | 根据字段排序,1:升序,-1:降序 |
db.集合名称.find().skip(2).limit(3) | 分页查询,skip跳过第几条,limit查询多少条 |
db.集合名称.find({'age':{$gt:25}}) 、db.集合名称.find({'age':{$gte:25}}) | 集合 age > 25、集合 age >= 25 |
db.集合名称.find({'age':{$lt:25}}) 、db.集合名称.find({'age':{$lte:25}}) | 集合 age < 25、集合 age <= 25 |
db.集合名称.find({'age':{$ne:25}}) | 集合 age != 25 |
db.集合名称.find({'age':{$eq:25}}) | 集合 age = 25 |
db.集合名称.find({'age':{$in:[23,27]}}) 、db.集合名称.find({'age':{$nin:[23,27]}}) | 集合 age in (23,27) 、集合 age not in (25,27,23) |
db.集合名称.stats() | 查看索引相关情况 |
db.集合名称.ensureIndex({key:1}) | 创建普通索引,key就是要加索引的字段 |
db.集合名称.find({key:value}).explain() | 查看查询计划 |
db.集合名称.dropIndex({key:1}) | 删除索引 |
db.集合名称.ensureIndex({key:1},{unique:true}) | 创建唯一索引 |