levy5307 / blog

https://levy5307.github.io/blog/
MIT License
0 stars 0 forks source link

ForestDB #58

Open levy5307 opened 2 years ago

levy5307 commented 2 years ago

https://levy5307.github.io/blog/ForestDB/

在过去几年中,数据管理应用正在发生巨大的变化。例如Facebook和Twitter等社交应用,其用户数和处理的数据量变的越来越大,并且为了灵活分析,数据正在变得非结构化。不幸的是,由于关系型数据库的扩展性和严格的data model,使得使用关系型数据库变得非常挣扎,由于这个原因,很多公司开始开发NoSQL数据库。

尽管现在对于sharding、data replication、distributed caching有很多中NoSQL技术,而底层的存储引擎却没有什么不同。每个节点都是用KV存储引擎以一种schema-less的形式存储数据,其中key和value都是不定长的。由于kv存储引擎直接与存储设备(HDD或者SSD)交互,所以其吞吐和延迟决定着整个系统的性能。

kv存储引擎的吞吐量和延迟受存储访问时间的限制,而该存储访问时间由两个因素决定:

每次kv操作所访问的block数量。其由索引结构和特征所决定的

block访问模式,其由数据是如何读取及写入引擎有关。

目前有两种比较流行的索引结构:B+-tree和LSM-tree。B+-tree是最流行的索引结构,由于其最小化IO操作数量的特性,广泛应用于各种传统的数据库。现代key-value数据库例如BerkeleyDB、Couchbase、InnoDB和MongoDB使用B+-tree。相较于B+-tree,LSM-tree以牺牲读性能来提高写性能,很多最新系统例如LevelDB、RocksDB、SQLite、Cassandra和BigTable使用LSM-tree或者其变种。