influxdb-写入性能测试
influx-stress
Flags:
-b, --batch-size uint number of points in a batch (default 10000)
-c, --consistency string Write consistency (only applicable to clusters) (default "one")
--create string Use a custom create database command
--db string Database that will be written to (default "stress")
--dump string Dump to given file instead of writing over HTTP
-f, --fast Run as fast as possible
--gzip int If non-zero, gzip write bodies with given compression level. 1=best speed, 9=best compression, -1=gzip default.
--host string Address of InfluxDB instance (default "http://localhost:8086")
--pass string Password for user
-n, --points uint number of points that will be written (default 18446744073709551615)
--pps uint Points Per Second (default 200000)
-p, --precision string Resolution of data being written (default "n")
-q, --quiet Only print the write throughput
--rp string Retention Policy that will be written to
-r, --runtime duration Total time that the test will run (default 2562047h47m16.854775807s)
-s, --series int number of series that will be written (default 100000)
--strict Strict mode will exit as soon as an error or unexpected status is encountered
--user string User to write data as
Example Usage
Runs forever
$ influx-stress insert
Runs forever writing as fast as possible
$ influx-stress insert -f
Runs for 1 minute writing as fast as possible
$ influx-stress insert -r 1m -f
Writing an example series key
$ influx-stress insert cpu,host=server,location=us-west,id=myid
Writing an example series key with 20,000 series
$ influx-stress insert -s 20000 cpu,host=server,location=us-west,id=myid
Writing an example point
$ influx-stress insert cpu,host=server,location=us-west,id=myid busy=100,idle=10,random=5i
测试命令
influx_stress.exe insert -r 1m -f
Total Requests: 2000
Success: 2000
Fail: 0
Average Response Time: 93.270662ms
Points Per Second: 484339
Total Queries: 250
Average Query Response Time: 3.372889ms
influxdb-数学运算符
加法
#加一个常数
SELECT "A" + 5 FROM "add"
SELECT * FROM "add" WHERE "A" + 5 > 10
#两个字段相加。
SELECT "A" + "B" FROM "add"
SELECT * FROM "add" WHERE "A" + "B" >= 10
减法
#减法里带常数。
SELECT 1 - "A" FROM "sub"
SELECT * FROM "sub" WHERE 1 - "A" <= 3
#两个字段做减法。
SELECT "A" - "B" FROM "sub"
SELECT * FROM "sub" WHERE "A" - "B" <= 1
乘法
#乘以一个常数。
SELECT 10 * "A" FROM "mult"
SELECT * FROM "mult" WHERE "A" * 10 >= 20
#两个字段相乘。
SELECT "A" * "B" * "C" FROM "mult"
SELECT * FROM "mult" WHERE "A" * "B" <= 80
#乘法和其他运算符混用。
SELECT 10 * ("A" + "B" + "C") FROM "mult"
SELECT 10 * ("A" - "B" - "C") FROM "mult"
SELECT 10 * ("A" + "B" - "C") FROM "mult"
除法
#除法里带常数。
SELECT 10 / "A" FROM "div"
SELECT * FROM "div" WHERE "A" / 10 <= 2
#两个字段相除。
SELECT "A" / "B" FROM "div"
SELECT * FROM "div" WHERE "A" / "B" >= 10
#除法和其他运算符混用。
SELECT 10 / ("A" + "B" + "C") FROM "mult"
求模
#模一个常数。
SELECT "B" % 2 FROM "modulo"
SELECT "B" FROM "modulo" WHERE "B" % 2 = 0
#两个字段求模。
SELECT "A" % "B" FROM "modulo"
SELECT "A" FROM "modulo" WHERE "A" % "B" = 0
按位与
你可以在任何整数和布尔值中使用这个操作符,无论是字段或常数。该操作符不支持浮点数或字符串数据类型。并且不能混合使用整数和布尔值。
SELECT "A" & 255 FROM "bitfields"
SELECT "A" & "B" FROM "bitfields"
SELECT * FROM "data" WHERE "bitfield" & 15 > 0
SELECT "A" & "B" FROM "booleans"
SELECT ("A" ^ true) & "B" FROM "booleans"
按位或
你可以在任何整数和布尔值中使用这个操作符,无论是字段或常数。该操作符不支持浮点数或字符串数据类型。并且不能混合使用整数和布尔值。
SELECT "A" | 5 FROM "bitfields"
SELECT "A" | "B" FROM "bitfields"
SELECT * FROM "data" WHERE "bitfield" | 12 = 12
按位异或
你可以在任何整数和布尔值中使用这个操作符,无论是字段或常数。该操作符不支持浮点数或字符串数据类型。并且不能混合使用整数和布尔值。
SELECT "A" ^ 255 FROM "bitfields"
SELECT "A" ^ "B" FROM "bitfields"
SELECT * FROM "data" WHERE "bitfield" ^ 6 > 0
原文链接与常见问题
influxdb-查询函数
influxdb-连续查询
简介
InfluxDB每秒可以处理数十万的数据点。如果要长时间地存储大量的数据,对于存储会是很大的压力。一个很自然的方式就是对数据进行采样,对于高精度的裸数据存储较短的时间,而对于低精度的的数据可以保存得久一些甚至永久保存。
InfluxDB提供了两个特性——连续查询(Continuous Queries
简称CQ
)和保留策略(Retention Policies
简称RP
),分别用来处理数据采样和管理老数据的。
Continuous Query
(CQ)是在数据库内部自动周期性跑着的一个InfluxQL的查询,CQs需要在SELECT语句中使用一个函数,并且一定包括一个GROUP BY time()语句。
Retention Policy
(RP)是InfluxDB数据架构的一部分,它描述了InfluxDB保存数据的时间。InfluxDB会比较服务器本地的时间戳和请求数据里的时间戳,并删除比你在RPs里面用DURATION设置的更老的数据。一个数据库中可以有多个RPs但是每个数据库的RPs是唯一的。
基本语法
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
BEGIN
<cq_query>
END
cq_query
cq_query需要一个函数,一个INTO
子句和一个GROUP BY time()
子句:
SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]
注意:请注意,在
WHERE
子句中,cq_query不需要时间范围。 InfluxDB在执行CQ时自动生成cq_query的时间范围。cq_query的WHERE子句中的任何用户指定的时间范围将被系统忽略。
运行时间点以及覆盖的时间范围
- CQ对实时数据进行操作。他们使用本地服务器的时间戳,GROUP BY time()间隔和InfluxDB的预设时间边界来确定何时执行以及查询中涵盖的时间范围。
- CQs以与cq_query的GROUP BY time()间隔相同的间隔执行,并且它们在InfluxDB的预设时间边界开始时运行。如果GROUP BY time()间隔为1小时,则CQ每小时开始执行一次。
- 当CQ执行时,它对于now()和now()减去GROUP BY time()间隔的时间范围运行单个查询。 如果GROUP BY time()间隔为1小时,当前时间为17:00,查询的时间范围为16:00至16:59999999999。
高级语法
influxQL
InfluxQL是一种类似于SQL的查询语言,用于与InfluxDB进行交互。它经过精心设计,可以使来自其他SQL或类似SQL环境的用户熟悉,同时还提供特定于存储和分析时间序列数据的功能。
InfluxQL的SELECT语句遵循SQL SELECT语句的形式:
SELECT <stuff> FROM <measurement_name> WHERE <some_conditions>
WHERE是可选的。
要在上面的部分中获取InfluxDB输出,请输入:
SELECT * FROM "foodships"
如果您只想查看有关该行的数据Saturn
,请输入:
SELECT * FROM "foodships" WHERE "planet" = 'Saturn'
如果您想Saturn在2015年4月16日世界标准时间12:00:01
之后查看行星的数据,请输入:
SELECT * FROM "foodships" WHERE "planet" = 'Saturn' AND time > '2015-04-16 12:00:01'
如上面的示例所示,InfluxQL允许您在WHERE子句中指定查询的时间范围。您可以使用日期时间字符串,这些日期时间字符串用单引号引起来,其格式为YYYY-MM-DD HH:MM:SS.mmm
(mmm是毫秒,是可选的,还可以指定微秒或纳秒)。您还可以使用相对时间now()来引用服务器的当前时间戳:
SELECT * FROM "foodships" WHERE time > now() - 1h
该查询foodships以时间戳记比服务器当前时间减去一小时新的量度输出数据。用于指定持续时间的选项now()
有:
格式 | 单位 |
---|---|
ns | 纳秒 |
u或µ | 微秒 |
ms | 毫秒 |
s | 秒 |
m | 分钟 |
H | 小时 |
d | 天 |
w | 周 |
InfluxQL还支持正则表达式,表达式,SHOW语句和GROUP BY语句中的算术运算。
InfluxQL功能包括
COUNT
,MIN
,MAX
,MEDIAN
,DERIVATIVE
等等。查询中的基本计算
SELECT声明支持使用基本数学运算符,如+,-,/,*,(),等。
-- Add two field keys
SELECT field_key1 + field_key2 AS "field_key_sum" FROM "measurement_name" WHERE time < now() - 15m
-- Subtract one field from another
SELECT field_key1 - field_key2 AS "field_key_difference" FROM "measurement_name" WHERE time < now() - 15m
-- Grouping and chaining mathematical calculations
SELECT (field_key1 + field_key2) - (field_key3 + field_key4) AS "some_calculation" FROM "measurement_name" WHERE time < now() - 15m
- 计算查询中的百分比
使用基本的数学函数,您可以通过将一个字段值除以另一字段值并将结果乘以100来计算百分比:
SELECT (field_key1 / field_key2) * 100 AS "calculated_percentage" FROM "measurement_name" WHERE time < now() - 15m
- 使用聚合函数计算百分比
如果在百分比计算中使用汇总函数,则必须使用汇总函数引用所有数据。 您不能混合使用汇总数据和非汇总数据。
所有聚合功能都需要一个GROUP BY time()
子句,该子句定义将数据点分组和聚合的时间间隔。
SELECT (sum(field_key1) / sum(field_key2)) * 100 AS "calculated_percentage" FROM "measurement_name" WHERE time < now() - 15m GROUP BY time(1m)