写缓冲
增加内存缓冲区总是对写放大有积极的影响。在像WiredTiger和LA树这样使用原地更新的数据结构中,内存缓冲区有助于通过合并多个相同页的写入来均摊它们的开销。换句话说,缓冲有助于减少写放大。
不可变数据结构
在不可变数据结构中(如多组件LSM树和FD树),缓冲具有类似的积极作用,但是以未来发生的重写为代价,这些重写发生在将数据从一个不可变的层移动到另一个不可变层时。换句话说,使用不可变性可能会将写放大延迟。同时,使用不可变性对并发性和空间放大有积极的影响,因为所讨论的大多数不可变结构使用的页是全满的。
顺序性
当使用不可变性时,除非我们也使用缓冲,否则最终会得到像Bitcask和WiscKey这样的无序存储结构(写时复制B树除外,它复制、重新排序和转移其页)。WiscKey仅将键存储在有序的LSM树中,并允许使用键索引来以键的顺序获取记录。在Bw树中,一些节点(被合并的节点)按键的顺序保存数据记录,而其余的逻辑Bw树节点的增量更新可能分散在不同的页上。


本文探讨了内存缓冲区如何在WiredTiger和LA树等数据结构中通过合并写入减少写放大。不可变数据结构如多组件LSM树和FD树虽然会延迟写放大,但能提升并发性和空间效率。同时,顺序性在数据存储结构如Bitcask和WiscKey中的重要性也被提及,特别是在无序存储和写时复制B树的场景下。
843

被折叠的 条评论
为什么被折叠?



