Требуется лучший способ или оптимизированный запрос для получения статусов каждого уровня.
мы пытаемся получить данные агрегации состояния устройств IoT из огромного объема, хранящегося в ES.Данные в хранилище будут выглядеть следующим образом:
{
"deviceType":"temperature",
"deviceName":"sensor1",
"serviceName":"HomeService",
"serviceCatagory":"Home Automation",
"warning":true,
"communicationType":"http",
"createdDate":"",
"location":"",
"poc":"",
"aPoc":""
}
, и поля будут добавлены в соответствии с типом устройства.для каждого статуса документ будет вставлен в БД.
Используя эти данные, мы применяем к нему запрос агрегации, чтобы найти счетчик каждого статуса для каждого типа устройства, имени устройства или serviceName или serviceCategory или местоположения и т. д.
Пример запроса агрегации, к которому мы обращаемся к БД:
{
"size": 0,
"aggs": {
"hour_value": {
"date_histogram": {
"field": "date",
"interval": "hour"
},
"aggs": {
"devicetype": {
"terms": {
"field": "deviceType",
"size": 1000
},
"aggs": {
"terms": {
"field": "deviceName",
"size": 1000
},
"aggs": {
"terms": {
"field": "serviceName",
"size": 1000
},
"aggs": {
"terms": {
"field": "serviceCatogery",
"size": 1000
},
"aggs": {
"terms": {
"field": "location",
"size": 1000
},
"aggs": {
"warning_count": {
"value_count": {
"field": "warning"
}
},
"trip_count": {
"value_count": {
"field": "trip"
}
},
"running_count": {
"value_count": {
"field": "running"
}
},
"stopped_count": {
"value_count": {
"field": "stopped"
}
},
"offline_count": {
"value_count": {
"field": "offline"
}
}
}
}
}
}
}
}
}
}
}
}
Размер, указанный в запросе, будет еще больше в течение нескольких дней.
Но приведенный выше запросслишком много времени (почти 15 минут и некоторое время зависало), чтобы получить данные из БД.Объем, который мы собираем, составляет почти 12 ГБ в час, и мы пытаемся выполнить этот запрос каждый час.
Любая помощь с идеей или запросом будет слишком полезной.