Skip to main content

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对此是无感知的