Open afredlyj opened 7 years ago
MongoDB支持对单个collection的批量操作。 官方链接 : https://docs.mongodb.com/manual/core/bulk-write-operations/
对于有序写,如果在写操作过程中出现错误,MongoDB忽略剩余的操作直接返回。
对于无序写,MongoDB采用并行的方式写入,出现异常并不会中断剩余操作。
默认是有序操作,写操作由于需要等待前一次操作的返回,所以性能不如无序操作。
如果集群当前没有数据,可以提前切片,可以减少MongodDB自动分片的时间。
无序写入是并发写入,可以同时操作多个分片,提供写入速度。
如果插入的shard key是单调递增的,同一时间内大部分请求都会路由到同一个shard 分片,插入速度受限于单节点的性能,可以想办法将shard key散列。
MongoDB通过sharding实现水平扩容。
Sharded cluster包括如下组件:
MongoDB基于collection层实现分片,collection的数据分布在集群分片中。
MongoDB通过分片键将数据分布在集群的节点中,分片键由一个不可变的field或者目标collection每个document都存在的fileds组成。
在创建分片collection时需要指定分片键,并且一旦选择就不能修改,每个分片collection只能有一个分片键。
连续的shard key区间。
一个数据库可以即包含Shard collections又包含non-sharded collections,non-sharded collections存储在主shard节点上(primary shard),每个数据库都有自己的主shard节点。
MongoDB支持两种分片策略
原子性和事务
官网链接:https://docs.mongodb.com/manual/core/write-operations-atomicity/
在MongoDB中,单个document的单个写操作是原子的。如果单个写操作会修改多个document,那么对每个document的修改都是原子的,但是整个操作并不具备原子性。
可以使用
$isolated
来保证对多个document的修改是单线程的,前提条件是并不适于集群分片,$isolated
只保证当前写操作完成或者失败之前,其他客户端不可见,但是,如果操作失败并不能回滚。需要注意的是,
$isolated
会获取collection级别的排他锁。类事务特性
两阶段提交
并发控制
唯一索引 查询条件