跳到主要内容

TDengineDBProducer

一、说明

TDengineDBProducer适配TDengineDB时序数据库,可以定时/变化存储变量数据

通道只支持 Other

二、插件属性配置项

属性说明备注
链接字符串链接字符串
表名称超级表名称,子表名称为 [超级表名称]_变量名称
分组上传启用后,无论是定时还是变化模式,始终会上传变量分组属性为key分组的全部变量 。在变化模式时,每次变量变化都会触发一次组上传False
是否选择全部变量是否选择全部变量,true时不需要单个变量添加业务属性
上传模式间隔/变化/变化和间隔同时生效
定时上传间隔间隔执行时间
启用缓存是否启用缓存
缓存文件最大长度(mb)缓存文件最大长度
上传每页条数每一次上传的列表最大数量
内存队列最大数量内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值
历史库动态脚本历史库动态脚本

三、脚本与实体

3.1、脚本接口



public abstract class DynamicSQLBase
{
public TouchSocket.Core.ILog Logger { get; set; }

/// <summary>
/// 建库建表
/// </summary>
/// <returns></returns>
public virtual Task DBInit(ISqlSugarClient db, CancellationToken cancellationToken)
{
throw new NotSupportedException();
}

/// <summary>
/// 自定义上传
/// </summary>
/// <returns></returns>
public virtual Task DBInsertable(ISqlSugarClient db, IEnumerable<object> datas, CancellationToken cancellationToken)
{
throw new NotSupportedException();
}
}



完全自定义上传

DBInsertable方法中,自主实现上传逻辑,自定义Sql语句或通过orm执行

Demo


using ThingsGateway.Plugin.DB;
using SqlSugar;
using System.Text;
using ThingsGateway.Gateway.Application;
using TouchSocket.Core;

public class Taos : DynamicSQLBase
{
public override async Task DBInsertable(ISqlSugarClient db, IEnumerable<object> datas, CancellationToken cancellationToken)
{
StringBuilder stringBuilder = new();
stringBuilder.Append($"INSERT INTO");
var dbInserts = datas.Cast<IDBHistoryValue>();
//(`id`,`createtime`,`collecttime`,`isonline`,`value`)
foreach (var deviceGroup in dbInserts.GroupBy(a => a.DeviceName))
{
foreach (var variableGroup in deviceGroup.GroupBy(a => a.Name))
{
stringBuilder.Append($"""

`tablename1_{deviceGroup.Key}_{variableGroup.Key}`
USING `tablename1` TAGS ("{deviceGroup.Key}", "{variableGroup.Key}")
VALUES

""");

foreach (var item in variableGroup)
{
stringBuilder.Append($"""(NOW,"{item.CollectTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}",{item.Id},{item.IsOnline},"{item.Value}"),""");
}
stringBuilder.Remove(stringBuilder.Length - 1, 1);
}

}
stringBuilder.Append(';');
stringBuilder.AppendLine();

await db.Ado.ExecuteCommandAsync(stringBuilder.ToString(), default, cancellationToken: cancellationToken).ConfigureAwait(false);
LogMessage?.Trace($"Count {datas.Count()}");
}
public override async Task DBInit(ISqlSugarClient db, CancellationToken cancellationToken)
{

var sql = $"""
CREATE STABLE IF NOT EXISTS `tablename1`(
`createtime` TIMESTAMP ,
`collecttime` TIMESTAMP ,
`id` BIGINT ,
`isonline` BOOL ,
`value` VARCHAR(255) ) TAGS(`devicename` VARCHAR(100) ,`name` VARCHAR(100))
""";
await db.Ado.ExecuteCommandAsync(sql, default, cancellationToken: cancellationToken).ConfigureAwait(false);
}

}

3.2、脚本传入内容


public interface IDBHistoryValue
{
DateTime CollectTime { get; set; }
DateTime CreateTime { get; set; }
string DeviceName { get; set; }
public long Id { get; set; }
bool IsOnline { get; set; }
string Name { get; set; }
string Value { get; set; }
}