PostGIS总结

为什么NoSQL

在Youtube上看了fall Martin的关于NoSQL的演讲视频Introduction of NoSQL收获很多,然而之前并木有想到坐着想打的这些问题,如是做一下总结:

读Architecture of a Database System牛文有感

从ACID到CAP/BASE

前言

ACID

数据库系统真正庞大而复杂的部分是事务存储管理器,该部分由以下四个彼此紧密关联的组件组成:

  • 用于并发控制的锁管理器
  • 用于事务恢复的日志管理器
  • 数据库IO缓冲池
  • 用于组织磁盘数据的访问方法

ACID并不是为了保证事务正确而被正式定义并经得起数学论证的术语,可串行化才是。他们的实现机制如下:

1
2
3
4
5
6
性质           实现机制
------------------------------------------

Atomicity
Consistency 锁
Isolation 锁
Durability 日志和恢复技术

Atomicity(原子性)

Consistency(一致性)

Isolation(隔离性)

  • 隔离级别是事务之间并发读写的控制级别,不同隔离级别对解决并发请求时可能会发生的脏读、重复度和幻读三个问题的程度不同。
  • 事务隔离级别越高,就越能保证数据的一致性。
  • 事务隔离界别越高, 对并发性能的影响也越大。
  • 弱一致性隔离级别(也就是低隔离级别越低)相对于完全可串行化而言,可以提供更高的并发性能。
1
2
3
4
5
6
隔离级别     脏读     可重复读     幻读
------------------------------------------

未提交读 存在 不可以 存在
已提交读 不存在 不可以 存在
可重复读 不存在 可以 存在
可串行化 不存在 可以 不存在

ANSI SQL标准定义了四个“隔离级别”,按照增强的顺序可分为:

未提交读

一个事务可以读任何已提交或者未提交的数据。这可以通过“读操作不需要请求任何锁”来实现。

已提交读

一个事务可以读任何已提交的数据。对于同一个对象的重复读可能导致读到不同版本的数据。实现方式是,
读数据前必须首先获得一个读操作锁,一旦数据读取之后该锁被立即释放。

可重复读

在一个事务内,可重复度。一个事务只能读取一个已经提交数据的一个版本;一旦该事务读取了一个对象,那么,它将只能读取该对象的同一个版本。实现方式是,事务在请求读数据之前必须获得一个锁,并且保持该锁直到事务结束。

可串行化

多个事务相互交错的一组并发执行,必须与该组事务的一个串行执行结果相对应-即执行结果与没有并发的结果相同。

除了ANSI SQL隔离级别以外,很多厂商提供了其他的一些可应用于特殊情况的隔离性级别:

游标稳定
快照隔离
读一致

Durability(持久性)

CAP

BASE

PostgreSQL查询优化总结

PostgreSQL索引技术

Linux文本操作工具总结

Linux文件与磁盘操作工具总结

Linux网络操作工具总结

Linux进程和任务操作工具总结