Используй MongoDB time series collections — специализированные коллекции, разработанные специально для данных с временными метками. При создании коллекции всегда определяй:
timeField — поле, где хранится временная меткаmetaField — поле, которое идентифицирует источник данных (например, ID датчика)db.createCollection("sensorReadings", {
timeseries: {
timeField: "timestamp",
metaField: "sensorId",
granularity: "seconds"
}
})
MongoDB автоматически применяет группировку в бакеты и сжатие к time series коллекциям, объединяя документы по временным окнам. Это значительно снижает затраты на хранение и улучшает производительность запросов по сравнению с хранением каждого показания как отдельного документа.
Установи параметр granularity в соответствии с частотой поступления данных ("seconds", "minutes" или "hours") — это напрямую влияет на эффективность группировки данных в бакеты.
Используй TTL (Time-To-Live) индексы для автоматического удаления данных старше заданного порога — это избавляет от необходимости писать задачи очистки вручную:
expireAfterSeconds: 2592000 // 30 дней
Это поддерживает датасет в чистоте и предотвращает неограниченный рост хранилища — критично для IoT-нагрузок с высокой частотой записи.
Для крупных развёртываний:
metaField (например, ID датчика), чтобы равномерно распределить данные по узламtimeField — это позволяет использовать встроенные внутренние индексыСочетание нативных time series collections, TTL-политик хранения и шардирования по metaField даёт эффективную, масштабируемую и практически не требующую обслуживания архитектуру для IoT-данных с датчиков в MongoDB.
Коллекции временных рядов MongoDB автоматически применяют bucketing и сжатие, что уменьшает затраты на хранение по сравнению с сохранением отдельных показаний датчиков в виде отдельных документов.
Новый — ещё не проверен сообществом
Вы