LSM-Tree

Log Structured-Merge Tree,在面对亿级别之上的海量数据的存储和检索的场景下,我们选择的数据库通常都是各种强力的NoSQL,比如Hbase,Cassandra,Leveldb,RocksDB等等,这其中前两者是Apache下面的顶级开源项目数据库,后两者分别是Google和Facebook开源的数据库存储引擎。而这些强大的NoSQL数据库都有一个共性,就是其底层使用的数据结构,都是仿照“BigTable”中的文件组织方式来实现的,也就是我们今天要介绍的LSM-Tree。

磁盘批量顺序写的性能远超随机写。log全部通过append的方式进行批量追加,不存在删除和修改。这种情况下的读性能会受影响。所以出现了LSM-Tree结构,出了磁盘顺序写之外,增加了内存和磁盘多层的结构

LSM_tree

事务

数据库事务,是把多条语句作为一个整体进行操作的功能。数据库事务应该保证事务范围内的所有操作全部成功或者全部失败。

可见,数据库事务具有ACID这4个特性:

  • A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;
  • C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100;
  • I:Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离;
  • D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。

读写流程