事务基本概念
ACID特性
- 原子性:构成事务的所有操作要不全部执行成功,要么全部执行失败,不可能出现部分成功,部分失败的情况
- 一致性:在事务执行之前和执行之后,数据完整性约束始终保持一致的状态。(比较重要,在后面章节将重点介绍)
- 隔离型:并发执行的两个事务之间互不干扰。
- 持久性:事务对数据的更改操作将会被持久化道数据库中。
请区分这些一致性
- 数据库ACID中的consistency:这里的一致性是指在数据库系统中的完整性约束没有被破坏,例如主键、外键、触发器、check等约束,或者用户程序中定义的一致性条件。
- CAP理论的一致性:强一致性,所有节点在同一时刻具有相同的值,都是最新的数据副本。这里的一致性其实可以看作一致性模型的一种“线性一致性”。
- 一致性模型:在并发编程中,系统和开发这之间的一种约定,如果开发者遵循某些规则,那么执行读操作和写操作的结果是可预测的,所谓“可预测”,对应了程序逻辑的正确性。
本次阐述的一致性均代指一致性模型中的一致性。
SQL中的多维数据查询
- 多维数据可存储在传统的关系数据库中
- 需要将许多查询表达为SQL形式,例如部分匹配查询,范围查询,最近邻查询,where-am-i查询
Undo & Redo
- Undo:移除一个终止的事务的影响
- Redo:重新执行一个事务进行持久化
关键点
- 数据库中的table不能完全放到内存中
- 计算得到的中间结果不能完全放入内存中
存储层次
- tips:在数据库存储上尽量不要使用mmap,这会带来内存/并发等一系列问题,会成为系统瓶颈。
并行处理模型
- Process per DBMS Worker
- 使用一个进程处理一个请求
- 使用共享内存对全局数据进行共享,如buffer pool,不用将相同的page加载两次
- 单进程奔溃不会导致整个系统崩溃
- Process Pool
- 使用进程池来处理请求
- 对cpu缓存不友好
- 减少了创建销毁进程开销
- Thread per DBMS Worker
- 单进程多线程
- 线程崩溃导致进程崩溃
- 上下文切换开销很小
- 不需要管理共享内存