Резюме

В предыдущей статье Введение в DistSQL, написанной Хаораном Менгом, коммиттер Apache ShardingSphere поделился мотивирующими причинами разработки DistSQL, объяснил его синтаксическую систему и впечатляюще продемонстрировал, как можно использовать один SQL для создания таблицы сегментирования. .

Мы считаем, что теперь вы должны лучше познакомиться с новыми возможностями Apache ShardingSphere.

После публикации статьи мы получили множество сообщений от наших читателей и пользователей. Они хотели узнать подробности использования DistSQL для настройки правил сегментирования и могут ли они по-прежнему использовать DistSQL для быстрого создания и настройки таблицы сегментирования с такими конфигурациями, как YAML или пространство имен. Сегодня мы хотели бы представить вам вашего нового дворецкого конфигурации сегментирования AutoTable.

Задний план

Sharding — это основная функция Apache ShardingSphere. Мы предполагаем, что ваш старый рабочий процесс сегментирования (без переноса данных), вероятно, выглядит так, как показано ниже:

Рисунок 1. Рабочий процесс разделения

В таком рабочем процессе вы должны четко знать свои стратегии сегментирования, а также фактические имена таблиц и их источники данных. Затем вы основываете свои правила сегментирования на этой информации.

Одним из результатов распределения таблиц может быть 8 баз данных сегментирования, каждая из которых содержит 4 таблицы.

Рисунок 2. 8 баз данных * 4 таблицы

Проблема

Только когда вы на 100 % уверены в распределении таблиц, вы можете кодировать правильные actualDataNodes правила. В противном случае вы можете написать неправильно. Правильное правило шардинга в этом случае выглядит так:

tables:
t_order:
actualDataNodes: ds_${0..7}.t_order_${0..3}
databaseStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: database_inline
tableStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: table_inline
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${order_id % 8}
table_inline:
type: INLINE
props:
algorithm-expression: t_order_${order_id % 4}

На самом деле ShardingSphere имеет очень удобные правила настройки. Однако у пользователей все еще могут возникнуть трудности, такие как:

  • Непонимание стратегий или правил шардинга;
  • Несоответствие между правилами сегментирования и фактическим распределением таблиц;
  • Неверные выражения конфигурации.

Мы всегда обращаем внимание на проблемы пользователей. Например, мы заметили, что один из наших пользователей обнаружил следующую проблему:

Зачем вам AutoTable?

Apache ShardingSphere версии 5.0.0 запустила AutoTable, новый метод, упрощающий настройку сегментирования.

Буквально AutoTable означает автоматическое сегментирование таблиц. Когда вы используете AutoTable, вам нужно только указать количество сегментов и источник данных. Благодаря AutoTable вам больше не нужно беспокоиться о фактическом распределении таблиц. Правильный формат конфигурации показан ниже:

autoTables:
t_order:
# Specify your datasources
actualDataSources: ds_${0..7}
shardingStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: mod
shardingAlgorithms:
mod:
type: MOD
props:
# Specify your sharding-count
sharding-count: 32

Благодаря конфигурации AutoTable ShardingSphere может распознать, что логическая таблицаt_order имеет 8 источников данных и нуждается в 32 таблицах сегментирования, а затем автоматически вычисляет результат распределения: 8 баз данных сегментирования * 4 таблицы сегментирования. Результат точно такой же.

AutoTable и DistSQL

Теперь вы знаете больше о AutoTable. Однако, когда вы комбинируете AutoTable с DistSQL, результаты еще более впечатляющие, поскольку это может значительно упростить настройку сегментирования. В отличие от старого метода, правило конфигурации DistSQL срабатывает сразу, поэтому вам больше не нужно его перезапускать. Кроме того, одно изменение правил никогда не повлияет на другие.

DistSQL поддерживает три выражения, используемые для управления правилами таблицы сегментирования: создание, изменение и удаление.

# Create a sharding table rule
CREATE SHARDING TABLE RULE t_order (
RESOURCES(resource_0,resource_1),
SHARDING_COLUMN=order_id,TYPE(NAME=hash_mod,PROPERTIES("sharding-count"=4))
);
# Ater a sharding table rule
ALTER SHARDING TABLE RULE t_order (
RESOURCES(resource_0,resource_1),
SHARDING_COLUMN=order_id,TYPE(NAME=hash_mod,PROPERTIES("sharding-count"=10))
);
# Drop a sharding table rule
DROP SHARDING TABLE RULE t_order;

Примечание. Изменение правила может повлиять на старые данные. Чтобы решить эту проблему, мы предоставляем ShardingSphere Scaling, который позволяет переносить данные и делает более удобным управление распределенными данными. Мы будем рады рассказать больше о масштабировании ShardingSphere в ближайшем будущем.

Вопросы-Ответы

Могу ли я использовать AutoTable в ShardingSphere-JDBC?

Да, ты можешь.

И ShardingSphere-JDBC, и ShardingSphere-Proxy поддерживают AutoTable. Более того, вы также можете использовать DistSQL в прокси-сервере для динамической настройки, чтобы удовлетворить ваши различные требования к доступу.

Какие алгоритмы сегментирования поддерживает AutoTable?

AutoTable поддерживает все алгоритмы автоматического сегментирования:

  • MOD:Алгоритм разделения по модулю
  • HASH_MOD :Алгоритм разделения хэшей по модулю
  • VOLUME_RANGE:Алгоритм разделения диапазона на основе объема
  • BOUNDARY_RANGE:алгоритм разделения диапазона на основе границ
  • AUTO_INTERVAL : Алгоритм разделения с автоматическим интервалом

Для получения дополнительной информации, пожалуйста, прочитайте документ Apache ShardingSphere Алгоритм автоматического сегментирования.

Помимо использования встроенных алгоритмов, вы также можете разработать расширение SPI, чтобы при необходимости настроить собственный алгоритм сегментирования.

Я уже использовал YAML. Могу ли я использовать AutoTable сейчас?

Мы не рекомендуем вам это делать.

Если вы уверены, что такой переключатель может заставить результат распределения таблиц соответствовать вашим ожиданиям, вы можете попробовать. В противном случае, пожалуйста, не делайте этого.

Однако, если вы хотите создать новую таблицу, вы можете использовать AutoTable.

Какой лучший сценарий для AutoTable?

AutoTable стремится быть вашим дворецким для настройки сегментирования. Все, что вам нужно сделать, это сообщить ему, сколько осколков вам нужно, и тогда вам не придется запоминать фактическое расположение стола и количество столов.

Чтобы использовать AutoTable, лучше сначала настроить правила, а затем использовать CREATE TABLE для создания таблиц. Старые привычки умирают с трудом, но, пожалуйста, измените свою старую привычку: сначала создайте таблицы, а затем настройте правила. Теперь ShardingSphere больше похожа на точку доступа к вашей распределенной базе данных, чем на промежуточное ПО.

Мои имена источников данных не являются смежными или у меня слишком много имен источников данных. Могу ли я использовать AutoTable?

Да, ты можешь. Когда вы указываете свои источники данных, их имена не обязательно должны быть непрерывными. Чтобы решить проблему, вы можете использовать выражение перечисления и встроенное выражение одновременно:

CREATE SHARDING TABLE RULE t_order (
RESOURCES('resource_${0..9}',resource_12,resource_15,"resource_$->{17..19}"),
...
);

Могу ли я использовать AutoTable и старый метод вместе?

Да, ты можешь.

Для получения дополнительной информации, пожалуйста, прочитайте: https://github.com/apache/shardingsphere/blob/master/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/resources/config/config-sharding.yaml

Награда:

@CatYangWei был первым пользователем GitHub, который спросил о AutoTable.

Мы хотели бы поблагодарить его за помощь в поиске проблемы. Мы ценим это. Чтобы выразить нашу благодарность, мы свяжемся с вами позже и отправим вам подарок. в знак признательности от сообщества👏👏👏

Мы также приглашаем других членов сообщества помочь нам найти больше проблем, чтобы улучшить сообщество.

Сообщество ShardingSphere:

ShardingSphere Github: https://github.com/apache/shardingsphere

ShardingSphere Твиттер: https://twitter.com/ShardingSphere

Slack-канал ShardingSphere: apacheshardingsphere.slack.com

Руководство участника: https://shardingsphere.apache.org/community/en/contribute/

Автор

Лунтао Цзян

Инженер-разработчик промежуточного программного обеспечения SphereEx и участник Apache ShardingSphere.