yugabytedb是如何实现高数据密度的?

How does yugabytedb achieve high data density?

据了解,yugabytedb 每 SQL 行创建 n key/value 条记录。
尽管如此,它是如何实现高数据密度的?

@AVA

我们在内部使用 DocDB,它使用经过大量修改的 RocksDB。 评论末尾文档链接的摘要:

  1. 每个 table 被分成几个 tablets。每个 tablet 都是一个 RocksDB 实例。 RocksDB 实例使用大小分层压缩 whi

  2. RocksDB 实例使用 size-tiered compaction,它具有低写入 IO 放大和更高 space 放大(需要 50% 的可用磁盘 space)。这可以通过几个小的 tablets 来缓解。我们得到低写入 IO,没有 space 放大问题。

  3. 全局 memstore 限制。大量 tablets 不会在内存中产生开销,因为 memstores 在 1 个池中使用。

  4. 全局块缓存将处理所有 sstables 上的缓存。这进一步减少了开销,而不是保留每个 rocksdb 缓存。

  5. 全局节流压缩和small/big压缩队列将有助于防止压缩风暴压垮服务器

  6. 条带化tablet跨数据盘均匀加载:每个tablet可以驻留在不同的磁盘(JBOD)。这将在机器的磁盘之间负载平衡 sstables 和 WAL IO。

  7. 高效的c++实现代码。没有停止世界的 GC 有助于保持低延迟和一致。

  8. 当服务器处于满负荷状态时,我们将停止接受新查询。这将防止服务器崩溃或不堪重负。

  9. 磁盘块压缩(低 read/write IO)。

  10. 未压缩的内存块缓存:每次读取的开销较低 cpu,并且能够处理更多的热查询。

  11. 禁用 Rocksdb WAL,只保留 RAFT wal。这减少了read/write IO。

https://docs.yugabyte.com/latest/architecture/docdb/performance/

https://docs.yugabyte.com/latest/architecture/concepts/yb-tserver/