IoTDB数据库使用笔记
最近刚刚准备在一个新项目里面使用IoTDB,在采用的过程其实不断会踩坑。把自己踩的坑整一下。
查询数据时软件直接卡死
软件本身是用WPF开发,同样的代码,在测试工程里面执行一切正常,在项目工程里面执行操作就直接软件卡死。
后面发现,会卡死在resultSet.HasNext()的语句上。
解决的办法也很简单,整个查询的操作包在线程里就可以了。
保存和查询时的时间格式
保存记录的时候,直接传DateTime进去就可以了。这个是最方便的。
查询的SQL语句里面,时间按照下面的格式:
1、yyyy-MM-dd HH:mm:ss
2、yyyy-MM-ddTHH:mm:ss
服务端的程序的执行
服务端的程序,保存的上级目录不能包括空格,前面图方便放在“D:\Program Files”文件夹下,发现一直执行不了。
发给同事试了一下,却能正常执行的,后面发现只要目录不包含空格就可以了。
示例代码
var startTime = StartTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = EndTime.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
using var scope = new BusyScope(this);
var items = await Task.Run(async () =>
{
StringBuilder builder = new StringBuilder();
var session_pool = await _ioTDBController.GetSessionPool();
builder.Append($"SELECT * FROM root.{SelectedSource.SourceGuid.ToMD5()}.{SelectedPackage.MapPackageGuid.ToMD5()}");
builder.Append($" where time>={startTime} and time<{endTime}");
builder.Append(" limit 10000");
var query = builder.ToString();
_logger.Debug(query);
SessionDataSet resultSet = await session_pool.ExecuteQueryStatementAsync(query);
var recordList = new List<RowRecord>();
while (resultSet.HasNext())
{
RowRecord record = resultSet.Next();
recordList.Add(record);
}
return recordList;
});