Это запрос общей рекомендации о том, как организовать хранение данных в моем случае.
Я разрабатываю приложение Spring Boot в Java для сбора и сохранения измерений и предоставить доступ к сохраненным данным через REST API. Я ожидаю около 10 миллионов измерений в час, и мне нужно хранить историю за последние 2-3 месяца. Общее количество сохраненных измерений может достигать десятков миллиардов. Модель данных не сложна, будет около десяти таблиц. Редактирование не планируется, только очистка устаревших данных и очистка. Я планирую использовать Postgres в качестве СУБД.
Будучи сохраненными, данные можно извлекать как таковые (с использованием временных или пространственных фильтров) или использовать для создания агрегированных продуктов данных. Несмотря на настройку производительности, использование индексов и оптимизацию запросов, поиск данных может занять значительное время, но это для исследовательских целей, и я понимаю цену такого количества записей. До этого момента все ясно.
С другой стороны, самые последние измерения (например, собранные за последние десять минут) должны быть доступны немедленно. Ну как можно быстрее. Эти данные должны обслуживаться REST API и отображаться во внешнем приложении в виде графиков, обновляемых в режиме реального времени. Очевидно, что для извлечения данных последних минут из таблицы с миллиардами записей потребуется время, которое неприемлемо для представления.
Что может быть типичным решением для такой ситуации?
Пока я пришел Идея использования двух источников данных: Postgres для истории и в памяти H2 для хранения последних данных, готовых для обслуживания. Таким образом, у меня будет небольшая БД, дублирующая последние данные в памяти. При таком подходе я ожидаю повторного использования моих запросов и классов сущностей. Кажется ли это нормально?