Как работают объединения в базе данных Cloud Spanner?
Как работают объединения в базе данных Google Spanner?
Будет ли запрос на соединение выполняться быстро? Есть ли какое-нибудь сравнение между SQL(MySql, Oracle, MSSQL) и NewSQL(Cloud Spanner/TiDB/CockroachDB)?
3 ответа
Облачный ключ поддерживает внутренние, поперечные, полные, левые и правые соединения. Объединения выполняются быстро, но поскольку Cloud Spanner распределяет данные по многим разделениям, каждый раз, когда вы можете ограничить запрос меньшим количеством разделений, тем быстрее будет выполняться запрос. Cloud Spanner поддерживает чередование ваших данных для определения отношений между родителями и детьми, что позволяет эффективно объединять ваши данные для более быстрых запросов.
TiDB поддерживает соединение. TiDB хранит данные на tikv-сервере и обрабатывает sql на tidb-сервере. tidb-сервер будет извлекать данные с tikv-сервера и обрабатывать логику sql.
По умолчанию TiDB использует параллельный оператор HashJoin в качестве оператора физического соединения. Вы также можете выбрать операторы SortMergeJoin и IndexLookupJoin, добавив подсказку в оператор SQL. В большинстве случаев HashJoin - хороший выбор. Но в некоторых случаях SortMergeJoin или IndexLookupJoin будут лучше. И последние два оператора более дружественны к памяти. В следующем выпуске TiDB будет выбирать, какой оператор физического соединения использовать в зависимости от стоимости.
На следующем рисунке показано, как работает параллельный оператор HashJoin в TiDB.
Вряд ли это будет точно так же, как в Spanner, но если вам интересно узнать больше подробностей о том, как работают объединения и как их оптимизировать в базе данных NewSQL, я бы порекомендовал проверить сообщения в блоге CockroachDB о соединениях:
https://www.cockroachlabs.com/blog/cockroachdbs-first-join/ https://www.cockroachlabs.com/blog/better-sql-joins-in-cockroachdb/