Продолжая развивать наш проект
https://spyserp.com/ru/ появилась интересная задача
Входные данные:
- 150 млн уникальных строк длинной от 1 до 2048 символов(в данном примере ссылки, но могут быть любые бинарные строки)
- ежедневный прирост по 1 млн, ожидаемый прирост в диапозоне 5-10 млрд
- сейчас хранится в PostgreSQL, в формате id(primary key), link bytea(btree index),
занимает 22 гб и индекс 32 гб
Задача:
- подобрать более оптимальное хранилище, уменьшить физический размер индекса, улучшить производительность
Из требований к новой базе:
- желательно максимальное заточенное и оптимизированное хранилище под такой тип данных(уникальная строка + ее id)
- быстрый поиск как по ключу(ссылке) так и получение ссылки по ее id
- возможность горизонтального масштабирования
- дисковое хранилище(понятно что для наилучшей производительности лучше все положить в память, но на данный момент этот вариант не рассматривается)
Из того что пробовалось:
- все key/value хранилища(leveldb, rocksdb и т.д.) - нет поиска по value(в данном случае key - ссылка, value это id)
- был активный период гугления, но к сожалению подходящего решения так и не было найдено
Обсудим? Очень хочется услышать мнение тех кто сталкивался с подобной задачей и как ее решали