Добавить партиционирование
Some checks failed
Unit tests / test (push) Failing after 1m1s

This commit is contained in:
Roman Efremov 2024-12-25 17:49:05 +05:00
parent 50c535de5e
commit ff95cad258
13 changed files with 66 additions and 58 deletions

View File

@ -1,10 +1,10 @@
{ {
"DbConnection": { "DbConnection": {
"Host": "postgres", "Host": "localhost",
"Port": 5432, "Port": 5432,
"Database": "persistence", "Database": "persistence",
"Username": "postgres", "Username": "postgres",
"Password": "postgres" "Password": "q"
}, },
"NeedUseKeyCloak": false, "NeedUseKeyCloak": false,
"AuthUser": { "AuthUser": {

View File

@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0" />
<PackageReference Include="System.Drawing.Common" Version="9.0.0" /> <PackageReference Include="System.Drawing.Common" Version="9.0.0" />
<PackageReference Include="xunit.extensibility.core" Version="2.9.2" /> <PackageReference Include="xunit.extensibility.core" Version="2.9.2" />
</ItemGroup> </ItemGroup>

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(-1); var date = DateTime.Now.AddDays(-31);
Console.WriteLine($"\nВычитка..."); Console.WriteLine($"\nВычитка...");
@ -71,7 +71,7 @@ public static class WitsDataBenchmark
{ {
var random = new Random(); var random = new Random();
var timestamped = DateTimeOffset.UtcNow.AddSeconds(random.Next(1, 60 * 60 * 24) * -1); var timestamped = DateTimeOffset.UtcNow.AddSeconds(random.Next(1, 60 * 60 * 24 * 30) * -1);
dtos.Add(new WitsDataDto() dtos.Add(new WitsDataDto()
{ {

View File

@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace DD.Persistence.Database.Postgres.Migrations namespace DD.Persistence.Database.Postgres.Migrations
{ {
[DbContext(typeof(PersistencePostgresContext))] [DbContext(typeof(PersistencePostgresContext))]
[Migration("20241225094516_Init")] [Migration("20241225122815_Init")]
partial class Init partial class Init
{ {
/// <inheritdoc /> /// <inheritdoc />
@ -43,7 +43,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("SystemId"); b.HasKey("SystemId");
b.ToTable("DataSourceSystem"); b.ToTable("data_source_system");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b => modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b =>
@ -67,7 +67,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("DiscriminatorId", "ParameterId", "Timestamp"); b.HasKey("DiscriminatorId", "ParameterId", "Timestamp");
b.ToTable("ParameterData"); b.ToTable("parameter_data");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
@ -102,7 +102,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasIndex("SystemId"); b.HasIndex("SystemId");
b.ToTable("TechMessage"); b.ToTable("tech_message");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedSet", b => modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedSet", b =>
@ -122,7 +122,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("IdDiscriminator", "Timestamp"); b.HasKey("IdDiscriminator", "Timestamp");
b.ToTable("TimestampedSets", t => b.ToTable("timestamped_set", t =>
{ {
t.HasComment("Общая таблица данных временных рядов"); t.HasComment("Общая таблица данных временных рядов");
}); });
@ -178,7 +178,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("ChangeLog"); b.ToTable("change_log");
}); });
modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b => modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b =>
@ -261,7 +261,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("Date"); b.HasKey("Date");
b.ToTable("DataSaub"); b.ToTable("data_saub");
}); });
modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b => modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b =>
@ -285,7 +285,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("Key", "Created"); b.HasKey("Key", "Created");
b.ToTable("Setpoint"); b.ToTable("setpoint");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>

View File

@ -12,7 +12,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
protected override void Up(MigrationBuilder migrationBuilder) protected override void Up(MigrationBuilder migrationBuilder)
{ {
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "ChangeLog", name: "change_log",
columns: table => new columns: table => new
{ {
Id = table.Column<Guid>(type: "uuid", nullable: false, comment: "Ключ записи"), Id = table.Column<Guid>(type: "uuid", nullable: false, comment: "Ключ записи"),
@ -29,11 +29,11 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_ChangeLog", x => x.Id); table.PrimaryKey("PK_change_log", x => x.Id);
}); });
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "DataSaub", name: "data_saub",
columns: table => new columns: table => new
{ {
date = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false), date = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false),
@ -58,11 +58,11 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_DataSaub", x => x.date); table.PrimaryKey("PK_data_saub", x => x.date);
}); });
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "DataSourceSystem", name: "data_source_system",
columns: table => new columns: table => new
{ {
SystemId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Id системы - источника данных"), SystemId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Id системы - источника данных"),
@ -71,11 +71,11 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_DataSourceSystem", x => x.SystemId); table.PrimaryKey("PK_data_source_system", x => x.SystemId);
}); });
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "ParameterData", name: "parameter_data",
columns: table => new columns: table => new
{ {
DiscriminatorId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Дискриминатор системы"), DiscriminatorId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Дискриминатор системы"),
@ -85,11 +85,11 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_ParameterData", x => new { x.DiscriminatorId, x.ParameterId, x.Timestamp }); table.PrimaryKey("PK_parameter_data", x => new { x.DiscriminatorId, x.ParameterId, x.Timestamp });
}); });
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "Setpoint", name: "setpoint",
columns: table => new columns: table => new
{ {
Key = table.Column<Guid>(type: "uuid", nullable: false, comment: "Ключ"), Key = table.Column<Guid>(type: "uuid", nullable: false, comment: "Ключ"),
@ -99,11 +99,11 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_Setpoint", x => new { x.Key, x.Created }); table.PrimaryKey("PK_setpoint", x => new { x.Key, x.Created });
}); });
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "TimestampedSets", name: "timestamped_set",
columns: table => new columns: table => new
{ {
IdDiscriminator = table.Column<Guid>(type: "uuid", nullable: false, comment: "Дискриминатор ссылка на тип сохраняемых данных"), IdDiscriminator = table.Column<Guid>(type: "uuid", nullable: false, comment: "Дискриминатор ссылка на тип сохраняемых данных"),
@ -112,12 +112,12 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_TimestampedSets", x => new { x.IdDiscriminator, x.Timestamp }); table.PrimaryKey("PK_timestamped_set", x => new { x.IdDiscriminator, x.Timestamp });
}, },
comment: "Общая таблица данных временных рядов"); comment: "Общая таблица данных временных рядов");
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "TechMessage", name: "tech_message",
columns: table => new columns: table => new
{ {
EventId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Id события"), EventId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Id события"),
@ -129,18 +129,18 @@ namespace DD.Persistence.Database.Postgres.Migrations
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_TechMessage", x => x.EventId); table.PrimaryKey("PK_tech_message", x => x.EventId);
table.ForeignKey( table.ForeignKey(
name: "FK_TechMessage_DataSourceSystem_SystemId", name: "FK_tech_message_data_source_system_SystemId",
column: x => x.SystemId, column: x => x.SystemId,
principalTable: "DataSourceSystem", principalTable: "data_source_system",
principalColumn: "SystemId", principalColumn: "SystemId",
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
}); });
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_TechMessage_SystemId", name: "IX_tech_message_SystemId",
table: "TechMessage", table: "tech_message",
column: "SystemId"); column: "SystemId");
} }
@ -148,25 +148,25 @@ namespace DD.Persistence.Database.Postgres.Migrations
protected override void Down(MigrationBuilder migrationBuilder) protected override void Down(MigrationBuilder migrationBuilder)
{ {
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "ChangeLog"); name: "change_log");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "DataSaub"); name: "data_saub");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "ParameterData"); name: "parameter_data");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "Setpoint"); name: "setpoint");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "TechMessage"); name: "tech_message");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "TimestampedSets"); name: "timestamped_set");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "DataSourceSystem"); name: "data_source_system");
} }
} }
} }

View File

@ -40,7 +40,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("SystemId"); b.HasKey("SystemId");
b.ToTable("DataSourceSystem"); b.ToTable("data_source_system");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b => modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b =>
@ -64,7 +64,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("DiscriminatorId", "ParameterId", "Timestamp"); b.HasKey("DiscriminatorId", "ParameterId", "Timestamp");
b.ToTable("ParameterData"); b.ToTable("parameter_data");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
@ -99,7 +99,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasIndex("SystemId"); b.HasIndex("SystemId");
b.ToTable("TechMessage"); b.ToTable("tech_message");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedSet", b => modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedSet", b =>
@ -119,7 +119,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("IdDiscriminator", "Timestamp"); b.HasKey("IdDiscriminator", "Timestamp");
b.ToTable("TimestampedSets", t => b.ToTable("timestamped_set", t =>
{ {
t.HasComment("Общая таблица данных временных рядов"); t.HasComment("Общая таблица данных временных рядов");
}); });
@ -175,7 +175,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("ChangeLog"); b.ToTable("change_log");
}); });
modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b => modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b =>
@ -258,7 +258,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("Date"); b.HasKey("Date");
b.ToTable("DataSaub"); b.ToTable("data_saub");
}); });
modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b => modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b =>
@ -282,7 +282,7 @@ namespace DD.Persistence.Database.Postgres.Migrations
b.HasKey("Key", "Created"); b.HasKey("Key", "Created");
b.ToTable("Setpoint"); b.ToTable("setpoint");
}); });
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>

View File

@ -9,6 +9,7 @@ namespace DD.Persistence.Database.Model;
/// <summary> /// <summary>
/// Часть записи, описывающая изменение /// Часть записи, описывающая изменение
/// </summary> /// </summary>
[Table("change_log")]
public class ChangeLog : IChangeLog, IWithSectionPart public class ChangeLog : IChangeLog, IWithSectionPart
{ {
[Key, Comment("Ключ записи")] [Key, Comment("Ключ записи")]

View File

@ -2,6 +2,8 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
namespace DD.Persistence.Database.Model; namespace DD.Persistence.Database.Model;
[Table("data_saub")]
public class DataSaub : ITimestampedData public class DataSaub : ITimestampedData
{ {
[Key, Column("date")] [Key, Column("date")]

View File

@ -3,6 +3,8 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
namespace DD.Persistence.Database.Entity; namespace DD.Persistence.Database.Entity;
[Table("data_source_system")]
public class DataSourceSystem public class DataSourceSystem
{ {
[Key, Comment("Id системы - источника данных")] [Key, Comment("Id системы - источника данных")]

View File

@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace DD.Persistence.Database.Entity; namespace DD.Persistence.Database.Entity;
[Table("ParameterData")] [Table("parameter_data")]
[PrimaryKey(nameof(DiscriminatorId), nameof(ParameterId), nameof(Timestamp))] [PrimaryKey(nameof(DiscriminatorId), nameof(ParameterId), nameof(Timestamp))]
public class ParameterData public class ParameterData
{ {

View File

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace DD.Persistence.Database.Model namespace DD.Persistence.Database.Model
{ {
[Table("setpoint")]
[PrimaryKey(nameof(Key), nameof(Created))] [PrimaryKey(nameof(Key), nameof(Created))]
public class Setpoint public class Setpoint
{ {

View File

@ -4,6 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace DD.Persistence.Database.Entity namespace DD.Persistence.Database.Entity
{ {
[Table("tech_message")]
public class TechMessage public class TechMessage
{ {
[Key, Comment("Id события")] [Key, Comment("Id события")]

View File

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace DD.Persistence.Database.Entity; namespace DD.Persistence.Database.Entity;
[Table("timestamped_set")]
[Comment("Общая таблица данных временных рядов")] [Comment("Общая таблица данных временных рядов")]
[PrimaryKey(nameof(IdDiscriminator), nameof(Timestamp))] [PrimaryKey(nameof(IdDiscriminator), nameof(Timestamp))]
public record TimestampedSet( public record TimestampedSet(