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.2. Из чего состоит 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.