#rdbms #guid #sharding
#rdbms #guid #сегментирование
Вопрос:
Учтите, что у меня очень огромная таблица, которую необходимо разделить по кластеру СУБД. Мне нужно определиться с ключом секционирования, по которому нужно сегментировать таблицу. Очевидно, что этот ключ раздела не может быть искусственным ключом (пример: автоматически сгенерированный столбец первичного ключа), поскольку приложению необходимо поддерживать логику определения сегмента, зависящую от естественного ключа из данных запроса. Рассмотрим следующую ситуацию
- Если естественный ключ распределен в системе неравномерно
a) Is it a good idea to even consider this table for sharding ?
- Есть ли способ сгенерировать GUID на основе естественного ключа и равномерно распределить его по кластеру?
- какой может быть эффективный алгоритм для генерации GUID на основе естественного ключа.
Ответ №1:
Если ключ распределен неравномерно, может не иметь никакого значения, разделена таблица или нет. Для выполнения запроса потребуется прочитать почти такое же количество строк. Помните, что разделение не всегда повышает производительность. Чтение между разделами может быть медленнее. Поэтому убедитесь, что вы проанализировали все запросы, прежде чем выбирать ключ раздела.
Я не могу вспомнить ни одной функции, которая могла бы сгенерировать ключ раздела для этого случая. Существуют функции для генерации идентификаторов GUID или MD5 для ваших данных, но результат будет хуже, чем у естественного ключа, который у вас есть. Результаты будут больше соответствовать уникальным значениям. Кроме того, это приведет к снижению производительности, поскольку каждый запрос должен запускать дополнительные логики.
Также, пожалуйста, рассмотрите возможность удаления старых или неиспользуемых данных. Как только это будет сделано, у вас может не возникнуть необходимости в разделении.