2
0
mirror of https://github.com/Vonng/ddia.git synced 2025-04-05 15:50:09 +08:00
This commit is contained in:
Gang Yin 2022-04-15 18:52:36 +08:00
commit 135c4d8b10

4
ch3.md
View File

@ -284,7 +284,7 @@ LSM 树可以被压缩得更好,因此通常能比 B 树在硬盘上产生更
#### LSM树的缺点
日志结构存储的缺点是压缩过程有时会干扰正在进行的读写操作。尽管存储引擎尝试增量地执行压缩以尽量不影响并发访问,但是硬盘资源有限,所以很容易发生某个请求需要等待硬盘先完成昂贵的压缩操作。对吞吐量和平均响应时间的影响通常很小,但是日志结构化存储引擎在更高百分位的响应时间(请参阅 “[描述性能](ch1.md#描述性能)”)有时会相当长,而 B 树的行为则相对更具可预测性【28】。
日志结构存储的缺点是压缩过程有时会干扰正在进行的读写操作。尽管存储引擎尝试增量地执行压缩以尽量不影响并发访问,但是硬盘资源有限,所以很容易发生某个请求需要等待硬盘先完成昂贵的压缩操作。对吞吐量和平均响应时间的影响通常很小,但是日志结构化存储引擎在更高百分位的响应时间(请参阅 “[描述性能](ch1.md#描述性能)”)有时会相当长,而 B 树的行为则相对更具可预测性【28】。
压缩的另一个问题出现在高写入吞吐量时:硬盘的有限写入带宽需要在初始写入(记录日志和刷新内存表到硬盘)和在后台运行的压缩线程之间共享。写入空数据库时,可以使用全硬盘带宽进行初始写入,但数据库越大,压缩所需的硬盘带宽就越多。
@ -351,7 +351,7 @@ SELECT * FROM restaurants WHERE latitude > 51.4946 AND latitude < 51.5079
某些内存中的键值存储(如 Memcached仅用于缓存在重新启动计算机时丢失的数据是可以接受的。但其他内存数据库的目标是持久性可以通过特殊的硬件例如电池供电的 RAM来实现也可以将更改日志写入硬盘还可以将定时快照写入硬盘或者将内存中的状态复制到其他机器上。
内存数据库重新启动时,需要从硬盘或通过网络从副本重新加载其状态(除非使用特殊的硬件)。尽管写入硬盘,它仍然是一个内存数据库,因为硬盘仅出于持久性目的进行日志追加,读取请求完全由内存来处理。写入硬盘同时还有运维上的好:硬盘上的文件可以很容易地由外部实用程序进行备份、检查和分析。
内存数据库重新启动时,需要从硬盘或通过网络从副本重新加载其状态(除非使用特殊的硬件)。尽管写入硬盘,它仍然是一个内存数据库,因为硬盘仅出于持久性目的进行日志追加,读取请求完全由内存来处理。写入硬盘同时还有运维上的好:硬盘上的文件可以很容易地由外部实用程序进行备份、检查和分析。
诸如 VoltDB、MemSQL 和 Oracle TimesTen 等产品是具有关系模型的内存数据库供应商声称通过消除与管理硬盘上的数据结构相关的所有开销他们可以提供巨大的性能改进【41,42】。 RAM Cloud 是一个开源的内存键值存储器具有持久性对内存和硬盘上的数据都使用日志结构化方法【43】。 Redis 和 Couchbase 通过异步写入硬盘提供了较弱的持久性。