支持哪些类型的压缩(例如,大小层/级别压缩(?什么参数控制着紧集的行为?
YugabyteDB的压缩是大小分层的。与级别压缩相比,大小层压缩具有更低的磁盘写入(IO(放大率的优点。有时有人担心,尺寸分层的紧凑型具有更高的空间放大率(需要50%的空间(。YugabyteDB中的情况并非如此,因为每个表都被分解为多个碎片,并且跨碎片的并发压缩数量被限制到一定的最大值(~4;但确切的数量取决于核心的数量(。因此,如果一个节点有N个碎片,那么所需的额外空间量仅为(4/N+4(。因此,YugabyteDB中的典型空间放大率往往在10-20%的范围内。
默认情况下,当新数据到达时会自动触发压缩,并刷新内存存储以创建SSTable文件。默认策略确保进行压缩是值得的——例如,算法试图确保被压缩的文件大小大致相似。例如,用1GB文件压缩一个100GB的文件以生成101GB的文件是没有意义的——这将是大量不必要的IO,从而减少增益。这些旋钮指导选择:
--rocksdb_universal_compaction_min_merge_width (default 4)
--rocksdb_universal_compaction_size_ratio (default 20)
默认情况下,只有当至少有4个符合条件的文件,并且它们的运行总数(到目前为止考虑的文件大小的总和(在考虑包含在同一压缩中的下一个文件的20%以内时,才会运行压缩。
- YugabyteDB还提供了一种控制压缩过程在整个系统中允许占用多少系统资源的方法。它会根据CPU的数量自动选择一些设置,但用户也可以根据可用的磁盘带宽明确修改这些设置。管理此设置的标志包括:
--rocksdb_max_background_compactions (e.g, 4)
--rocksdb_compact_flush_rate_limit_bytes_per_sec (e.g., 268435456)
- 除了对压缩进行节流控制外,YugabyteDB还进行了各种内部优化,以最大限度地减少压缩对前台延迟的影响。其中之一是一个优先队列,优先考虑小压缩而不是大压缩,以确保任何平板电脑的SSTable文件数量尽可能少
•使用yb管理工具,YugabyteDB还允许在表上外部触发手动压缩。这对于新数据不再进入系统中的表,但由于已经发生的覆盖/删除或TTL到期,用户希望回收磁盘空间的情况非常有用。