Добавить результаты тестирования
Some checks failed
Unit tests / test (push) Failing after 3m39s

This commit is contained in:
Roman Efremov 2024-12-26 16:53:52 +05:00
parent ff95cad258
commit f06eda826b
4 changed files with 49 additions and 27 deletions

View File

@ -1,12 +0,0 @@
using Microsoft.EntityFrameworkCore;
using DD.Persistence.Database;
using DD.Persistence.Database.Entity;
namespace Persistence.Benchmark.Database;
public class BenchmarkDbContext : PersistenceDbContext
{
public DbSet<ParameterData> ParameterData => Set<ParameterData>();
public BenchmarkDbContext(DbContextOptions options) : base(options)
{
}
}

View File

@ -0,0 +1,28 @@
# Тестирование скорости работы с данными Wits
Данный проект предназначен для замеров времени сохранения / получения данных с параметром и отметкой времени. Осуществляется сравнение скорости работы стандартных таблиц и гипертаблиц (timescale), а также сохранения параметра в формате string и jsonb, составного ключа и int ключа.
## Партиционирование (timescale) | Формат параметра - Jsonb | Составной ПК
|Кол-во|Сохранение|Вычитка|
|-|--------|---|
|1.000.000|55 сек.|6.83 сек.|
|2.000.000|1 мин. 57 сек.|11 сек.|
|5.000.000|4 мин. 11 сек.|35 сек.|
|10.000.000|8 мин. 20 сек.|58 сек.|
|80.000.000|>100 мин.|20 мин. 3 сек.|
## Без партиционирования | Формат параметра - String | Составной ПК
|Кол-во|Сохранение|Вычитка|
|-|--------|---|
|1.000.000|40 сек.|26 сек.|
|2.000.000|1 мин. 26 сек.|48 сек.|
|5.000.000|3 мин. 5 сек.|2 мин. 28 сек.|
|10.000.000|8 мин. 42 сек.|4 мин. 49 сек.|
## Без партиционирования | Формат параметра - String | Int ПК
|Кол-во|Сохранение|Вычитка|
|-|--------|---|
|1.000.000|42 сек.|21 сек.|
|2.000.000|1 мин. 22 сек.|51 сек.|
|5.000.000|3 мин. 19 сек.|2 мин. 23 сек.|
|10.000.000|8 мин. 31 сек.|4 мин. 55 сек.|

View File

@ -22,25 +22,25 @@ public static class WitsDataBenchmark
var client = persistenceClientFactory.GetWitsDataClient(); var client = persistenceClientFactory.GetWitsDataClient();
var source = new CancellationTokenSource(TimeSpan.FromSeconds(6000)); var source = new CancellationTokenSource(TimeSpan.FromSeconds(6000));
//var data = GenerateData(count); var data = GenerateData(count);
var sw = new Stopwatch(); var sw = new Stopwatch();
//var saved = 0; var saved = 0;
//foreach (var item in data) foreach (var item in data)
//{ {
// var time = sw.Elapsed; var time = sw.Elapsed;
// sw.Start(); sw.Start();
// var response = await client.AddRange(item, source.Token); var response = await client.AddRange(item, source.Token);
// sw.Stop(); sw.Stop();
// saved = saved + response; saved = saved + response;
// Console.WriteLine($"Сохранено: {saved.ToString()}"); Console.WriteLine($"Сохранено: {saved.ToString()}");
//} }
//Console.WriteLine($"Затрачено времени на сохранение: {sw.Elapsed}"); Console.WriteLine($"Затрачено времени на сохранение: {sw.Elapsed}");
var discriminator = Guid.Parse(discriminatorId); var discriminator = Guid.Parse(discriminatorId);
var date = DateTime.Now.AddDays(-31); var date = DateTime.Now.AddDays(-365);
Console.WriteLine($"\nВычитка..."); Console.WriteLine($"\nВычитка...");
@ -49,7 +49,7 @@ public static class WitsDataBenchmark
var get = await client.GetPart(discriminator, date, count, source.Token); var get = await client.GetPart(discriminator, date, count, source.Token);
sw.Stop(); sw.Stop();
Console.WriteLine($"Затрачено времени на вычитку: {sw.Elapsed}"); Console.WriteLine($"Затрачено времени на вычитку {get.SelectMany(e => e.Values).Count()} записей: {sw.Elapsed}");
} }
catch (Exception ex) { catch (Exception ex) {
@ -61,6 +61,8 @@ public static class WitsDataBenchmark
{ {
var result = new List<List<WitsDataDto>>(); var result = new List<List<WitsDataDto>>();
var time = DateTimeOffset.UtcNow;
var seconds = -1;
int enumerableCount = countToCreate / chunkSize + (countToCreate % chunkSize == 0 ? 0 : 1); int enumerableCount = countToCreate / chunkSize + (countToCreate % chunkSize == 0 ? 0 : 1);
for (var k = 0; k < enumerableCount; k++) for (var k = 0; k < enumerableCount; k++)
{ {
@ -71,7 +73,8 @@ public static class WitsDataBenchmark
{ {
var random = new Random(); var random = new Random();
var timestamped = DateTimeOffset.UtcNow.AddSeconds(random.Next(1, 60 * 60 * 24 * 30) * -1); var timestamped = time.AddSeconds(seconds);
seconds = seconds - 1;
dtos.Add(new WitsDataDto() dtos.Add(new WitsDataDto()
{ {

View File

@ -142,6 +142,9 @@ namespace DD.Persistence.Database.Postgres.Migrations
name: "IX_tech_message_SystemId", name: "IX_tech_message_SystemId",
table: "tech_message", table: "tech_message",
column: "SystemId"); column: "SystemId");
migrationBuilder.Sql
("SELECT create_hypertable('parameter_data','Timestamp','ParameterId',2,chunk_time_interval => INTERVAL '5 day');");
} }
/// <inheritdoc /> /// <inheritdoc />