шардов. Всё это работает на 3 серверах по схеме, предполагающей бесперебойную работу при выходе из строя одного из серверов.
В базе лежат данные за несколько лет. Их количество, разумеется, постоянно увеличивается. Наиболее важны более-менее свежие данные, за последние 1-2 года. Более старые данные хоть и нужны, но их актуальность сильно ниже.
Существует ли возможность таким образом построить архитектуру кластера, чтобы задействовать в нём несколько серверов с разной скоростью (стоимостью) дисков, чтобы актуальные данные лежали на серверах с быстрыми дисками, а менее актуальные "уходили" на более дешёвые сервера?
Если это реализуемо, то можно ли это сделать на существующей рабочей БД, сделав к ней условную "пристройку" из более дешёвых серверов для архива, либо потребуется для этих целей создать кластер "с нуля"?
Пока даже не понимаю, в какую сторону искать, и реализуемо ли это. Может, кто-то сталкивался с такой задачей и может рассказать, или подскажете, где почитать об этом.
В одном из проектов реализовано хранение холодных данных в кластере КХ и горячих данных в кластере Redis. Не нашли на лету горячие при запросе - идем в холодные. В рамках КХ можно использовать storage с разными весами и на этом построить логику как вариант.
Не очень понимаю, как на данных, лежащих в Redis строить расчёты, предполагающие JOIN и runningDifference (у нас это очень много используется) по разным критериям. Идея с весами не даёт ответа на вопрос, как автоматически помещать старые данные в сервера с низкими весами 🙁 Пока пришла идея хранить всё в условно "медленном" кластере, а на быстрых дисках создать материализованные view с порогом актуальности данных по времени события и в приложении при построении запросов учитывать этот порог: если данные нужны "за порогом" (новые + старые или только старые) запрашивать их из кластера, из распределённой таблицы. Если же требуются свежие данные, то запрашивать их из view. Но ни разу с таким не работал, это пока на уровне догадок и предположений.
Предагрегация по типовым запросам решает конкретно в этом проекте, а в остальном готового решения наврядли найдете, это большая работа по архитектуре
А view может решить эту задачу?
Как вы это представляете ? Я не очень вижу как
Ну, примерно как описал выше в сообщении: создаём view из распределённой таблицы с критерием, что в этом представлении данные не старше min_event_timestamp. Дальше уже это представление реализует логику актуальности данных, а приложение запрашивает данные из этого представления. Может, я как-то неправильно себе механизм представляю?
Обсуждают сегодня