1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Cetus

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
cetus-sharding.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 21:41 e65dd39

Текст на русском языке:

  • Применён потоковый TCP-подход, нет необходимости предварительно кэшировать весь набор результатов перед отправкой клиенту. Это позволяет избежать проблем с переполнением памяти и снизить потребление памяти, а также повысить производительность.

8. Доменное имя для подключения к серверу

Поддерживается подключение к базе данных через доменное имя. В Cetus есть соответствующая опция запуска disable-dns-cache, которая позволяет выбрать, следует ли включать функцию разрешения соединения с доменными именами. После включения можно установить доменное имя и использовать его для доступа к серверной части.

9. Вставка массовых данных

Можно указать несколько значений в операторе INSERT, разделяя их запятыми, например: INSERT INTO table (field1, field2, field3) VALUES ('a', "b", "c"), ('a', 'b', 'c'), ('a', 'b', 'c');

Замечания

1. Использование пула соединений

Все серверные узлы MySQL должны иметь одинаковые имена пользователей и пароли. Они указываются в файле conf/users.json. Если не указать пользователя в настройках, то он не сможет подключиться к Cetus. Для каждого отдельного экземпляра сервера нельзя указывать отдельные учётные данные. Имя пользователя и пароль при подключении к Cetus могут отличаться от тех, что используются на сервере. Их можно посмотреть в conf/users.json.

2. Поддержка команды set

Мы поддерживаем следующие команды уровня сеанса set: Set names/autocommit. Команды уровня global не поддерживаются. Другие команды set, которые не перечислены, не входят в область поддержки, и их не рекомендуется использовать. Если это действительно необходимо, рекомендуется связаться с администратором базы данных, чтобы настроить поведение по умолчанию.

Поддерживается глобальная настройка свойства CLIENT_FOUND_ROWS. Можно выбрать только включение или отключение этой функции для всего Cetus. Нельзя отдельно настраивать это свойство для каждого соединения. Его можно включить с помощью опции запуска. По умолчанию эта функция отключена. Функция CLIENT_LOCAL_FILES не поддерживается. Рекомендуется протестировать другие функции, требующие дополнительной настройки, прежде чем подтверждать их использование.

3. Изменение переменных среды

Хотя мы поддерживаем изменение переменных окружения клиентом, мы не рекомендуем делать это в программе. Как только переменная будет изменена, нам нужно сбросить состояние соединения перед выполнением SQL, что приведёт к дополнительным запросам к серверу и увеличению задержки ответа клиента.

4. Обработка кода

Функции, которые можно реализовать с помощью программы, лучше не использовать в SQL. Лучше сначала вычислить результат в программе, а затем передать значение в SQL, например, функции времени curdate() и строковые функции trim(). Поскольку функции не могут быть маршрутизированы для разделения баз данных, запрос, который должен был быть отправлен одному серверу, становится распределённой транзакцией, что снижает производительность.

При разбиении на страницы лучше самостоятельно отслеживать смещение страниц, поскольку Cetus перезаписывает смещение при выполнении. SQL устанавливает смещение равным нулю, а после получения всех данных выбирает нужную страницу. Таким образом, объём данных значительно увеличивается, и индекс базы данных не может быть эффективно использован, что приводит к снижению производительности и ошибкам, если данные превышают порог памяти.

5. Не поддерживается Kill query

Не поддерживается остановка выполнения SQL-запроса во время выполнения. Вместо этого можно подключиться к менеджеру Cetus и выполнить команду show connectionlist, чтобы просмотреть выполняемые запросы. Затем можно найти информацию о текущем соединении и остановить выполнение запроса с помощью команды базы данных.

6. Не поддерживается TLS

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

7. Не поддерживается мультитенантность

В настоящее время версия с разделением не поддерживает мультитенантные системы.

8. Не поддерживается динамическое расширение

Версия с разделением баз данных в настоящее время не поддерживает динамическое расширение. Требуется ручное перемещение данных, и в большинстве случаев требуется «остановить» систему для расширения.

9. Ограничения разделов

В настоящее время поддерживается только один уровень разделов, и максимум 64 раздела (слишком большое количество обновлений глобальных таблиц может привести к резкому ухудшению производительности распределённых транзакций). Рекомендуется использовать 4, 8 или 16 разделов. Двухуровневые разделы не поддерживаются; для автоинкрементных первичных ключей разделов лучше использовать сторонние инструменты, такие как Redis.

10. Правила написания SQL

Поскольку SQL требует полного анализатора, рекомендуется следовать стандартным правилам при написании SQL, связанного с разделением. Перед развёртыванием протестируйте его в тестовой среде. Следуйте следующим рекомендациям:

  1. При выборе столбцов или функций для выражений в операторах SELECT рекомендуется добавлять псевдонимы для улучшения анализа SQL-интерпретатором. Например: «select count(*) rowcnt from ...».
  2. Текст SQL должен быть кратким. Для таблиц с разделением, если есть условия, обязательно добавьте условие sharding key.
  3. Рекомендуется использовать start transaction для управления транзакциями.
  4. Следует избегать использования подзапросов. Если они необходимы, используйте связанные запросы вместо подзапросов.
  5. Операции обновления и удаления должны выполняться с использованием условий sharding key (только для таблиц с разделением).
  6. Не рекомендуется использовать for update. Блокировка накладных расходов значительна. Рекомендуется обрабатывать эту логику в приложении, например, используя распределённую блокировку или выделяя ресурсы Redis.

11. Поддерживаемые функции SQL

Cetus поддерживает большинство функций SQL. Однако есть некоторые ограничения:

Неподдерживаемые функции:

  1. Не поддерживаются COUNT(DISTINCT)/SUM(DISTINCT)/AVG(DISTINCT). Для глобальных таблиц ограничений нет. Для таблиц с разделением рекомендуется выполнять операции отдельно, сначала используя distinct для получения значений со всех узлов, а затем объединяя данные для подсчёта уникальных значений, суммирования или вычисления среднего значения.

  2. Не поддерживается LAST_INSERT_ID. В настоящее время эта функция не используется в производственной среде. Если требуется получить глобально уникальное значение, рекомендуется использовать Redis. Cetus также предоставляет метод select cetus_sequence(), который возвращает случайное 64-битное число.

  3. Не поддерживаются хранимые процедуры и представления.

  4. Не поддерживается выполнение пакетных SQL-операторов.

  5. Не поддерживается команда change user клиента.

  6. Не поддерживаются несколько условий having.

  7. Не поддерживаются подзапросы, содержащие any/all/some. Не поддерживаются подзапросы с any/all/some, например: select dept_no, emp_no from dept_emp where emp_no > any (select emp_no from dept_emp where dept_no='d001'). Если необходимо, можно преобразовать в связанный запрос.

  8. Не поддерживается load data infile.

  9. Не поддерживается синтаксис handler.

  10. Не поддерживается синтаксис lock tables.

  11. При использовании нескольких агрегатных функций не поддерживается having и агрегатные функции между собой.

Ограничения поддерживаемых функций:

  1. Ограничение ORDER BY. Для глобальных таблиц ограничений нет; для таблиц с разделением можно использовать не более 8 столбцов в ORDER BY, и необходимо использовать имена столбцов или псевдонимы. В настоящее время сортировка по полям типа enum не поддерживается.

  2. Ограничение DISTINCT. Для глобальных таблиц ограничений нет; для таблиц с разделением поддерживается только DISTINCT для полей, которые также являются полями ORDER BY. Например, select distinct col1 from tab1 order by col1. Чтобы сделать использование более удобным, Cetus автоматически дополняет ORDER BY для неуказанных полей. Например, для select distinct col1,col2 fromtab1 Cetus преобразует его в select distinct col1,col2 from tab1 order by col1, col2. Но если написать select distinct * from tab1, Cetus вернёт ошибку. Рекомендуется использовать стандартные методы для повышения эффективности.

  3. Ограничение CASE WHEN/IF. Для глобальных таблиц ограничений нет; для таблиц с разделением нельзя использовать в DML-операторах и после GROUP BY, но можно использовать после SELECT или в качестве условия фильтрации.

  4. Ограничение на разбиение на страницы. Из-за поддержки разделения результаты могут быть неточными при большом количестве страниц.

  5. JOIN без поддержки разделения. Таблицы без разделения могут сохранять одну копию каждой таблицы в каждом разделе для повышения успешности JOIN.

  6. Ограничение WHERE. Если в условии WHERE есть столбец раздела, значение не может содержать функции преобразования или арифметические выражения. Оно должно быть исходным значением, иначе результат может быть неточным или может потребоваться полное сканирование таблицы, увеличивая нагрузку на базу данных.

Поддерживаются ограниченные типы подзапросов и операций: подзапросы могут использоваться в качестве условий и источников данных.

  1. Ограничения запросов. При выполнении SQL-запросов следует учитывать следующие ограничения: поддерживается только связь внутри VDB; для таблиц с разделением в условиях запроса можно использовать ключ разделения, но не рекомендуется использовать функции преобразования и арифметические выражения, так как это может серьёзно повлиять на эффективность.

  2. Ограничение PREPARE. Серверная подготовка не поддерживается, но клиентская подготовка может использоваться вместо неё.

  3. Ограничение китайских имён столбцов. Использование китайских имён или псевдонимов столбцов ограничено. Необходимо заключать их в кавычки при использовании.

12. Ограничения обработки транзакций

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

Транзакции без разделения требуют ссылки на ключ раздела в первой инструкции для облегчения маршрутизации и выполнения SQL в Cetus. Одномашинные транзакции рекомендуются для повышения производительности.

Рекомендуется избегать использования SELECT в распределённых транзакциях, так как SELECT блокирует данные, что может привести к низкой производительности.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Cetus.git
git@api.gitlife.ru:oschina-mirror/mirrors-Cetus.git
oschina-mirror
mirrors-Cetus
mirrors-Cetus
master