1

根据文档“Benchmarking Distributed SQL Databases”,YCQL 的吞吐量比 YSQL 更高。

如果我们使用相同的表结构和插入工具,并且我没有使用任何类似 SQL 的功能,那么与 YSQL 相比,为什么 YCQL 性能更好?

4

1 回答 1

2

这可能是因为 YCQL 和 YSQL 之间存在一些差异。请注意,虽然这些差异不是架构的基础,但它们之所以表现出来是因为 YSQL 是从数据库上半部分的 PostgreSQL 代码开始的。其中许多正在得到增强。

一跳优化YCQL 是分片感知的,并且知道底层数据库(称为 DocDB)如何分片和跨节点分布数据。这意味着它可以在使用 PREPARE-BIND 语句时直接“跳”到包含数据的节点。今天的 YSQL 无法做到这一点,因为这需要更改 JDBC 级别的协议,这项工作正在jdbc-yugabytedb项目中完成。

线程而不是进程YCQL 使用线程来处理传入的客户端查询/语句,而 YSQL(和 PostgreSQL 代码)使用进程。这些进程更重,这可能会影响某些场景中的吞吐量(以及某些其他场景中的连接可扩展性)。这是计划中的另一个增强功能。

Upsert vs insert在 YCQL 中,默认情况下,每个插入都被视为一个upsert(更新或插入,无需检查现有值),并且需要特殊的语法来执行纯插入。在 YSQL 中,每次插入都需要在执行插入之前读取数据,因为如果键已经存在,则将其视为失败。

YCQL 性能方面的更多工作目前(2019 年底),重点只放在 YSQL 的正确性 + 功能上,而 YCQL 性能方面已经做了很多工作。请注意,虽然性能方面的工作才刚刚开始,但由于底层架构的原因,可以相对快速地提高性能。

于 2019-12-30T04:28:05.843 回答