联接如何在 Cloud Spanner 数据库中工作?

Posted

技术标签:

【中文标题】联接如何在 Cloud Spanner 数据库中工作?【英文标题】:How do joins work in the Cloud Spanner database? 【发布时间】:2017-08-17 18:15:28 【问题描述】:

联接如何在 Google 的 Cloud Spanner 数据库中工作?

连接查询执行得快吗? SQL(mysql, Oracle, MSSQL) 与 NewSQL(Cloud Spanner/TiDB/CockroachDB) 有没有比较?

【问题讨论】:

【参考方案1】:

Cloud Spanner supports 内连接、交叉连接、全连接、左连接和右连接。联接速度很快,但由于 Cloud Spanner 将数据分布在许多 splits 中,因此您可以随时将查询限制为更少的拆分,查询速度就会越快。 Cloud Spanner 支持 interleaving 的数据定义父子关系,从而使您能够有效地预联接数据以加快查询速度。

【讨论】:

【参考方案2】:

TiDB 支持 join。 TiDB 将数据存储在 tikv-server 中,并在 tidb-server 中处理 sql。 tidb-server 会从 tikv-server 获取数据并处理 sql 逻辑。

默认情况下,TiDB 使用并行 HashJoin 算子作为物理连接算子。您还可以通过在 sql 语句中添加提示来选择 SortMergeJoin 和 IndexLookupJoin 运算符。 在大多数情况下,HashJoin 是一个不错的选择。但在某些场景下,SortMergeJoin 或 IndexLookupJoin 会更好。最后两个运算符对内存更友好。在下一个版本中,TiDB 将根据成本选择使用哪个物理连接算子。

下图展示了并行 HashJoin 算子在 TiDB 中是如何工作的。

【讨论】:

在 TiDB 中连接不同数据库的表会不会影响性能?【参考方案3】:

它不太可能与 Spanner 中的完全相同,但如果您想了解更多有关联接如何工作并在 NewSQL 数据库中进行优化的详细信息,我建议您查看 CockroachDB 关于联接的博客文章:

https://www.cockroachlabs.com/blog/cockroachdbs-first-join/ https://www.cockroachlabs.com/blog/better-sql-joins-in-cockroachdb/

【讨论】:

Cockroach db 有 postgres 层。那么我们需要为蟑螂数据库运行真空吗? 没有。 Cockroachdb 向客户端公开与 Postgres 相同的接口,但其实现与 Postgres 不同。

以上是关于联接如何在 Cloud Spanner 数据库中工作?的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Spanner - `SHOW TABLES` 的等效语法?

Cloud Spanner 读取与 Cloud Spanner SQL API

Cloud Spanner:拆分“太大”的含义

Google Cloud Spanner 中的自动增量

Google Cloud Firestore 与 Google Cloud Spanner 的区别?

Google Cloud Spanner 是不是支持压缩?