influxdb lsm tsm
influxdb lsm tsm 底层采用自研的TSM存储引擎,TSM也是基于LSM的思想,提供极强的写能力以及高压缩率。 数据库 数据库的本质上是完成四件事情, 插入数据, 删除数据, 修改数据, 查询数据。 也就是我们常说的CRUD。 市面上现在流行的数据库大致有两类, 1. 基于日志结构的储存引擎。大部分的 Nosql 数据库都是此类, 面向页的存储引擎: Mysql 极简key-value型数据库 第一版需要实现的功能: 1. 插入数据 2. 查询数据 #!/bin/hash db_set() { echo "$1,$2" >> database } db_get() { grep "^$1, "database | sed -e "s/^$1,//" | tail -n 1 } 上面我们用两个Bash 函数实现了一个Key-value型数据库,用文件读写的方式将数据记录到磁盘上。 每行是用逗号分割的key,value 形式。 (这种存储方式也叫CSV文件格式) db_set() : 追加到文件尾 db_get() : 遍历所有匹配key 的行, 用sed 命令把key, 替换成空字符串, 并输出最后一行。 至于删除, 我们可以再写入一条数据, 在key,value 后面追加一个墓碑标记。 查询的时候,如果最新的一条数据有墓碑标记, 则代表该数据已被删除。 考虑下这个数据库的性能: 空间上: 当我们修改key 对应的值, 是采用追加写入文件的方式, 会造成存在很多重复的键, 过于占用磁盘空间, 当使用一段时间,磁盘空间可能就会被耗尽。 时间上: 读数据需要整体遍历一遍文件, 当我们数据量非常大的时候查询速度将会变得非常慢。 对于一个数据库, 我们认为查询数据的时候O(logn) 或者O(1)的时间复杂度是可接受的。 ...