Я пишу azure функцию, где я получаю данные из Azure StreamAnalytics и отправляю их в реляционную базу данных. После нескольких месяцев тестирования этой функции рост базы данных был безумным. Я пишу 300 000 строк данных каждый день, и это только из 1 источника данных. Теперь я хочу агрегировать данные, которые я получаю за минуту, и получить среднее значение этой минуты. После исследования того, как собрать json данных, я не смог найти статью, которая могла бы мне помочь.
Я создал собственный класс Machine, в котором у меня есть пара функций, чтобы я мог хранить данные. Я уже могу хранить данные в миллисекундах, которые я сейчас хочу сохранить в минутных данных.
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req,
ILogger log)
{
NpgsqlConnectionStringBuilder builder = new NpgsqlConnectionStringBuilder
{
Host = "test",
Username = "test",
Password = "test",
Database = "test",
};
using (NpgsqlConnection connection = new NpgsqlConnection(builder.ConnectionString))
{
connection.Open();
if (connection != null && connection.State == ConnectionState.Open)
{
string content = await req.Content.ReadAsStringAsync();
dynamic result = JsonConvert.DeserializeObject(content);
foreach (var data in result)
{
Machine machine = new Machine
{
Id = data.data.sID,
Path = data.data.sXPath,
Type = data.data.sType,
MeasurementTimestamp = data.data.dtTimeStamp,
};
foreach (JProperty items in data.data.items)
{
string[] split = Regex.Split(items.Name, @"(?<!^)(?=[A-Z])");
string dataType = machine.GetDataType(split[0]);
string measurementValue = (string)items.Value;
if (!machine.MeasurementTypeExists(items.Name, dataType, connection))
{
machine.AddMeasurementType(items.Name, dataType, connection);
}
int typeId = machine.GetTypeID(machine.Type, connection);
if(machine.MachineExists(machine.Id, connection) && machine.MeasurementTypeExists(items.Name, dataType, connection) && machine.PointOfMeasurementExists(machine.Id, typeId, machine.Path, connection))
{
int measurementTypeId = machine.GetMeasurementTypeID(items.Name, dataType, connection);
int pointOfMeasurementId = machine.GetPointOfMeasurementID(machine.Path, machine.Id, typeId, connection);
// Miliseconds
machine.AddMeasurementMs(measurementValue, machine.MeasurementTimestamp, machine.Id, measurementTypeId, pointOfMeasurementId, connection);
// Minutes
machine.AddMeasurementMin(measurementValue, machine.MeasurementTimestamp, machine.Id, measurementTypeId, pointOfMeasurementId, connection);
}
}
}
}
}
return req.CreateResponse(HttpStatusCode.OK, "Executed");
}
}
Как я могу агрегировать данные json для хранения среднего значения минуты, используя мою функцию AddMeasurementMin? Любой пу sh в правильном направлении мне поможет.