0%

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

加法

#加一个常数
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

原文链接与常见问题

COUNT计数

DISTINCT查找不同

INTEGRAL积分

MEAN平均值

MEDIAN中位数

MODE频率最高的数

SPREAD最大和最小差值

STDDEV标准差

SUM求和

BOTTOM返回最小的N个数

TOP返回最大的N个field值

FIRST返回时间戳最早的数

LAST返回时间戳最近的数

MAX最大值

MIN最小值

PERCENTILE返回较大百分之N的字段值

SAMPLE返回N个随机抽样的字段值

CUMULATIVE_SUM返回字段实时前序字段值的和

DERIVATIVE返回字段的相邻两个点的变化率

简介

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是一种类似于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功能包括COUNTMINMAXMEDIANDERIVATIVE等等。

  • 查询中的基本计算

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)