在RisingWave 中,我们用 rust 自研了云原生的 LSM 存储引擎 Hummock ,并将之用来存储流计算中有状态算子的状态。与一般的 LSM 存储引擎类似,新写入 Hummock 的数据将会写入 mutable mem-table 中,在特定条件下,mutable mem-table 会被 freeze 成 immutable mem-table。最终immutable mem-table 会写成 SST(sorted ...
我们不再使用在目前开源数据库及大数据平台流行的 LSM Tree(Log Structured Merge Tree)数据结构。而是使用一种我们自己称之为 Partition Tree 的数据结构,数据直接写入分区文件,在保持 append only 写入性能的同时,避免了 LSM 结构的后续 compact 开销。得益于现代 Linux 内核的支持和巧妙的写入设计,我们在用户态(Use...
简介LSM-Tree项目 SSTable做Leveled compaction的过程 LSM树的查询过程 对LSM的读写链路做的优化, 布隆过滤器的参数调优. 做项目时遇到的问题以及解决方案(讲了Range查询API, 错误处理. 模块管理) LevelDB的迭代器系统 Rust使用迭代器的好处(惰性这点没答上来,面试官提醒了) Rust的所有权、RAII、借用以及生命周期...
基于LSM树的存储引擎 LSM树(Log-Structured Merge Tree)是一种存储结构,不同于其他严格的树状数据结构(例如红黑树)。一个LSM树组成有这几个部分: MemTable:在内存中的数据结构,短期保存更新的数据。因为内存只是暂时的,它断电后就会丢失数据,所以要通过预写式日志WAL(Write-ahead logging)来保证数据的可靠性,保证...
但是在存储层的选型上,团队首先排除的就是 Pure Go 的选项,理由很简单,底层已经决定接入 RocksDB,RocksDB 本身就是个 C++ 的项目,而 Go 的 LSM-Tree 的实现大多成熟度不太够没有能和 RocksDB 相提并论的项目,如果选 Go 的话,只能选择用 Cgo 来 bridge,但是当时 Cgo 的问题同样明显,在 2015 年底...
LSM-Tree项目中的Batch优化怎么做的? 如果我对在同一个Batch里面对同一个key进行put和del(),会抵消吗? LSM-Tree项目中写文件(磁盘)有优化吗? Compaction过程如何提高并发度? 多个线程同时做Compaction会不会压缩到同样的文件造成冲突? 反问环节 Q1:一个优秀的Rust工程师该有的技术栈/资质 ...
【Fjall:一个用安全的Rust语言编写的基于LSM(Log-Structured Merge-tree)的嵌入式键值存储引擎,它提供类似BTreeMap的线程安全API,支持范围和前缀搜索,并具有自动后台维护功能】'fjall-rs/fjall: 🗻 LSM-base...
首先来看状态机,因为它会存放用户的实际数据,而这些数据完全可能是随机的 key - value,为了高效的处理随机的数据插入,自然我们就考虑使用现在通用的 LSM Tree 模型。而在这种模型下,RocksDB 可以认为是现阶段最优的一个选择。 RocksDB 是 Facebook 团队在 LevelDB 的基础上面做的高性能 Key-Value Storage,它提供...
首先来看状态机,因为它会存放用户的实际数据,而这些数据完全可能是随机的 key - value,为了高效的处理随机的数据插入,自然我们就考虑使用现在通用的 LSM Tree 模型。而在这种模型下,RocksDB可以认为是现阶段最优的一个选择。 RocksDB 是 Facebook 团队在 LevelDB 的基础上面做的高性能 Key-Value Storage,它提供...
但是在存储层的选型上,团队首先排除的就是 Pure Go 的选项,理由很简单,底层已经决定接入 RocksDB,RocksDB 本身就是个 C++ 的项目,而 Go 的 LSM-Tree 的实现大多成熟度不太够没有能和 RocksDB 相提并论的项目,如果选 Go 的话,只能选择用 Cgo 来 bridge,但是当时 Cgo 的问题同样明显,在 2015 年底,在 ...