This commit is contained in:
parent
ff95cad258
commit
f06eda826b
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
28
DD.Persistence.Benchmark/Results.md
Normal file
28
DD.Persistence.Benchmark/Results.md
Normal 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 сек.|
|
@ -22,25 +22,25 @@ public static class WitsDataBenchmark
|
||||
var client = persistenceClientFactory.GetWitsDataClient();
|
||||
|
||||
var source = new CancellationTokenSource(TimeSpan.FromSeconds(6000));
|
||||
//var data = GenerateData(count);
|
||||
var data = GenerateData(count);
|
||||
|
||||
var sw = new Stopwatch();
|
||||
//var saved = 0;
|
||||
//foreach (var item in data)
|
||||
//{
|
||||
// var time = sw.Elapsed;
|
||||
var saved = 0;
|
||||
foreach (var item in data)
|
||||
{
|
||||
var time = sw.Elapsed;
|
||||
|
||||
// sw.Start();
|
||||
// var response = await client.AddRange(item, source.Token);
|
||||
// sw.Stop();
|
||||
// saved = saved + response;
|
||||
// Console.WriteLine($"Сохранено: {saved.ToString()}");
|
||||
//}
|
||||
sw.Start();
|
||||
var response = await client.AddRange(item, source.Token);
|
||||
sw.Stop();
|
||||
saved = saved + response;
|
||||
Console.WriteLine($"Сохранено: {saved.ToString()}");
|
||||
}
|
||||
|
||||
//Console.WriteLine($"Затрачено времени на сохранение: {sw.Elapsed}");
|
||||
Console.WriteLine($"Затрачено времени на сохранение: {sw.Elapsed}");
|
||||
|
||||
var discriminator = Guid.Parse(discriminatorId);
|
||||
var date = DateTime.Now.AddDays(-31);
|
||||
var date = DateTime.Now.AddDays(-365);
|
||||
|
||||
Console.WriteLine($"\nВычитка...");
|
||||
|
||||
@ -49,7 +49,7 @@ public static class WitsDataBenchmark
|
||||
var get = await client.GetPart(discriminator, date, count, source.Token);
|
||||
sw.Stop();
|
||||
|
||||
Console.WriteLine($"Затрачено времени на вычитку: {sw.Elapsed}");
|
||||
Console.WriteLine($"Затрачено времени на вычитку {get.SelectMany(e => e.Values).Count()} записей: {sw.Elapsed}");
|
||||
|
||||
}
|
||||
catch (Exception ex) {
|
||||
@ -61,6 +61,8 @@ public static class WitsDataBenchmark
|
||||
{
|
||||
var result = new List<List<WitsDataDto>>();
|
||||
|
||||
var time = DateTimeOffset.UtcNow;
|
||||
var seconds = -1;
|
||||
int enumerableCount = countToCreate / chunkSize + (countToCreate % chunkSize == 0 ? 0 : 1);
|
||||
for (var k = 0; k < enumerableCount; k++)
|
||||
{
|
||||
@ -71,7 +73,8 @@ public static class WitsDataBenchmark
|
||||
{
|
||||
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()
|
||||
{
|
||||
|
@ -142,6 +142,9 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
name: "IX_tech_message_SystemId",
|
||||
table: "tech_message",
|
||||
column: "SystemId");
|
||||
|
||||
migrationBuilder.Sql
|
||||
("SELECT create_hypertable('parameter_data','Timestamp','ParameterId',2,chunk_time_interval => INTERVAL '5 day');");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
Loading…
Reference in New Issue
Block a user