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 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()
|
||||||
{
|
{
|
||||||
|
@ -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 />
|
||||||
|
Loading…
Reference in New Issue
Block a user