实际串行执行

解决并发问题最直接的方法:在一个线程上按照顺序方式每次执行一个事务。

为什么可行:

  • 内存越来越便宜,可以将事务需要的数据都放在内存中。
  • OLTP 事务通常执行很快,只产生少量的读写操作。通常较长时间的分析操作通常是只读。

事务为了充分利用单线程所做的调整:

  • 采用存储过程封装事务,Redis 采用 Lua
  • 分区

约束

  • 事务必须简短而高效。
  • 事务所需数据都在内存。
  • 写入吞吐量必须低,否则需要采用分区,最好没有跨分区事务。
  • 要支持跨分区事务必须确保跨分区事务占比很小。

两阶段加锁

可串形化的快照隔离