ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ ΡΠΊΡΠΏΠΎΡΡΠ° ΠΆΡΡΠ½Π°Π»Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΊΡΠΏΠΎΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΆΡΡΠ½Π°Π»Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ 8.x Π² Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π΄Π°Π½Π½ΡΡ . Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ YY.EventLogReaderAssistant ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΆΡΡΠ½Π°Π»Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° (*.lgf, .lgp), ΡΠ°ΠΊ ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π²ΠΈΠ΄Π΅ SQLite-Π±Π°Π·Ρ (.lgd).
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΎΠ± ΡΡΠΎΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡ ΠΎΠ΄Π΅ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ², ΡΠΌΠΎΡΡΠΈΡΠ΅ Π² Telegram-ΠΊΠ°Π½Π°Π»Π΅.
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ±ΠΎΡΠΊΠΈ
Windows | Linux |
---|---|
Code Climat
Π‘ΠΎΡΡΠ°Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
- 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 - Π΄Π΅Π»Π°ΠΉΡΠ΅ Π²ΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΡΠΈΡΠ°Π΅ΡΠ΅ Π½ΡΠΆΠ½ΡΠΌ. ΠΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°ΡΠ°Π½ΡΠΈΠΈ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.