选择包含非空标签的InfluxDB记录会非常慢

时间:2017-09-28 12:01:00

标签: influxdb

我正在使用Influx v1.3。我有一个测量,在1个月的时间内有大约2 +百万条记录,其中有10个标签。其中,我对user_idarticle_id感兴趣。

我尝试使用非空user_id提取针对特定article_id记录的事件数。

选择所有用户的事件的查询非常快:

select count(*) from pageviews where user_id = '92363';

对用户和文章的特定事件的查询非常快:

select * from pageviews where user_id = '92363' and article_id = '879729';

但是当我尝试为非空(或空)article_id添加过滤器时,查询会运行几十秒。

select count(*) from pageviews where user_id = '92363' and article_id != '';
select count(*) from pageviews where user_id = '92363' and article_id !~ /.*/;

我做错了什么或者我应该在数据库中配置什么?这似乎不对。用户活动的数量<100,我会手动更快地通过它们。

我目前正在运行默认配置。

感谢。

1 个答案:

答案 0 :(得分:1)

使用!==~进行查询时,数据库必须与该标记的每个条目进行比较。如果您有2M条目,则会很慢。使用正则表达式(=~)时,甚至更慢。

简而言之,不,你没有做错任何事。这些类型的查询在Influxdb中为O(n),其中n是您要比较的行数。

我建议您重新考虑您的架构以避免此类查询。例如,您可以设置一个整数标记has_article,该标记可以是01,表示文章的存在。然后,查询可以使用has_article = 1

然后,数据集和数据模型是否适合潮流数据库是另一个问题 - 数据集似乎不是时间序列数据。

InfluxDB是一个专门的时间序列数据库,而不是通用数据存储。