NoSQL-KV-mongoDB
NoSQL
- KV
- Document
- Neo4J 图数据库
- VectorDB & Log Structure
- TSDB
- 云数据库
- ...
rdbms:超过1kw行数据(index 主键id+指针 = 8 + 6至少14字节, innodb中文件块是16KB粒度,大约1000个item, kw量级时差不多是index从3层退化到四层的时候), 慢
非结构化数据
nosql对于 大数据/ 批处理支持更优 且多数具备 一次写入多次读取的特点,读多于写,因而对事务和锁要求变弱
BigTable column family
cell 存多个版本
nosql db:
-
dynamo
-
couchDB
-
mongoDB
-
...
mongodb
- document-oriented storage
- full index support
- replication & high availiability
- auto sharding 自动分片
- querying
- fast in-place update
- map/reduce
- gridfs
对应理解:
"表" - collection
"行" - document
mysql partition 水平切割
mongo可以做垂直切割 -> 放弃关联性, 手动维护, 垂直的成为独立的collection
mongodb自动有三个collection: admin, local和config
默认的sharding机制是按照_id
来做的
查询时负载均衡和分区时的依据:先由config表确认在哪个server,再去server查询
可以修改schema, schema free的, 仅用于聚合aggregation
组合mongo和mysql, 以person对象的icon字段为例
person icon 存mongo
在person上icon字段加上 @transient
表示JPA不管这个
然后在service里面组合mongo查出来的值和mysql查出来的值
mongo auto-shard原理, 单机 client - mongod
集群 client - mongos - mongod, client和内置router的mongos 通信
触发自动分片的条件: 1. 手动配置条件 2.本机硬盘不够 3.本机fd不够 4.本机内存不够 ...
mongo分区调度的最小单位是chunk, chunk就是一段_id
的key range, 最大大小可 以配置
mongo自动分区会迁移这些chunk使得集群之中的各台机器上达到一个相对的数量平衡(存储负载均衡, 而不是访问负载均衡, 访问负载可以自己外挂脚本)
当一个chunk太大时, 就会触发chunk分裂, 进而可能触发chunk在不同机器上的迁移
每个区域都可以有主从, 主数据库维持一个config, 记录key - chunk - shard 直接的关系, client对此是无感知的