How to: масштабировать до миллиарда документов в Symfony
Цены на бензин меняются по несколько раз в день. В итоге получается адский датасет: десятки гигабайт CSV и сотни тысяч записей цен за сутки. Если грузить это «как в SQL» (по документу на каждую цену), MongoDB быстро превращается в кладбище индексов и медленных агрегаций.
Как делают по-взрослому: сначала разбираем структуру данных (станции отдельно, цены отдельно), потом проектируем схему под запросы. Главный трюк — bucket pattern: складывать цены не по одной записи, а «ведрами» по станция + тип топлива + день, внутри хранить массив цен за день. Так документов становится в разы меньше, а дневные графики и «последнюю цену» можно доставать быстро.
Дальше — импорт не через «всё в память», а по дням: читаем CSV → временная коллекция → агрегация в bucket-документы → добавляем экстремумы (min/max) и предагрегаты (средние) → подтягиваем данные станции и денормализуем только то, что реально нужно.
👉 Читать статью
Post #6290
2.19K

- 🌚 1