YY.EventLogExportAssistant.Core

Core library for exprorting 1C:Enterprise 8.x platform's event log files to other storage


Keywords
event, log, 1C, enterprise, export
License
MIT
Install
Install-Package YY.EventLogExportAssistant.Core -Version 1.0.0.45

Documentation

ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ экспорта ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации

Nuget-ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ вСрсия ОписаниС
YY.EventLogExportAssistant.Core NuGet version Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚
YY.EventLogExportAssistant.SQLServer NuGet version ΠŸΠ°ΠΊΠ΅Ρ‚ для экспорта Π² Π±Π°Π·Ρƒ SQL Server
YY.EventLogExportAssistant.PostgreSQL NuGet version ΠŸΠ°ΠΊΠ΅Ρ‚ для экспорта Π² Π±Π°Π·Ρƒ PostgreSQL
YY.EventLogExportAssistant.MySQL NuGet version ΠŸΠ°ΠΊΠ΅Ρ‚ для экспорта Π² Π±Π°Π·Ρƒ MySQL
YY.EventLogExportAssistant.ElasticSearch NuGet version ΠŸΠ°ΠΊΠ΅Ρ‚ для экспорта Π² индСксы ElasticSearch
YY.EventLogExportAssistant.ClickHouse NuGet version ΠŸΠ°ΠΊΠ΅Ρ‚ для экспорта Π² Π±Π°Π·Ρƒ ClickHouse

РСшСниС для экспорта Π΄Π°Π½Π½Ρ‹Ρ… ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.x Π² нСстандартныС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ YY.EventLogReaderAssistant Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации ΠΊΠ°ΠΊ тСкстового Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (*.lgf, .lgp), Ρ‚Π°ΠΊ ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² Π²ΠΈΠ΄Π΅ SQLite-Π±Π°Π·Ρ‹ (.lgd).

ПослСдниС новости ΠΎΠ± этой ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², смотритС Π² Telegram-ΠΊΠ°Π½Π°Π»Π΅.

БостояниС сборки

Windows Linux
Build status Build Status

Code Climat

Maintainability

Бостав рСпозитория

  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
    • YY.EventLogExportAssistant.Core - ядро Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с основным Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ чтСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
    • YY.EventLogExportAssistant.SQLServer - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ SQL Server.
    • YY.EventLogExportAssistant.PostgreSQL - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ PostgreSQL.
    • YY.EventLogExportAssistant.MySQL - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ MySQL.
    • YY.EventLogExportAssistant.ElasticSearch - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксы ElasticSearch.
    • YY.EventLogExportAssistant.ClickHouse - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ ClickHouse.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
    • YY.EventLogExportToSQLServer - ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ SQL Server.
    • YY.EventLogExportToPostgreSQL - ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ PostgreSQL.
    • YY.EventLogExportToMySQL - ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ MySQL.
    • YY.EventLogExportToElasticSearch - ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксы ElasticSearch.
    • YY.EventLogExportToClickHouse - ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ ClickHouse.

ВрСбования ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ

Π Π°Π±ΠΎΡ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ вСрсиями ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

  • ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ вСрсии ΠΎΡ‚ 8.3.6 ΠΈ Π²Ρ‹ΡˆΠ΅.
  • SQL Server 2012 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Π΅.
  • PostgreSQL 9.6 ΠΈ Π²Ρ‹ΡˆΠ΅.
  • MySQL 5.7 ΠΈ Π²Ρ‹ΡˆΠ΅.
  • ElasticSearch 7.6 ΠΈ Π²Ρ‹ΡˆΠ΅.
  • ClickHouse 20.9 ΠΈ Π²Ρ‹ΡˆΠ΅.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ подтвСрТдаСтся ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ старых вСрсиях ПО, Π½ΠΎ мСньшС тСстируСтся. Основная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° вСдСтся для Microsoft Windows, Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» провСрялся ΠΏΠΎΠ΄ .nix.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ содСрТит нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для экспорта Π΄Π°Π½Π½Ρ‹Ρ…:

  • YY.EventLogExportToSQLServer
  • YY.EventLogExportToPostgreSQL
  • YY.EventLogExportToMySQL
  • YY.EventLogExportToElasticSearch
  • YY.EventLogExportToClickHouse

Для удобства ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ основной нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации Π² Π±Π°Π·Ρƒ SQL Server.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, с Ρ‡Π΅Π³ΠΎ слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ - это ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» прилоТСния "appsettings.json". Π­Ρ‚ΠΎ JSON-Ρ„Π°ΠΉΠ» со строкой ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, свСдСниями ΠΎΠ± ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации. РасполагаСтся Π² ΠΊΠΎΡ€Π½Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° прилоТСния.

{
  "ConnectionStrings": {
    "EventLogDatabase": "Host=localhost;Port=5432;Database=EventLog;Username=YourUser;Password=YourPassword"
  },
  "InformationSystem": {
    "Name": "БухгалтСрия прСдприяния 3.0 (рабочая Π±Π°Π·Π°)",
    "Description": "Π–ΡƒΡ€Π½Π°Π» рСгистрации основной Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π±Π°Π·Ρ‹ Π‘Π£ 3.0"
  },
  "EventLog": {
    "SourcePath": "C:\\Program Files\\1cv8\\srvinfo\\reg_1541\\3f54d9a8-5457-41ad-9b43-10207c36f144\\1Cv8Log",
    "UseWatchMode": true,
    "WatchPeriod": 5,
    "Portion": 10000
  }
}

БСкция "ConnectionStrings" содСрТит строку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ "EventLogDatabase" ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для экспорта. Π‘Π°Π·Π° Π±ΡƒΠ΄Π΅Ρ‚ создана автоматичСски ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС прилоТСния. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ структура Π±Ρ‹Π»Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ. Имя строки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ "EventLogDatabase" - это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ автоматичСски, Ссли это Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ явно.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ строк ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • SQLServer: "Data Source=<Имя ΠΈΠ»ΠΈ адрСс сСрвСра>;Initial Catalog=<Имя Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…>;Integrated Security=True"
  • PostgreSQL: "User ID=<Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>;Password=<ΠŸΠ°Ρ€ΠΎΠ»ΡŒ>;Host=<Имя ΠΈΠ»ΠΈ адрСс сСрвСра>;Port=5432;Database=<Имя Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…>;"
  • MySQL: "Server=<Имя ΠΈΠ»ΠΈ адрСс сСрвСра>;Database=<Имя Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…>;Uid=<Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>;Pwd=<ΠŸΠ°Ρ€ΠΎΠ»ΡŒ>;"
  • ClickHouse: "Host=<Имя ΠΈΠ»ΠΈ адрСс сСрвСра>;Port=8123;Username=<Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>;password=<ΠŸΠ°Ρ€ΠΎΠ»ΡŒ>;Database=<Имя Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…>;"

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ настройкС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π‘Π£Π‘Π”.

БСкция "InformationSystem" содСрТит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Π΅Π΅ описаниС. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма позволяСт Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² рСгистрации Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π°Π· 1Π‘ Π² ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

БСкция "EventLog" содСрТит ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации:

  • SourcePath - ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΆΡƒΡ€Π½Π°Π»Π° (1Cv8.lgf ΠΈΠ»ΠΈ 1Cv8.lgd).
  • UseWatchMode - ΠΏΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ false ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ true Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ появлСния Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ явно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ.
  • WatchPeriod - ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π² сСкундах, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "UseWatchMode" установлСн Π² true.
  • Portion - количСство записСй, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации.

Настройки "UseWatchMode" ΠΈ "WatchPeriod" Π½Π΅ относятся ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ лишь для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π½ΠΈΡ… ΠΆΠ΅.

Для экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² ElasticSearch настройки нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.

{
  "ElasticSearch": {
    "Node": "http://localhost:9200/",
    "IndexName": "YourIndexName",
    "MaximumRetries": 2,
    "MaxRetryTimeout": 60,
    "IndexSeparationPeriod": "Hour"
  },
  "InformationSystem": {
    "Name": "EventLogGenerator",
    "Description": "Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Π½Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации."
  },
  "EventLog": {
    "SourcePath": "\\\\SRV-1C-01-VM\\1Cv8Log",
    "UseWatchMode": true,
    "WatchPeriod": 5,
    "Portion": 10000
  }
}

Π’ сСкции "ElasticSearch" Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки, относящиСся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ES:

  • Node - адрСс слуТбы ElasticSearch.
  • IndexName - имя индСкса. ЀактичСски это Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠΌΠ΅Π½ΠΈ индСкса. ЀинальноС имя Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² раздСлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ индСксам ΠΈ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, "indexname-logdata-20200412070000" - имя содСрТит ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, Π·Π°Ρ‚Π΅ΠΌ Ρ‚ΠΈΠΏ "logdata" ΠΈ Π΄Π°Ρ‚Ρƒ записСй.
  • MaximumRetries - максимальноС количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ запроса.
  • MaxRetryTimeout - ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… запросов.
  • IndexSeparationPeriod - ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния записСй ΠΏΠΎ индСксам (None, Hour, Day, Week, Month, Quarter, HalfYear, Year). Если Π²Ρ‹Π±Ρ€Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "None", Ρ‚ΠΎ Π² ΠΈΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ "FULL".

ΠŸΡ€ΠΈ экспортС ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° индСксов:

  • [имя индСкса]-logdata-[ΠΏΠ΅Ρ€ΠΈΠΎΠ΄] - индСкс с записями ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации.
  • [имя индСкса]-logfiles-actual - индСкс с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ послСдних считанных Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.
  • [имя индСкса]-logfiles-history - индСкс с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± истории ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ экспорт Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ использовании SQL Server / PostgreSQL.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ листингС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

#region Private Static Member Variables

private static long _totalRows = 0;
private static long _lastPortionRows = 0;
private static DateTime _beginPortionExport;
private static DateTime _endPortionExport;

#endregion

#region Static Methods

static void Main()
{
    // 1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ настроСк ΠΈΠ· Ρ„Π°ΠΉΠ»Π° "appsettings.json"
    IConfiguration Configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .Build();

    IConfigurationSection eventLogSection = Configuration.GetSection("EventLog");
    string eventLogPath = eventLogSection.GetValue("SourcePath", string.Empty);
    int watchPeriodSeconds = eventLogSection.GetValue("WatchPeriod", 60);
    int watchPeriodSecondsMs = watchPeriodSeconds * 1000;
    bool useWatchMode = eventLogSection.GetValue("UseWatchMode", false);
    int portion = eventLogSection.GetValue("Portion", 1000);

    IConfigurationSection inforamtionSystemSection = Configuration.GetSection("InformationSystem");
    string inforamtionSystemName = inforamtionSystemSection.GetValue("Name", string.Empty);
    string inforamtionSystemDescription = inforamtionSystemSection.GetValue("Description", string.Empty);

    if (string.IsNullOrEmpty(eventLogPath))
    {
        Console.WriteLine("НС ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации.");
        Console.WriteLine("Для Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ...");
        Console.Read();
        return;
    }

    Console.WriteLine();
    Console.WriteLine();

    // 2. (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ настроСк ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для экспорта
    string connectionString = Configuration.GetConnectionString("EventLogDatabase");
    DbContextOptions<EventLogContext> options = new DbContextOptions<EventLogContext>();
    var optionsBuilder = new DbContextOptionsBuilder<EventLogContext>();
    optionsBuilder.UseSqlServer(connectionString);

    // 3. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для экспорта Π΄Π°Π½Π½Ρ‹Ρ…
    using(EventLogExportMaster exporter = new EventLogExportMaster())
    {
        // 3.1. УстанавливаСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации
        exporter.SetEventLogPath(eventLogPath);

        // 3.2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ экспорта Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ назначСния - свой класс, наслСдуСмый ΠΎΡ‚ класса
        // "EventLogOnTarget" ΠΈ устанавливаСм Π² Π½Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму для Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ.
        // Для SQL Server - "EventLogOnSQLServer"
        // Для PostgreSQL - "EventLogOnPostgreSQL"
        // Для ClickHouse - "EventLogOnClickHouse"
        // Для ElasticSearch - "EventLogOnElasticSearch"
        // Для MySQL - "EventLogOnMySQL"
        // МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный класс для Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
        EventLogOnSQLServer target = new EventLogOnSQLServer(optionsBuilder.Options, portion);
        target.SetInformationSystem(new InformationSystemsBase()
        {
            Name = inforamtionSystemName,
            Description = inforamtionSystemDescription
        });

        // 4. УстанавливаСм Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ экспорта
        exporter.SetTarget(target);

        // 5. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌΡΡ Π½Π° события экспорта Π΄Π°Π½Π½Ρ‹Ρ…
        // 5.1. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ "ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…"
        exporter.BeforeExportData += BeforeExportData;
        // 5.2. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ "ПослС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…"
        exporter.AfterExportData += AfterExportData;         

        // 6. Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…
        _beginPortionExport = DateTime.Now;
        if (useWatchMode)
        {
            // ΠŸΡ€ΠΈ настройкС "WatchMode" = true Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ всС накопившиСся Π΄Π°Π½Π½Ρ‹Π΅,
            // Π° послС провСряСм Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ N сСкунд ΠΈΠ· настройки "WatchPeriod"
            while (true)
            {
                if (Console.KeyAvailable)
                    if (Console.ReadKey().KeyChar == 'q')
                        break;

                while (exporter.NewDataAvailiable())
                {
                    exporter.SendData();
                    Thread.Sleep(watchPeriodSecondsMs);
                }                    
            }
        } else // ΠŸΡ€ΠΈ настройкС "WatchMode" = false просто Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ всС накопившиСся Π΄Π°Π½Π½Ρ‹Π΅
            while (exporter.NewDataAvailiable())
                exporter.SendData();
    }

    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("Для Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ...");
    Console.Read();
}

#endregion

Π’Π°ΠΊ выглядят ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий "ΠŸΠ΅Ρ€Π΅Π΄ экспортом Π΄Π°Π½Π½Ρ‹Ρ…" ΠΈ "ПослС экспорта Π΄Π°Π½Π½Ρ‹Ρ…".

#region Events

private static void BeforeExportData(BeforeExportDataEventArgs e)
{
    _lastPortionRows = e.Rows.Count;
    _totalRows += e.Rows.Count;

    Console.SetCursorPosition(0, 0);
    Console.WriteLine("[{0}] Last read: {1}             ", DateTime.Now, e.Rows.Count);
}
private static void AfterExportData(AfterExportDataEventArgs e)
{
    _endPortionExport = DateTime.Now;
    var duration = _endPortionExport - _beginPortionExport;

    Console.WriteLine("[{0}] Total read: {1}            ", DateTime.Now, _totalRows);
    Console.WriteLine("[{0}] {1} / {2} (sec.)           ", DateTime.Now, _lastPortionRows, duration.TotalSeconds);
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("НаТмитС 'q' для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ...");
    
    _beginPortionExport = DateTime.Now;
}

#endregion

Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ поля "Cancel" Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ события "BeforeExportDataEventArgs" Π² событии "ΠŸΠ΅Ρ€Π΅Π΄ экспортом Π΄Π°Π½Π½Ρ‹Ρ…". Π’ событии "ПослС экспорта Π΄Π°Π½Π½Ρ‹Ρ…" ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

CΡ†Π΅Π½Π°Ρ€ΠΈΠΈ использования

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использования для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для экспорта стандартного ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΠ½ΠΈΠ΅ 8.Ρ‡ Π² нСстандартныС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ доступна Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° Π² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL ΠΈ SQL Server.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ эффСктивный способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ рСгистрации с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ риском Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для:

  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ состояния систСмы Π½Π° постоянной основС (пСриодичСскиС рассылки, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ошибок Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΈ Π΄Ρ€.)
  • ДолгосрочноС Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дСйствиях Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π°Π·Π΅ с ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ способом хранСния, бэкапирования ΠΈ развСртывания.
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ возмоТности Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ рСгистрации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных запросов ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ Ρ‡Π΅Ρ€Π΅Π· внСшниС источники Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ADO.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств Π²Π½Π΅ экосистСмы ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘.

И это Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список, всС зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сбалансирована для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с достаточно большим объСмом Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ рСгистрации. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ экспортС Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘, которая ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅Ρ‚ ΠΎ происходящих процСссах Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ экспорта записСй ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации зависит ΠΎΡ‚ мощности оборудования, загруТСнности систСмы ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ инфраструктуры.

ΠŸΡ€ΠΈ тСстировании экспорта Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ двумя сСрвСрами (сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ 1Π‘ ΠΈ сСрвСр Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… с Π±Π°Π·ΠΎΠΉ для экспорта ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации) со срСднСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠΌ связи 1 Π“Π±ΠΈΡ‚/сСк Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. ВСстовая машина Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π»Π° 16 ядСр ΠΈ процСссор Intel Core i9900k.

β„– Π‘Π£Π‘Π” ΠŸΠΎΡ€Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ (сСк.) Π‘Ρ€Π΅Π΄Π½Π΅Π΅ использованиС CPU ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, % Π‘Ρ€Π΅Π΄Π½Π΅Π΅ использованиС RAM ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠœΠ‘
1 SQL Server 10000 0.27 0.7 60
2 PostgreSQL 10000 0.32 0.8 97
3 MySQL 10000 2.91 3 130
4 ElasticSearch 10000 0.67 0.9 48
5 ClickHouse 10000 0.08 1.2 70

Π’ Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ какая Π‘Π£Π‘Π” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации. Π Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ статистичСской ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ. Π’ ΠΎΠ±ΠΎΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… врСмя Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΊΠΎΠ»ΠΎ 35 тыс. записСй ΠΆΡƒΡ€Π½Π°Π»Π° рСгистрации Π² ΠΌΠΈΠ½ΡƒΡ‚Ρƒ. НС часто ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Π±Π°Π·Ρƒ, которая Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ объСм записСй, Π½ΠΎ ΠΈ ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прСпятствиСм для использования этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Для MySQL тСкущая вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·-Π·Π° тСхничСских особСнностСй.

TODO

ΠŸΠ»Π°Π½Ρ‹ Π² части Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ экспорта Π΄Π°Π½Π½Ρ‹Ρ… Π² MongoDB
  • Π£Π»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок ΠΏΠΎ уровням возникновСния (критичСскиС ΠΈ Π½Π΅Ρ‚)
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ bencmark'ΠΎΠ²
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ unit-тСстов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

ЛицСнзия

MIT - Π΄Π΅Π»Π°ΠΉΡ‚Π΅ всС, Ρ‡Ρ‚ΠΎ посчитаСтС Π½ΡƒΠΆΠ½Ρ‹ΠΌ. Никакой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ использованию.