Influxdb中标记(索引)的比较不起作用

时间:2017-06-12 10:50:34

标签: database database-design influxdb

我使用InfluxDb作为我的数据库。在InfluxDb中,数据存储在测量值(类似于表格),标签(索引)和字段中。

标记已编入索引,因此可以更快地检索数据。

我的查询参数为start timeend time,我将它们保留在标记中。

INSERT supply,start_time=10,end_time=20 value=100

此处start_timeend_time以字符串格式存储。

SELECT * FROM supply WHERE start_time > 5

返回NULL,因为标签存储在字符串中。

问题1:有没有办法在标签中进行比较?如果是,怎么样?

问题2:我可以通过制作字段来查询start_timeend_time。但他们没有编入索引。所以我应该切换到像Postgres这样的其他数据库,如果它在使用字段查询时涉及很多开销,或者如果我在未编制索引的字段上查询则没问题。我在数据库中有大约1000万个条目,需要快速检索。

1 个答案:

答案 0 :(得分:1)

问题1:是的,你可以比较Influxdb中的标签,但只能用" ="运营商。因为,标签默认存储在字符串数据类型中,所以" ="运算符适用于它们但不适用于不等式,因此,如果基于字段进行查询,查询将会很慢。 这部分内容来自Influxdb文档 -

  Tags are by default stored in string datatype so "=" operator works 
  for them but not the inequality and therefore, 
  query will be slow if you query based on fields .

Writing Data in Influxdb

此外,InfluxDB还会存储插入数据点的时间。检查您是否也可以使用此默认时间戳。

Question2-: 在迁移到像postgresql这样的sql数据库之前,你应该对插入,查询优化,集群管理(如果需要)的两个数据库进行基准测试评估。

注意:我正在以下列方式使用Influxdb查询 -

select sum(field_value) as FIELD_VALUE_SUM from measurement_name where tag_key='1234' and time> '2017-03-10 00:00:00' and time<'2017-05-10 00:00:00';

并输出为 -

 name: measurement_name
 time                   FIELD_VALUE_SUM
 ----                   ------
 1489104000000000001    1058

请告诉我,如果我错过了几点,我会尝试更新我的答案。

由于