目前关系型数据库系统中有两种锁定模型:
一种是mvcc(Multi-Version Concurrency Control),方便并发控制的。
大多数rdbms都是使用这种方式实现。读不加锁,写加锁的机制。
另外一种是Lock-Based Concurrency Control
要多补充点数据库理论知识了
术语
ACID概念
原子性(Atomicity) A
一致性(Consistency) C
隔离性(Isolation)I
持久性(Durability)D
传统的关系型数据库必须会实现上面几个点的。而mongodb是不会的。发生crash(意外崩溃)数据容易出现问题。
mongodb采用的mmap机制,在断电和某些异常情况下有可能丢失数据或者crash,好消息是1.8以后可以打开journal日志来避免此类问题
schema less是一把双刃剑,因为什么数据都可以往里面存,不像mysql那样会有字段的概念可以对数据有效性把最后一道关,需要在编写程序的时候特别注意一下数据有效性
关系型数据库是怎么避免突然掉电、机器崩溃等意外事情数据仍然持久化?
通过写日志的形式。实际上关系型数据库在写入数据的时候,并不会马上写入到磁盘上去。而是在内存中,这样做的目的是,避免磁盘的i/0能力限制。所以它们一般是有个机制定期刷新数据到磁盘上。但是内存中的数据是不持久的,一旦掉电,内存中的数据都会没了,所以为了解决临时掉电等问题,保证数据持久化,所以每次操作都会写入一个日志文件。
下回启动,就根据这个日志文件来恢复数据。
欢迎指正!