NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Influxdb 中 Select 查询请求结果涉及到的一些数据结构

  • 2019-11-20
  • 本文字数:1674 字

    阅读完需:约 5 分钟

Influxdb中Select查询请求结果涉及到的一些数据结构

本文将给大家介绍的是在 Influxdb 中 Select 查询请求结果中涉及到的一些数据结构,对于 Influxsql 的查询语句不太熟悉的同学,可以在先了解了解:https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration

数据结构

1 Series


Series 其实就是 measurement 和 tags 的组合,tags 是 tag key 和 tag value 的 map.这个 Tags 的 id 是如何产生的呢,其实就是对 tag key 和 tag value 编码到


[]byte: agkey1\0tagkey2\0...\tagvalue1\0tagvalue2\0...
复制代码


具体实现定义在 query/point.go 中的 encodeTags。

2 Row


Row 表示查询结果集中的每一行, 其中的 Values 表示是返回的 Fields 的集合

3 bufFloatIterator


bufFloatIterator 相当于 c 里面的链表元素,itr 指向下一个元素的指针,buf 表示当前元素,即 FloatPoint 类型的链表的迭代器。

FloatPoint

FloatPoint 定义在 query/point.gen.go 中, 表示一条 field 为 float 类型的数据


Next 实现

当前 Iterator 的值不为空,就返回当前的 buf, 当前的值为空,就返回 itr.itr.Next(),即指向的下一个元素


unread: iterator 回退操作

4 floatMergeIterator

floatMergeIterator 组合了多个 floatIterator



因为要作 merge, 这里需要对其管理的所有 Interator 元素作排序,这里用到了 golang 的 container/heap 作堆排。


因为要用 golang 的 container/heap 来管理,需要实现下面规定的接口,



floatMergeIterator 定义中的 floatMergeHeap 即实现了上面的接口,我们主要来看一下比较函数的实现,比较的其实就是 FloatPoint。



比较的优先级先是 FloatPoint 的 measurement 名,然后是 tagset id, 最后是 time,将这个比较函数我们就可以知道.

结构

Next 函数的实现

一张长图



结合上面的 Less 函数可知,针对所有的 FloatPoint, 排序的最小单位是 Window(由 measurement name, tagset id, time window 组成),属性同一 Window 的 FloatPoint 不再排序。如果是按升级规则遍历,则遍历的结果是按 Window 从小到大排,但同一 Window 内部的多条 Point,时间不一定是从小到大的。

5 floatSortedMergeIterator


同样它也借助了 golang/container 中的 heap, 与 floatMergeIterator 相比它实现了全体 Point 的排序遍历,我们来看一下是如何实现的;

pop 函数:


对所有 Iterator 包含的所在 FloatPoint,都从排序,没有 Window 的概念.

6 floatIteratorScanner

floatIteratorScanner 将 floatIterator 的值扫描到 map 里。


ScanAt

在 floatIterator 中找满足条件的 Point, 条件是 ts, name, tags 均相等,实现比较简单


7 floatParallelIterator


在一个单独的 goroutine 里面循环调用 floatIterator.Next 获取 FloatPoint,然后写入到 chan 中:



使用的时候,调用 Next, 从上面的 Chan 中读数据:


8 floatLimitIterator

限制在每个 window 中读取的 Point 个数


next

9 floatFillIterator

运行在 select 中的 Group by time fill(…), 在当前的 interval 的 window 中,如果没有查询到值,则使用相应的添充规则生成相应的值


具体可参见:


group-by-time-intervals-and-fill
复制代码


定义:


10 floatInterruptIterator

每遍历 N 条数据后,检测下遍历是否需要中断


定义:


Next

11 floatReduceFloatIterator

对每个 interval 内的数据作 reduce 操作


定义:


reduce()

返回处理后的 points, 函数较长,但逻辑比较简单




12 CallIterator

CallIterator 实现了聚合函数的 Iterator: count, min, max, sum, first, last, mean, distinct,Median…主要是使用我们上面介绍的一系列的 ReduceIterator,提供相应的 Reducer, 实现 AggregateFloat 和 Emit 这两个函数

13 IteratorOptions

构建 Iterator 时用到的一些配置选项, 包含的内容较多


定义:


14 Cursor

select 后会得到这个 cursor,用来遍历查询结果


定义:


Scan

15 floatIteratorMapper

*IteratorMapper 系列, 主要作用是遍历 cursor


定义



我们来看一下 Next 接口, 对当前的 cursor 作 scan 来返回 FloatPoint


总结

以上就是 Influxdb 的 select 查询请求结果涉及到的一些数据结构


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/MctXrEO_mrb9ABu3Z7bO1Q


2019-11-20 10:101200

评论

发布
暂无评论
发现更多内容

中国图数据库,领导者!

华为云开发者联盟

人工智能 华为云 科技 华为云开发者联盟 企业号 8 月 PK 榜

制造执行系统(MES)在家具行业中的应用

万界星空科技

开源 MES系统 智能家居

【干货】华为云图数据库GES技术演进

华为云开发者联盟

人工智能 华为云 图数据库 华为云开发者联盟 企业号 8 月 PK 榜

Jvm专讲之内存结构

java易二三

Java 编程 程序员 JVM 计算机

开发一款同城线下陪玩约玩APP大家怎么看?线下陪玩APP的应用场景

山东布谷科技胡月

语音聊天源码 线下约玩APP开发 线下陪玩平台 社交约玩平台开发 约玩交友APP源码

Elasticsearch Mapping类型修改 | 京东云技术团队

京东科技开发者

数据库 elasticsearch 企业号 8 月 PK 榜 Mapping

快手Java一面11问(附参考答案)

JavaGuide

Java spring 面试 springboot Java web

SpringBoot中如何对数据访问层进行单元测试?

java易二三

Java 数据库 编程 程序员 计算机

蓝易云:如何在 Alpine Linux 上启用或禁用防火墙?

百度搜索:蓝易云

云计算 Linux 运维 iptables Alpine

苹果Mac版防火墙推荐Radio Silence 激活下载+安装教程

胖墩儿不胖y

Mac软件 防火墙工具

阿里云机器学习PAI全新推出特征平台 (Feature Store),助力AI建模场景特征数据高效利用

阿里云大数据AI技术

月活近千万,连续365天无故障:货拉拉怎么做稳定性指标度量?

TakinTalks稳定性社区

浏览器缓存清理软件Cookie mac激活版

mac

Cookie 苹果mac Windows软件 隐私保护软件

再升级!PP-OCRv4多场景平均精度提升5%!

飞桨PaddlePaddle

人工智能 paddle OCR 百度飞桨

DR531|QCA9531 Wi-Fi routerboard 2X2 802.11n 2.4G MIMO

wallyslilly

AI教学赋能计划(大模型特辑)2023秋季学期启动申请!

飞桨PaddlePaddle

人工智能 百度飞桨 高校 复合型人才 产教融合

微短剧赛道风口下的一站式点播解决方案

阿里云视频云

云计算 视频云 微短剧

如何给application.yml文件的敏感信息加密?

java易二三

Java 编程 程序员 计算机 科技

How to choose WiFi moudle? QCA9880+QCA9882-802.11ac WiFi seamless connection-2.4G&5G

wifi6-yiyi

5G wifi 802.11ac 2.4g

度加剪辑App的MMKV应用优化实践

百度Geek说

性能优化 移动开发 企业号 8 月 PK 榜 IO优化

为什么那么多人喜欢用云桌面

青椒云云电脑

桌面云 云桌面

对线面试官 - MQ经典面试题之高可用性及幂等性

派大星

MQ Java 面试题

蓝易云:SEO优化对香港服务器的配置有什么要求?

百度搜索:蓝易云

云计算 Linux SEO 云服务器 ECS

设计模式-适配器模式

java易二三

Java 程序员 计算机

K8S集群中使用JDOS KMS服务对敏感数据安全加密 | 京东云技术团队

京东科技开发者

数据安全 数据加密 k8s集群 企业号 8 月 PK 榜 KMS

【实践篇】DDD脚手架及编码规范 | 京东云技术团队

京东科技开发者

DDD 软件架构 脚手架 企业号 8 月 PK 榜 DDD脚手架

uniapp中解析markdown支持网页和小程序

南城FE

JavaScript 小程序 前端 markdown

写得了代码,焊得了板!嵌入式开发工程师必修之代码管理方案(中)

极狐GitLab

git gitlab conan Git-Repo 多仓管理

Influxdb中Select查询请求结果涉及到的一些数据结构_文化 & 方法_刘伟_InfoQ精选文章