Примеры использования Spider
Введение
В этой статье будут рассмотрены простые примеры использования Spider для некоторых стандартных случаев. В качестве примера будет использована таблица продаж, чтобы обеспечить согласованность. В некоторых случаях примеры будут искусственными, но они используются для иллюстрации различных вариантов синтаксиса.
Базовая настройка
Доступны 3 или более серверов. Установите MariaDB на каждом из этих серверов:
- сервер spider, который будет действовать как фронтэнд-сервер, на котором будет размещен движок хранения spider.
- backend1, который будет выполнять роль сервера, хранящего данные
- backend2, который будет выполнять роль второго сервера, хранящего данные
Следуйте инструкциям здесь, чтобы включить движок хранения Spider на сервере spider:
mysql -u root -p < /usr/share/mysql/install_spider.sql
Включение использования подключений без root-прав
При использовании Журнала общих запросов, пользователи без прав root могут столкнуться с проблемами при запросе к таблицам Spider. Явное задание системной переменной spider_internal_sql_log_off заставляет узел Spider выполнять SET sql_log_off операторы на узлах данных для включения или выключения Журнала общих запросов. Когда это сделано, запросы, отправленные пользователями без SUPER привилегий, вызывают ошибку.
Чтобы этого избежать, не задавайте явно системную переменную spider_internal_sql_log_off.
Создание учетных записей для подключения spider к серверам backend
Spider нуждается в удаленном подключении к серверу backend для выполнения удаленного запроса. Поэтому это должно быть настроено на каждом сервере backend. В этом случае 172.21.21.2 — это IP-адрес узла spider, ограничивающий доступ только к этому серверу.
backend1> mysql grant all on test.* to spider@'172.21.21.2' identified by 'spider'; backend2> mysql grant all on test.* to spider@'172.21.21.2' identified by 'spider';
Теперь проверьте, можно ли использовать эти подключения с узла spider (здесь 172.21.21.3 = backend1 и 172.21.21.4 = backend2):
spider> mysql -u spider -p -h 172.21.21.3 test spider> mysql -u spider -p -h 172.21.21.4 test
Создание таблицы на серверах backend
Определение таблицы должно быть создано в тестовой базе данных на серверах backend1 и backend2:
create table opportunities ( id int, accountName varchar(20), name varchar(128), owner varchar(7), amount decimal(10,2), closeDate date, stageName varchar(11), primary key (id), key (accountName) ) engine=InnoDB;
Создание записей сервера на сервере spider
Хотя информацию о подключении также можно указать непосредственно в комментарии, более чисто будет определить объект сервера, представляющий каждое удаленное подключение сервера backend:
create server backend1 foreign data wrapper mysql options (host '172.21.21.3', database 'test', user 'spider', password 'spider', port 3306); create server backend2 foreign data wrapper mysql options (host '172.21.21.4', database 'test', user 'spider', password 'spider', port 3306);
Ошибка «Невозможно подключиться»
Помните, если вам нужно удалить, пересоздать или каким-либо образом изменить определение сервера по какой-либо причине, вам также нужно выполнить FLUSH TABLES оператор. В противном случае Spider продолжает использовать старое определение сервера, что может привести к тому, что запросы будут вызывать ошибку
Error 1429: Unable to connect to foreign data source
Если при запросе к таблицам Spider возникает эта ошибка, выполните FLUSH TABLES оператор для обновления определений сервера.
FLUSH TABLES;
Пример использования 1: удаленная таблица
В этом случае таблица spider создается для обеспечения удаленного доступа к таблице возможностей, размещенной на сервере backend1. Это позволяет выполнять запросы и удаленные операции DML на сервере backend1 с сервера spider:
create table opportunities ( id int, accountName varchar(20), name varchar(128), owner varchar(7), amount decimal(10,2), closeDate date, stageName varchar(11), primary key (id), key (accountName) ) engine=spider comment='wrapper "mysql", srv "backend1" , table "opportunities"';
Пример использования 2: фрагментация по хэшу
В этом случае таблица spider создается для распределения данных по серверам backend1 и backend2 путем хэширования столбца id. Поскольку столбец id является инкрементным числовым значением, хэширование обеспечит равномерное распределение по 2 узлам.
create table opportunities ( id int, accountName varchar(20), name varchar(128), owner varchar(7), amount decimal(10,2), closeDate date, stageName varchar(11), primary key (id), key (accountName) ) engine=spider COMMENT='wrapper "mysql", table "opportunities"' PARTITION BY HASH (id) ( PARTITION pt1 COMMENT = 'srv "backend1"', PARTITION pt2 COMMENT = 'srv "backend2"' ) ;
Пример использования 3: фрагментация по диапазону
В этом случае таблица spider создается для распределения данных по серверам backend1 и backend2 на основе первой буквы поля accountName. Все accountNames, начинающиеся с буквы L и ранее, будут храниться на backend1, а все остальные значения — на backend2. Обратите внимание, что столбец accountName должен быть добавлен в первичный ключ, что является требованием MariaDB разделения:
create table opportunities (
id int,
accountName varchar(20),
name varchar(128),
owner varchar(7),
amount decimal(10,2),
closeDate date,
stageName varchar(11),
primary key (id, accountName),
key(accountName)
) engine=spider COMMENT='wrapper "mysql", table "opportunities"'
PARTITION BY range columns (accountName)
(
PARTITION pt1 values less than ('M') COMMENT = 'srv "backend1"',
PARTITION pt2 values less than (maxvalue) COMMENT = 'srv "backend2"'
) ;
Пример использования 4: фрагментация по списку
В этом случае таблица spider создается для распределения данных по серверам backend1 и backend2 на основе определенных значений в поле owner. Bill, Bob и Chris будут храниться на backend1, а Maria и Olivier — на backend2. Обратите внимание, что столбец owner должен быть добавлен в первичный ключ, что является требованием MariaDB разделения:
create table opportunities (
id int,
accountName varchar(20),
name varchar(128),
owner varchar(7),
amount decimal(10,2),
closeDate date,
stageName varchar(11),
primary key (id, owner),
key(accountName)
) engine=spider COMMENT='wrapper "mysql", table "opportunities"'
PARTITION BY list columns (owner)
(
PARTITION pt1 values in ('Bill', 'Bob', 'Chris') COMMENT = 'srv "backend1"',
PARTITION pt2 values in ('Maria', 'Olivier') COMMENT = 'srv "backend2"'
) ;
С MariaDB 10.2 можно использовать следующую клаузу разделения для задания по умолчанию разделов для всех остальных значений, однако это должен быть отдельный раздел/фрагмент:
PARTITION partition_name DEFAULT
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/spider-use-cases/