[Common]
优化DataRecorderCache和DataRecorderManager对象中的变量名称。
This commit is contained in:
parent
e2913c319d
commit
4e0e21c8b9
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue