From 4e0e21c8b9746dd4b809ccdd41d6da553b797f60 Mon Sep 17 00:00:00 2001 From: SL Date: Sun, 7 Jan 2024 11:45:22 +0800 Subject: [PATCH] =?UTF-8?q?[Common]=20=E4=BC=98=E5=8C=96DataRecorderCache?= =?UTF-8?q?=E5=92=8CDataRecorderManager=E5=AF=B9=E8=B1=A1=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=8F=98=E9=87=8F=E5=90=8D=E7=A7=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HighPerformance/DataRecorderCache.cs | 2 +- .../HighPerformance/DataRecorderManager.cs | 50 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderCache.cs b/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderCache.cs index 767e81a..cf38710 100644 --- a/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderCache.cs +++ b/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderCache.cs @@ -292,7 +292,7 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance EV.PostWarningLog(ModuleName.System.ToString(), $"DataRecorderCache Build SQL Expression Too Slow, Took {sw.ElapsedMilliseconds:F1}ms greater than {SQL_BUILD_DURATION_TOO_SLOW_MS:F1}ms"); Debug.WriteLine( - $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] GenSQL:Ln{_lastPersistRows}/{sw.ElapsedMilliseconds}ms/B{_sqlExpr.Length}, LastCachePeriod:{_lastCachePeriodMs}ms, CacheRemained: {_qCachedTimestamps.Count}", + $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] GenSQL:Ln{_lastPersistRows}/{sw.ElapsedMilliseconds}ms/{_sqlExpr.Length} bytes, LastCachePeriod:{_lastCachePeriodMs}ms, CacheRemained: {_qCachedTimestamps.Count}", $"DIAG DBRC - {Module}"); return _sqlExpr.ToString(); diff --git a/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderManager.cs b/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderManager.cs index 20b0963..8dbf8d4 100644 --- a/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderManager.cs +++ b/MECF.Framework.Common/Aitex/Core/RT/DataCollection/HighPerformance/DataRecorderManager.cs @@ -32,8 +32,8 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance private readonly Dictionary> _subscribedRecordedDataGetter = new(); private readonly CancellationTokenSource _ctsDataRecorderThread; private readonly CancellationToken _ctDataRecorderThread; - private Dictionary _dictCachePerModule; - private DateTime _dateOfTableName; + private Dictionary _dictDataRecCachePerDataTable; + private DateTime _dateDataTable; private IDataRecorderCallback _callback; #endregion @@ -98,7 +98,7 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance Thread.Sleep((int)(_dataRecorderInterval * 0.99)); // 跨天,退出循环并创建新表 - if (DateTime.Now.Date != _dateOfTableName) + if (DateTime.Now.Date != _dateDataTable) break; // 立即缓存一次数据 @@ -163,8 +163,8 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance { GetRecordableDataSource(); - _dictCachePerModule = new(); - Dictionary> dictCategory = new(); + _dictDataRecCachePerDataTable = new(); + Dictionary> dictDataHolderPerDataTable = new(); var defaultModuleName = (_dataTableCategory.Contains(ModuleName.System.ToString()) ? ModuleName.System.ToString() @@ -181,10 +181,10 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance if (dataName.StartsWith(categoryName + ".") || dataName.StartsWith("IO." + categoryName + ".")) { - if (!dictCategory.ContainsKey(categoryName)) - dictCategory[categoryName] = new List(); + if (!dictDataHolderPerDataTable.ContainsKey(categoryName)) + dictDataHolderPerDataTable[categoryName] = new List(); - dictCategory[categoryName].Add(new DataHolder(dictCategory[categoryName].Count, + dictDataHolderPerDataTable[categoryName].Add(new DataHolder(dictDataHolderPerDataTable[categoryName].Count, dataName, _subscribedRecordedDataGetter[dataName])); isAvailableModuleName = true; break; @@ -194,26 +194,26 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance if (!isAvailableModuleName) { - if (!dictCategory.ContainsKey(defaultModuleName)) - dictCategory[defaultModuleName] = new List(); + if (!dictDataHolderPerDataTable.ContainsKey(defaultModuleName)) + dictDataHolderPerDataTable[defaultModuleName] = new List(); - dictCategory[defaultModuleName].Add(new DataHolder( - dictCategory[defaultModuleName].Count, + dictDataHolderPerDataTable[defaultModuleName].Add(new DataHolder( + dictDataHolderPerDataTable[defaultModuleName].Count, dataName, _subscribedRecordedDataGetter[dataName])); } } } - _dateOfTableName = DateTime.Now.Date; - foreach (var module in dictCategory.Keys) + _dateDataTable = DateTime.Now.Date; + foreach (var category in dictDataHolderPerDataTable.Keys) { - var dhs = dictCategory[module]; - var tableName = $"{_dateOfTableName:yyyyMMdd}.{module}"; - _dictCachePerModule[module] = - new DataRecorderCache(tableName, module, dhs, minCachePeriodMs: _dataRecorderCachePeriodMs, + var holders = dictDataHolderPerDataTable[category]; + var tableName = $"{_dateDataTable:yyyyMMdd}.{category}"; + _dictDataRecCachePerDataTable[category] = + new DataRecorderCache(tableName, category, holders, minCachePeriodMs: _dataRecorderCachePeriodMs, maxCacheSize: _dataRecorderCacheSize); - UpdateTableSchema(tableName, dhs); + UpdateTableSchema(tableName, holders); } } } @@ -227,12 +227,12 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance lock (_lock) { // DO调用ForceCache方法可能发生在当前对象初始化之前,此时_dictCachePerModule为null - if (_dictCachePerModule == null) + if (_dictDataRecCachePerDataTable == null) return; // 立即缓存一次数据 - foreach (var drc in _dictCachePerModule.Values) + foreach (var drc in _dictDataRecCachePerDataTable.Values) drc.Cache(); } @@ -248,7 +248,7 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance lock (_lock) { - foreach (var dcc in _dictCachePerModule.Values) + foreach (var dcc in _dictDataRecCachePerDataTable.Values) { var sql = dcc.GetInsertSql(); @@ -275,7 +275,7 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance _ctsDataRecorderThread.Cancel(); } - private bool UpdateTableSchema(string tblName, IEnumerable dataCollectors) + private bool UpdateTableSchema(string tblName, IEnumerable holders) { var cmdText = $"select column_name from information_schema.columns where table_name = '{tblName}';"; var reader = DB.ExecuteReader(cmdText); @@ -292,7 +292,7 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance reader.Close(); if (existedColumns.Count > 0) { - foreach (var dataItem in dataCollectors) + foreach (var dataItem in holders) { var colName = dataItem.Name; if (!existedColumns.Contains(colName)) @@ -325,7 +325,7 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance else { var sqlExprCreateTable = $"CREATE TABLE \"{tblName}\"(Time bigint NOT NULL,"; - foreach (var dataItem in dataCollectors) + foreach (var dataItem in holders) { var colName = dataItem.Name; var dataType = dataItem.Read().GetType();