优化DataRecorderCache和DataRecorderManager对象中的变量名称。
This commit is contained in:
SL 2024-01-07 11:45:22 +08:00
parent e2913c319d
commit 4e0e21c8b9
2 changed files with 26 additions and 26 deletions

View File

@ -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();

View File

@ -32,8 +32,8 @@ namespace Aitex.Core.RT.DataCollection.HighPerformance
private readonly Dictionary<string, Func<object>> _subscribedRecordedDataGetter = new();
private readonly CancellationTokenSource _ctsDataRecorderThread;
private readonly CancellationToken _ctDataRecorderThread;
private Dictionary<string, DataRecorderCache> _dictCachePerModule;
private DateTime _dateOfTableName;
private Dictionary<string, DataRecorderCache> _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<string, List<DataHolder>> dictCategory = new();
_dictDataRecCachePerDataTable = new();
Dictionary<string, List<DataHolder>> 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<DataHolder>();
if (!dictDataHolderPerDataTable.ContainsKey(categoryName))
dictDataHolderPerDataTable[categoryName] = new List<DataHolder>();
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<DataHolder>();
if (!dictDataHolderPerDataTable.ContainsKey(defaultModuleName))
dictDataHolderPerDataTable[defaultModuleName] = new List<DataHolder>();
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<DataHolder> dataCollectors)
private bool UpdateTableSchema(string tblName, IEnumerable<DataHolder> 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();