Поддержка SQL в Kingshard
1. Краткое описание
Kingshard поддерживает большую часть синтаксиса и протоколов MySQL без использования разделения таблиц, включая такие команды, как SHOW DATABASES, SHOW TABLES, а также различные DML- и DDL-операции. В случае разделения таблиц в настоящее время поддерживается только ограниченный набор DML-операций: SELECT, UPDATE, INSERT, REPLACE и DELETE. Функция автоматического создания дочерних таблиц не поддерживается. Также ограничена поддержка пользовательских команд для управления через интерфейс.
В обоих случаях (с разделением таблиц и без него) не поддерживаются следующие функции:
- пользовательские типы данных и функции;
- представления, хранимые процедуры, триггеры и курсоры;
- составные операторы, такие как BEGIN...END, LOOP...END LOOP, REPEAT...UNTIL...END REPEAT, WHILE...DO...END WHILE;
- управляющие структуры, такие как IF и WHILE.
Далее рассмотрим поддержку SQL в двух сценариях: с разделением таблиц и без разделения.
2. Поддержка SQL без разделения таблиц
Здесь описаны возможности поддержки SQL при отсутствии разделения таблиц.
2.1 Синтаксис DDL базы данных
- CREATE TABLE;
- CREATE INDEX;
- DROP TABLE;
- DROP INDEX;
- ALTER TABLE;
- TRUNCATE TABLE.
2.2 Синтаксис DML базы данных
- INSERT;
- INSERT DELAYED (не поддерживается);
- REPLACE;
- UPDATE;
- DELETE;
- Subquery: скалярные подзапросы, сравнения, с ANY, IN или SOME, ALL, EXISTS или NOT EXISTS, в предложении FROM;
- SELECT;
- SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name (не поддерживается).
- Last_insert_id.
2.3 Поддержка транзакций
- START TRANSACTION, COMMIT и ROLLBACK;
- не поддерживается определение transaction_characteristic;
- не поддерживается savepoint для вложенных транзакций;
- не поддерживается XA-транзакции;
- поддерживается установка режима автофиксации с помощью set autocommit=0/1;
- поддерживается использование begin/commit и start transaction для установки транзакций;
- SET TRANSACTION (не поддерживается настройка уровня изоляции глобальных транзакций);
2.4 Поддержка предварительной обработки
- Prepared Statements: поддерживается синтаксис Prepare для основных языков программирования (Java, PHP, Python, C/C++, Go).
2.5 Поддержка синтаксиса управления базами данных
- SET: поддерживается только для настройки набора символов и режима автофиксации, другие варианты не тестировались;
- Show: по умолчанию операции show будут перенаправлены на основную базу данных, для просмотра содержимого других баз данных необходимо использовать комментарии в SQL;
- KILL: в настоящее время не поддерживается KILL QUERY processlist_id.
2.6 Поддержка синтаксиса описания баз данных
2.7 Поддержка системных функций баз данных
Поддерживаются все системные функции (не тестировались).
3. Поддержка SQL с разделением таблиц
3.1 Синтаксис DDL базы данных
При разделении таблиц поддерживаются те же команды DDL, что и без разделения, но требуется добавление комментариев в SQL для указания узла, например:
/*node1*/create table stu_0000(id int, name char(20));
.
Это позволит Kingshard направить SQL на мастер-узел node1.
Примечание: команда truncate, если не указано имя узла, очистит данные во всех разделах, например: truncate stu
.
3.2 Синтаксис DML базы данных
- INSERT: поддерживается;
- INSERT DELAYED: не поддерживается;
- INSERT INTO SELECT: не поддерживается;
- REPLACE: поддерживается;
- UPDATE: поля, используемые для обновления, не могут быть частью раздела, также не поддерживается UPDATE SET xx=REPLACE(xx,'a','b');
- DELETE: поддерживается;
- Subquery: условия в WHERE не должны содержать подзапросов, функций и т. д., только имена полей;
- SELECT: поддерживается.
3.3 Поддержка синтаксиса управления базами данных
- DESCRIBE: поддерживается с использованием синтаксиса hint, например:
/*node2*/describe table_name
;
- EXPLAIN: поддерживается с использованием синтаксиса hint, например:
/*node2*/explain select * from xxxx
;
- USE: поддерживается.
3.4 Поддержка агрегатных функций для разделения таблиц
Поддерживаются следующие агрегатные функции: sum, max, count, min. Не поддерживается distinct после агрегатной функции, например: select count(distinct id) from xxxx.
3.5 Поддержка group by, order by и limit для разделения таблиц
Поддерживается использование group by, order by и limit в контексте разделения таблиц.
3.6 Другие особенности
- Не поддерживаются распределённые транзакции, обновление данных на нескольких узлах возможно только без транзакций.
- Не поддерживается предварительная обработка.
- Не поддерживается синтаксис управления базами данных.
Опубликовать ( 0 )