我面临一个问题:过程工厂的数据库.采样率为50 ms时,最多有50,000个传感器.所有测量值都需要存储至少3年,并且必须支持实时查询(即用户可以查看延迟小于1秒的历史数据).我最近阅读了一篇关于时间序列数据库的文章,现有很多选项:OpenTSDB,KairosDB,InfluxDB,......
我很困惑哪一个适合这个目的?任何人都知道这个请帮助我!
更新15.06.25
今天我运行一个基于OpenTSDB的测试.我使用Virtual Box创建了一个由3个CentOS x64 VM组成的集群(1个主服务器,2个从服务器).主机配置为8 GB RAM,核心i5.主VM配置为3 GB RAM,从站配置为1.5 GB RAM.我编写了一个python程序来向OpenTSDB发送数据,如下所示:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.10.55", 4242))
start_time = time.time()
start_epoch = 1434192418;
for x in range(0, 1000000):
curr_epoch = start_epoch + x
tag1 = "put TAG_1 %d 12.9 stt=good\n" % (curr_epoch)
tag2 = "put TAG_2 %d 12.9 stt=good\n" % (curr_epoch)
tag3 = "put TAG_3 %d 12.9 stt=good\n" % (curr_epoch)
tag4 = "put TAG_4 %d 12.9 stt=good\n" % (curr_epoch)
tag5 = "put TAG_5 %d 12.9 …Run Code Online (Sandbox Code Playgroud) 我不了解插入数据所需的格式.
为什么不起作用test a=dog,b=0,c=nice?
在网站上,我看到这<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...]是要遵循的格式.
我也在读你可以有0多个标签(在上面的例子中我有零标签)
不确定我违反了什么或为什么我一直得到的错误是 {"error":"unable to parse 'test a=dog,b=0,c=nice': invalid boolean"}
谁说了一个关于布尔的事情!?
我是InfluxDB的初学者,我已经阅读了介绍文档,但是找不到有关如何创建新测量的任何细节.我错过了什么吗?
使用InfluxDB(v1.1),我有一个要求,我想获得特定密钥的最后一个入口时间戳.无论存储哪个测量值,无论这个值是多少.
设置很简单,在这里我有三个测量:location,network和usage.
只有一个关键:device_id.
在伪代码中,这将是这样的:
# notice the lack of a FROM clause on measurement here...
SELECT MAX(time) WHERE 'device_id' = 'x';
Run Code Online (Sandbox Code Playgroud)
问题:查询这个问题最有效的方法是什么?
我想要这个的原因是会有一个分散的同步过程.某些设备可能在过去一小时内已更新,而其他设备未在几个月内更新.能够为设备(密钥)获得明确的"最后更新"时间戳将允许我更有效地将新点存储到Influx.
我也注意到有关InfluxDB的GitHub仓库(#5793)的类似讨论,但问题是没有任何字段/密钥过滤.这正是我想要的:获取特定密钥的"最后"条目.
根据文档,我们可以......
使用正则表达式在WHERE子句中指定具有值的标记.
当我像这样查询我的涌入数据库时,我得到了预期的结果.
> SELECT "field" FROM "measurement" WHERE tag = 19
但是,当用正则表达式替换where过滤时,我得不到任何结果.
> SELECT "field" FROM "measurement" WHERE tag =~ /19/
有人能告诉我为什么会这样吗?
我试图检查在Influxdb中创建的db的大小.我在哪里可以找到存储文件夹,或者如果它分布在很多地方,测量我的数据库大小的最佳方法是什么?
我是Prometheus的新手,但熟悉Influx(当前运行1.6)。
我的理解是,可以使用Prometheus.yml中的以下配置将Prometheus配置为从入站远程读取数据:
remote_read:
url: "http://localhost:8086/api/v1/prom/read?db=bulkstats"
Run Code Online (Sandbox Code Playgroud)
“ bulkstats”是我试图从Prometheus中读取数据的数据库。一个可以大量涌入的查询示例是:
SELECT "sess-curaaaactive" FROM "PDSNSYSTEM1" WHERE ("Nodename" = 'ALPRGAGQPNC') AND time >= now() - 6h"
Run Code Online (Sandbox Code Playgroud)
但是我找不到如何从PromQL查询该数据的示例。请帮忙!
我使用 influxDB 而不是 MySQL 进行时间序列分析。在我的数据库中data,我有一个名为/HFT/Data_HFT/OrderBook/DCIX_OB. 该名称无关紧要,它是由错误创建的。该系列有 8900 万行,因此重新创建该系列需要很长时间。
所以这对我来说不是一个解决方案:
SELECT * INTO new_name FROM old_name
DROP MEASUREMENT old_name
Run Code Online (Sandbox Code Playgroud)
我尝试了该解决方案,但它根本不起作用。这是错误:
> RENAME MEASUREMENTS 'OLD_NAME' to 'NEW_NAME'
ERR: error parsing query: found RENAME, expected SELECT, DELETE, SHOW, CREATE, DROP, EXPLAIN, GRANT, REVOKE, ALTER, SET, KILL at line 1, char 1
Run Code Online (Sandbox Code Playgroud)
我怎么能重命名它?
我正在尝试根据标签值查询数据。是否可以在 where 子句中包含多个查询。我在 SQL 中找不到类似于 IN 运算符的运算符。
select * from students where rollNumber='1' limit 10
student 是测量值,rollNumber 是一个标签。我想在查询中包含多个 rollNumber 值。
有什么建议可以解决问题吗?
我有一个名为kpi. 我想以 MB 为单位获得单个测量的大小。
到目前为止,我已经尝试过:
du -sh /var/lib/influxdb/data/demo/
27M /var/lib/influxdb/data/demo/
Run Code Online (Sandbox Code Playgroud)
但是这个命令给了我整个数据库的大小。
我也试过这个命令:
> select count(counter) from kpi
name: kpi
time count
---- -----
0 1479533
>
Run Code Online (Sandbox Code Playgroud)
但这只会给我条目数。
我怎样才能得到这个特定测量的大小?
influxdb ×10
hbase ×1
kairosdb ×1
linux ×1
measurement ×1
opentsdb ×1
phoenix ×1
prometheus ×1
regex ×1
shell ×1