巨松时序数据库的使用(一)

巨松时序数据库(以下称PinusDB)是一款针对物联网智能设备数据特点研发的具备高性能、大容量、低成本、稳定可靠的数据库。提供高效的写入、读取、聚合统计功能。广泛应用于物联网(IoT)设备监控、智慧城市、智慧物流、环境监测等具备时序特点的场景。

PinusDB针对传感数据基于时序的特点使用特殊的方式处理、存储。解决海量物联网设备高频率数据处理,降低企业开发、运维、管理成本。

1. 产品特点

高性能

具备高效的读写能力,普通PC机写入性能超过20万条/秒;针对内存中的数据筛选、统计性能达到1500万条/秒;针对某台设备在某段时间的统计分析性能超过100万条/秒。优化数据读写机制,充分发挥硬件性能。

大容量

单机单表能存储百亿级数据量,高达32T数据文件。

简单易用

基于类似关系库表的数据模型,理解、使用更简单。用户使用类似标准SQL进行数据操作,数据筛选、统计更方便。

2. 支持的数据类型

PinusDB支持如下几种数据类型:

类型

长度(字节)

说明

tinyint

1

1字节整型,值域[ -2^7, 2^7 - 1 ]

smallint

2

2字节整型,值域[ -2^15, 2^15 - 1 ]

int

4

4字节整型,值域[ -2^31, 2^31 -1 ]

bigint

8

8字节整型,值域[ -2^63, 2^63 - 1 ]

float

4

单精度浮点型

double

8

双精度浮点型

string

 

字符串,变长,整条数据不超过8K

blob

 

二进制,变长,整条数据不超过8K

3. 支持的字符集

PinusDB只支持UTF8字符集,所有字符串都需要转成UTF8再存储到数据库。

4. 字面量

  • 数值

整数:使用十进制数字书写,可以在前面加负号(-)表示负值。

浮点数:使用点(.)作为整数和小数的分割,也可以在前面加负号(-)表示负值。

注意:不支持使用十六进制数值的书写。

  • 字符串

字符串是使用单引号'或双引号"包含的字符序列。若使用单引号将字符串引起来字符串出现单引号时,用两个连续的单引号表示一个单引号,双引号亦然。单引号引起来的字符串中出现双引号时不需要处理。例如如下的示例:

示例:字符串 ab'cd"ef 字面量的正确书写如下:

'ab''cd"ef'"ab'cd""ef"

  • 二进制

二进制数据的书写是将一个字节分为两个十六进制数表示(0~F不区分大小写),并使用0x'' 包含起来。

示例: 0x283C 值的书写如下:

0x'283C'

  • 时间类型

PinusDB没有时间类型,需要存储时间请使用bigint类型,并将时间值设置为自1970-1-1 0:0:0 以来的毫秒数。


5. 比较运算符

PinusDB支持下面的比较运算符:

运算符

操作数

描述

=

二元

等于,可以作用于除blob外的其他类型。

<> 

二元

不等于,可以作用于除blob外的其他类型。

二元

大于,可以作用于除string,blob外的其他类型。

>=

二元

大于或等于,可以作用于除string,blob外的其他类型。

二元

小于,可以作用于除string,blob外的其他类型。

<=

二元

小于或等于,可以作用于除string,blob外的其他类型。

like

二元

仅可作用于string字符串,可以使用通配符。

% 匹配一个或多个任意字符

_ 匹配一个任意字符

6. 逻辑运算

PinusDB仅支持 AND 逻辑运算符。

7. 聚合函数

聚合函数对一组值执行计算并返回一个值。PinusDB的Group By 子句中只能引用对象名列(objectname)或时间戳列(timestamp)。注意:聚合函数必须使用AS来指定列的别名。

测试数据

空气监测表(airmonitor)数据如下:

objectname

timestamp

pm2_5

pm10

湖南.长沙.经开区环保局

1514736000000

32

32

湖南.长沙.经开区环保局

1514764800000

33

34

湖南.长沙.经开区环保局

1514793600000

33

33

湖南.长沙.雨花区环保局

1514736000000

28

5

湖南.长沙.雨花区环保局

1514764800000

29

5

湖南.长沙.雨花区环保局

1514793600000

30

7

湖南.岳阳.南湖风景区

1514736000000

45

40

湖南.岳阳.南湖风景区

1514764800000

52

57

湖南.岳阳.南湖风景区

1514793600000

53

58



AVG

      声明:AVG(fieldname)

      说明:返回指定字段的平均值,不支持string,blob字段,返回值类型与字段类型一致。

      示例

查询airmonitor表中,岳阳市南湖风景区在2018年1月1日的平均pm2.5浓度

SELECT AVG(pm2_5) AS avg_pm2_5

FROM airmonitor

WHERE objectname = '湖南.岳阳.南湖风景区'

AND timestamp >=1514736000000 AND timestamp < 1514822400000;

注:1514736000000为2018-1-1 0:0:0 距离1970-1-1 0:0:0的毫秒数

    1514822400000为2018-1-2 0:0:0 距离1970-1-1 0:0:0的毫秒数

执行结果为:

52

COUNT

声明:COUNT(fieldname)

说明:返回检索到的行数量,支持所有类型字段,返回值为bigint类型。

示例

查询airmonitor中,pm2.5超过30的数量

SELECT COUNT(pm2_5) AS cnt FROM airmonitor WHERE pm2_5 > 30;

 

执行结果为:

6

MAX

       声明:MAX(fieldname)

       说明:返回指定字段最大的值,不支持string,blob字段,返回值类型与字段类型一致。

       示例

查询airmonitor中,pm10最大的值

SELECT MAX(pm10) AS max_pm10 FROM airmonitor;

执行结果:

58

 MIN

       声明:MIN(fieldname)

       说明:返回指定字段最小的值,不支持string,blob字段,返回值类型与字段类型一致。

       示例

查询airmonitor中,pm10最小的值

SELECT MIN(pm10) AS min_pm10 FROM airmonitor;

执行结果:

5

 SUM

       声明:SUM(fieldname)

       说明:返回指定字段的和,不支持string,blob字段。

当字段类型是tinyint,smallint,int 或 bigint时,返回值类型为bigint;

当字段类型是float 或 double 时,返回值类型为 double;

       示例

查询airmonitor中,pm10的和

SELECT SUM(pm10) AS sum_pm10 FROM airmonitor;

执行结果:

289

 LAST

       声明:LAST(fieldname)

       说明:返回时间戳最大的值,支持所有字段。

       示例

查询airmonitor中,各个气象站最新的数据

SELECT objectname, LAST(timestamp) AS last_tm,

LAST(pm2_5) AS last_pm2_5, LAST(pm10) AS last_pm10

FROM airmonitor

GROUP BY objectname;

执行结果:

objectname

last_tm

last_pm2_5

last_pm10

湖南.岳阳.南湖风景区

151473600000

53

58

湖南.长沙.经开区环保局

151473600000

33

33

湖南.长沙.雨花区环保局

151473600000

30

7


未完待续......














猜你喜欢

转载自blog.csdn.net/zhangqhn/article/details/80869062