Sobes.tech
Back to questions
Senior
4

Как вы делали шардирование в PostgreSQL? Какой алгоритм хеширования использовали?

Companies where asked
РамблерРамблер

Answer from AI

sobes.tech AI

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

Для шардирования на уровне приложения я использовал хеш-функцию для распределения данных по разным базам или таблицам. Чаще всего применялся алгоритм consistent hashing или простое хеширование по ключу (например, по user_id) с использованием стандартных хеш-функций, таких как MurmurHash или CRC32.

Пример простого хеширования для выбора шарда:

func getShard(key string, shardCount int) int {
    h := fnv.New32a()
    h.Write([]byte(key))
    return int(h.Sum32()) % shardCount
}

Это позволяет равномерно распределять записи по шардовому пространству и легко масштабировать систему, добавляя новые шарды.