InfluxDB V2.5 C# Hepler 类及使用实例
using InfluxDB.Client;
using InfluxDB.Client.Api.Domain;
using InfluxDB.Client.Linq;
using InfluxDB.Client.Writes;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace Unit
{
#region InfluxDB 读写工具类
/// <summary>
/// InfluxDB 读写工具类
/// </summary>
/// <typeparam name="T"></typeparam>
public class InfluxDBCommon<T>
{
static string _baseUri { get; set; } //地址
static string _token { get; set; } //token
static string _org { get; set; } //组织
static string _bucket { get; set; } //桶
static InfluxDBClientOptions _options { get; set; } //桶
/// <summary>
/// 构造函数
/// </summary>
public InfluxDBCommon()
{
_baseUri = ConstModel.influxDBUri;
_token = ConstModel.influxDBToken;
_org = ConstModel.influxDBOrg;
_bucket = ConstModel.influxDBBucket;
_options = InfluxDBClientOptions.Builder
.CreateNew()
.Url(_baseUri)
.AuthenticateToken(_token)
.Org(_org)
.Bucket(_bucket)
.Build();
}
/// <summary>
/// 写入
/// </summary>
/// <param name="point"></param>
public void WritePoint(PointData point)
{
var client = InfluxDBClientFactory.Create(_options);
var writeApiAsync = client.GetWriteApiAsync();
writeApiAsync.WritePointAsync(point);
}
/// <summary>
/// 批量写入
/// </summary>
/// <param name="points"></param>
public void WritePoints(List<PointData> points)
{
var client = InfluxDBClientFactory.Create(_options);
var writeApiAsync = client.GetWriteApiAsync();
writeApiAsync.WritePointsAsync(points);
}
/// <summary>
/// 写入
/// </summary>
/// <param name="measurement"></param>
public void WriteMeasurement(T measurement)
{
var client = InfluxDBClientFactory.Create(_options);
var writeApiAsync = client.GetWriteApiAsync();
writeApiAsync.WriteMeasurementAsync(measurement);
}
/// <summary>
/// 批量写入
/// </summary>
/// <param name="measurements"></param>
public void WriteMeasurements(List<T> measurements)
{
var client = InfluxDBClientFactory.Create(_options);
var writeApiAsync = client.GetWriteApiAsync();
writeApiAsync.WriteMeasurementsAsync(measurements);
}
/// <summary>
/// 查询返回 集合
/// </summary>
/// <param name="exp">exp 查询条件</param>
/// <param name="orderByDesc">倒序排序字段,为数据类型时间类型的字段</param>
/// <returns></returns>
public List<T> QueryBy<TKey>(Expression<Func<T, bool>> exp, Expression<Func<T, TKey>> orderByDesc)
{
using (var client = InfluxDBClientFactory.Create(_options))
{
var query = from s in InfluxDBQueryable<T>.Queryable(_bucket, _org, client.GetQueryApiSync())
select s;
return query.Where(exp).OrderByDescending(orderByDesc).ToList();
}
}
/// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <param name="exp">where 表达式</param>
/// <param name="orderByDesc">排序字段</param>
/// <param name="skip">当前第几页</param>
/// <param name="take">每页多少条</param>
/// <param name="count">返回总行数</param>
/// <returns>返回分页后结果</returns>
public List<T> QueryBy<TKey>(Expression<Func<T, bool>> exp, Expression<Func<T, TKey>> orderByDesc, int skip, int take, out int count)
{
using (var client = InfluxDBClientFactory.Create(_options))
{
var query = from s in InfluxDBQueryable<T>.Queryable(_bucket, _org, client.GetQueryApiSync())
select s;
count = query.Where(exp).Count();
return query.Where(exp).OrderByDescending(orderByDesc).Skip(skip).Take(take).ToList();
}
}
/// <summary>
/// 查询所有
/// </summary>
/// <returns>返回Measurement 所有数据</returns>
public List<T> QueryAll()
{
using (var client = InfluxDBClientFactory.Create(_options))
{
var query = from s in InfluxDBQueryable<T>.Queryable(_bucket, _org, client.GetQueryApiSync())
select s;
return query.ToList();
}
}
}
#endregion
#region 使用实例
public class InfluxDBTest
{
public void Test()
{
//声明
var influx = new InfluxDBCommon<PointDataList>();
//单个写入
PointDataList point = new PointDataList() { PointCode = "A0005", PointValue = "1", CreateTime = DateTime.Now, CreateTimeTicks = DateTime.Now.Ticks, Timestamp = DateTime.UtcNow };
influx.WriteMeasurement(point);
var pointInfo = PointData
.Measurement("PointDataList")
.Tag("pointcode", "DB001")
.Field("pointvalue", "2#报警信息。。。。。");
influx.WritePoint(pointInfo);
//批量写入
List<PointDataList> Lsts = new List<PointDataList>();
Lsts.Add(new PointDataList() { PointCode = "A0006", PointValue = "true", CreateTime = DateTime.Now, CreateTimeTicks = DateTime.Now.Ticks, Timestamp = DateTime.UtcNow });
Lsts.Add(new PointDataList() { PointCode = "A0007", PointValue = "false", CreateTime = DateTime.Now, CreateTimeTicks = DateTime.Now.Ticks, Timestamp = DateTime.UtcNow });
Lsts.Add(new PointDataList() { PointCode = "A0008", PointValue = "123", CreateTime = DateTime.Now, CreateTimeTicks = DateTime.Now.Ticks, Timestamp = DateTime.UtcNow });
influx.WriteMeasurements(Lsts);
//条件查询
var stim = DateTime.Now.AddHours(-12);
var etim = DateTime.Now;
var longs = etim.ToLong();
var exp = Expressionable.Create<PointDataList>()
.And(it => it.PointCode == "A0006")
.And(it => it.CreateTimeTicks >= stim.Ticks)
.And(it => it.CreateTimeTicks < etim.Ticks)
.ToExpression();
var lst = influx.QueryBy(exp, n => n.Timestamp);
//查询所有
var lst2 = influx.QueryAll();
//根据条件查询分页查询
int skip = 0;//当前第几页
int take = 10;//每页多少条
int count = 0;//返回总行数
var lst3 = influx.QueryBy(exp, n => n.Timestamp, skip, take, out count);
}
/// <summary>
/// 类似于关系数据库的表名 点位表
/// </summary>
[Measurement("PointDataList")]
public class PointDataList
{
/// <summary>
/// 标签 点位名称
/// </summary>
[Column("PointCode", IsTag = true)]
public string PointCode { get; set; }
/// <summary>
/// 普通字段 点位值
/// </summary>
[Column("PointValue")]
public string PointValue { get; set; }
/// <summary>
/// 创建时间的Ticks
/// </summary>
[Column("CreateTimeTicks")]
public long CreateTimeTicks { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column("CreateTime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// UTC时间
/// </summary>
[Column(IsTimestamp = true)]
public DateTime Timestamp { get; set; }
}
}
#endregion
}
野心成就不了你,热爱可以。

浙公网安备 33010602011771号