如果每次写入都必须写入空白页,ssd 如何处理需要持久性的数据库中的高写入?

问题描述 投票:0回答:1

例如,想象像 cassandra 或 bigtable 这样的数据库在 100 个服务器上处理 100 万个 qps,每个服务器处理 10k qps 唯一写入

ssd中每页为4kb

假设每台服务器有 100GB 的卷

每秒进行 10k 次写入,每次写入需要 4kb,这意味着在没有压缩的情况下,在填充整个数据库之前您有 25000000 (100GB / 4kb) 次写入

这意味着 41 分钟内您将填满整个磁盘

25000000 / 10000 / 3600 * 60 = 41min

如果进行压缩,吞吐量会下降,延迟会增加

SSD如何应对高写入?固件是否会即时进行压缩?或者数据库引擎是否必须处理压缩? 如果它的句柄在数据库中,如果数据需要持久性,则无法在内存中进行批处理和缓冲,因此您必须写入空白页,或从现有块中读取,连接新数据并覆盖同一块。

我还猜测某些数据结构更适合写放大?例如LSM在SSD中会比B树表现更好?

有我可以阅读更多相关内容的资源吗?

database solid-state-drive
1个回答
0
投票

对于Bigtable来说,由于提交日志在磁盘上,因此保证了持久性。在这种情况下,磁盘是 Google 的分布式文件系统,而不是节点本身上的附加存储,因此丢失节点,并不意味着您丢失了数据。

如果节点出现故障,可以重播日志以重新创建内存中的内容。您可以在原始的Bigtable 论文中阅读有关 memtables、sstables 和日志的内容。

© www.soinside.com 2019 - 2024. All rights reserved.