C.1. Основные вопросы #

C.1.1. Что такое Shardman?
C.1.2. Из чего состоит Shardman?
C.1.3. Когда использовать Shardman?
C.1.4. Когда не рекомендуется использовать Shardman?
C.1.5. Сколько узлов требуется для развёртывания Shardman?
C.1.6. Отказоустойчив ли Shardman?
C.1.7. Как устроено сегментирование?
C.1.8. Можно ли изменить количество секций?
C.1.9. Поддерживает ли Shardman повторное сегментирование?
C.1.10. Можно ли преобразовать несегментированную (локальную) таблицу в сегментированную?
C.1.11. Поддерживает ли Shardman добавление и удаление сегментов?
C.1.12. Каков статус балансировки данных?
C.1.13. Как осуществляется доступ к кластеру Shardman?
C.1.14. Как реализована балансировка между узлами кластера?
C.1.15. Поддерживается ли массовая загрузка данных в Shardman?

C.1.1. Что такое Shardman? #

Shardman — это распределённая система управления базами данных (СУБД) на основе PostgreSQL, реализующая сегментирование. Сегментированием называется принцип проектирования баз данных, при котором строки таблицы хранятся отдельно друг от друга в разных БД, потенциально управляемых разными экземплярами СУБД. Основная задача Shardman — повысить эффективность выполнения запросов к сегментированным распределённым БД и упростить управление ими.

C.1.2. Из чего состоит Shardman? #

Shardman состоит из следующих программных компонентов:

  • СУБД PostgreSQL 14 с набором изменений.

  • Расширение Shardman.

  • Инструменты и службы управления, включая встроенный менеджер stolon для обеспечения отказоустойчивости.

C.1.3. Когда использовать Shardman? #

  • Рабочий объём данных не помещается в оперативную память одного сервера, но может поместиться в память нескольких сегментов (или хотя бы читаться параллельно).

  • Количество сеансов слишком велико для одного экземпляра PostgreSQL.

  • Интенсивно используется запись в WAL.

  • Сложная логика потребляет слишком много ресурсов процессора, и одного сервера недостаточно.

C.1.4. Когда не рекомендуется использовать Shardman? #

  • Если с памятью, сеансом, загрузкой процессора справляется один сервер PostgreSQL — это и быстрее, и проще. (Это относится и к тестированию!).

C.1.5. Сколько узлов требуется для развёртывания Shardman? #

Для развёртывания Shardman требуется как минимум три узла. Для кластера etcd требуется один узел (кластер etcd с одним узлом) и как минимум два узла для кластера РСУБД. Минимальное развёртывание можно сократить до двух узлов, разместив etcd на одном из узлов кластера РСУБД. Минимальное развёртывание описано в разделе Начало работы с Shardman.

C.1.6. Отказоустойчив ли Shardman? #

Да, Shardman отказоустойчив на уровне каждого сегмента. Каждый сегмент представляет собой отказоустойчивый кластер.

C.1.7. Как устроено сегментирование? #

В Shardman таблицы разделены на секции, а секции распределены между сегментами.

C.1.8. Можно ли изменить количество секций? #

Нет, количество секций сегментированных таблиц задаётся при их создании и остаётся неизменным. Если ожидается, что объём имеющихся данных значительно вырастет, следует заранее создать необходимое количество секций (по умолчанию — 20).

C.1.9. Поддерживает ли Shardman повторное сегментирование? #

Нет, в Shardman на данный момент не поддерживается автоматическое изменение ключа сегментирования. Для изменения ключа сегментирования необходимо создать новые таблицы с новым ключом сегментирования и перенести в них данные из старых таблиц.

C.1.10. Можно ли преобразовать несегментированную (локальную) таблицу в сегментированную? #

Нет, в Shardman на данный момент не поддерживается эта функция.

C.1.11. Поддерживает ли Shardman добавление и удаление сегментов? #

Минимальная конфигурация кластера Shardman — один узел без отказоустойчивости, но такая конфигурация не имеет особого смысла. Можно добавлять или удалять сегменты, Shardman будет автоматически (по умолчанию, но это настраивается) перераспределять данные между узлами. Можно добавить в Shardman реплики, чтобы сделать сегменты отказоустойчивыми.

C.1.12. Каков статус балансировки данных? #

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

C.1.13. Как осуществляется доступ к кластеру Shardman? #

К Shardman можно получить доступ через любой узел в кластере, все узлы в кластере равны. Используйте команду shardmanctl getconnstr, чтобы получить строку подключения к кластеру.

C.1.14. Как реализована балансировка между узлами кластера? #

На данный момент нет встроенного решения для балансировки. Но можно организовать балансировку на уровне приложения, например, с помощью параметров драйвера JDBC (loadBalanceHosts). Для libpq эта функция будет реализована в версии PostgreSQL 16.

C.1.15. Поддерживается ли массовая загрузка данных в Shardman? #

Да, этот функционал встроен в утилиту управления — см. shardmanctl load.