0

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

4

1 回答 1

2

@AVA

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

  1. 每张桌子被分成几个平板电脑。每个平板电脑都是一个 RocksDB 实例。RocksDB 实例使用大小分层压缩

  2. RocksDB 实例使用大小分层压缩,具有低写入 IO 放大和更高的空间放大(需要 50% 的可用磁盘空间)。这可以通过使用几个小平板电脑来缓解。我们得到低写入 IO,没有空间放大问题。

  3. 全局内存限制。由于在 1 个池中使用了 memstore,因此大量平板电脑不会在内存中产生开销。

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

  5. Global Throttled compactions 和 small/big compaction queues 将有助于防止压倒服务器的压实风暴

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

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

  8. 当服务器完全使用时,我们停止接受新的查询。这将防止服务器崩溃或不堪重负。

  9. 磁盘块压缩(低读/写 IO)。

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

  11. 禁用 Rocksdb WAL 并仅保留 RAFT wal。这减少了读/写 IO。

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

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

于 2020-01-14T09:18:35.607 回答