#postgresql #citus
#postgresql #citus
Вопрос:
Мы изучаем возможность использования CitusDB. После прочтения всей документации нам неясны некоторые основы. Надеюсь, кто-нибудь может дать несколько указаний.
В Citus вы указываете a shard_count
и a shard_max_size
, эти настройки устанавливаются для координатора в соответствии с документами (но, как ни странно, они также могут быть установлены на узле).
Что происходит, когда вы указываете 1000 сегментов и распространяете 10 таблиц со 100 клиентами?
-
Создает ли он сегмент для каждой таблицы (users_1, users_2, shops_1 и т. Д.) (Так эффективно используя все 1000 сегментов.
-
Если вы хотите расширить число клиентов еще на 100, мы уже достигли предела в 1000, как разделяются эти таблицы?
-
Значение
shard_max_size
по умолчанию равно 1 ГБ. Если сегмент> 1 ГБ, создается новый сегмент, но что происходит, когда shard_count уже достигнут? -
Наконец, целесообразно ли использовать 3000 осколков? Мы читаем в документах, что 128 рекомендуется для saas. Но это мало, если у вас 100 клиентов * 10 таблиц. (Я знаю, что это зависит … но ..)
Ответ №1:
Бывший сотрудник Citus / нынешний сотрудник Microsoft здесь, присоединяюсь к некоторым советам.
Сегменты Citus основаны на целочисленных диапазонах хэшей ключа распространения. Когда вставляется строка, значение ключа распространения хэшируется, планировщик просматривает, какому сегменту был присвоен диапазон хэш-значений, в который попадает этот ключ, затем просматривает, на каком работнике находится сегмент, а затем запускает вставку для этого работника. Это означает, что клиенты распределяются по сегментам примерно равномерно, и когда вы добавляете нового клиента, он просто переходит в существующий сегмент.
Крайне важно, чтобы все распределенные таблицы, которые вы хотите объединить друг с другом, имели одинаковое количество сегментов и чтобы их столбцы распределения имели одинаковый тип. Это позволяет нам выполнять объединения полностью на рабочих, что повышает производительность.
Если у вас очень большой клиент (в 100 раз больше данных, чем у вашего среднего клиента, — это достойная эвристика), я бы заранее использовал функции изоляции арендаторов, чтобы предоставить им собственный сегмент. Это значительно упростит их перенос на выделенное оборудование, если вы решите сделать это в будущем.
Этот shard_max_size
параметр не влияет на таблицы с распределенным хэшем. Сегменты будут расти без ограничений по мере того, как вы продолжаете вставлять данные, а таблицы с распределением хэшей никогда не увеличат количество сегментов при обычных операциях. Этот параметр применяется только к дистрибутиву append, который в наши дни используется довольно редко (я могу вспомнить одну или две компании, использующие его, но это все).
Я бы настоятельно не советовал менять citus.значение shard_count равно 3000 для описанного вами варианта использования. 64 или 128, вероятно, верны, и я бы рассмотрел 256, если вы просматриваете> 100 ТБ данных. Это прекрасно, если в итоге у вас будут тысячи распределенных таблиц, и каждая из них будет иметь 128 сегментов, но лучше поддерживать разумное количество сегментов на таблицу.
Комментарии:
1. Удивительный подробный ответ! Для получения дополнительной информации есть также канал slack: slack.citusdata.com