我使用InfluxDb作为我的数据库。在InfluxDb中,数据存储在测量值(类似于表格),标签(索引)和字段中。
标记已编入索引,因此可以更快地检索数据。
我的查询参数为start time
和end time
,我将它们保留在标记中。
INSERT supply,start_time=10,end_time=20 value=100
此处start_time
和end_time
以字符串格式存储。
SELECT * FROM supply WHERE start_time > 5
返回NULL,因为标签存储在字符串中。
问题1:有没有办法在标签中进行比较?如果是,怎么样?
问题2:我可以通过制作字段来查询start_time
和end_time
。但他们没有编入索引。所以我应该切换到像Postgres这样的其他数据库,如果它在使用字段查询时涉及很多开销,或者如果我在未编制索引的字段上查询则没问题。我在数据库中有大约1000万个条目,需要快速检索。
答案 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 .
此外,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
请告诉我,如果我错过了几点,我会尝试更新我的答案。
由于