据了解,yugabytedb每SQL行创建n条key/value记录。
不过,它是如何实现高数据密度的呢?
1 回答
@AVA
我们在内部使用 DocDB,它使用了经过大量修改的 RocksDB。评论末尾的文档链接摘要:
每张桌子被分成几个平板电脑。每个平板电脑都是一个 RocksDB 实例。RocksDB 实例使用大小分层压缩
RocksDB 实例使用大小分层压缩,具有低写入 IO 放大和更高的空间放大(需要 50% 的可用磁盘空间)。这可以通过使用几个小平板电脑来缓解。我们得到低写入 IO,没有空间放大问题。
全局内存限制。由于在 1 个池中使用了 memstore,因此大量平板电脑不会在内存中产生开销。
全局块缓存将处理所有 sstables 上的缓存。这进一步减少了开销,而不是保留 per-rocksdb 缓存。
Global Throttled compactions 和 small/big compaction queues 将有助于防止压倒服务器的压实风暴
跨数据磁盘统一条带化 tablet 负载:每个 tablet 可以驻留在不同的磁盘 (JBOD) 中。这将在机器中的磁盘之间对 sstables 和 WAL IO 进行负载平衡。
高效的 c++ 实现代码。没有停止世界的 GC 有助于保持低延迟和一致。
当服务器完全使用时,我们停止接受新的查询。这将防止服务器崩溃或不堪重负。
磁盘块压缩(低读/写 IO)。
未压缩的内存块缓存:每次读取的 CPU 开销低,能够处理更多的热查询。
禁用 Rocksdb WAL 并仅保留 RAFT wal。这减少了读/写 IO。
https://docs.yugabyte.com/latest/architecture/docdb/performance/
https://docs.yugabyte.com/latest/architecture/concepts/yb-tserver/