速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:101333

评论

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

软件测试/测试开发|详解selenium xpath定位

霍格沃兹测试开发学社

用AI PC助力创新无限想象,英特尔人工智能创新应用大赛正式启动

E科讯

拱墅运河体育场元宇宙空间上线,实时云渲染助力沉浸式浏览场馆

3DCAT实时渲染

实时云渲染 元宇宙解决方案

MongoDB与大数据处理:构建高性能分布式数据库

互联网工科生

mongodb 非关系型数据库

软件测试/测试开发|GitHub怎么用,这篇文章告诉你

霍格沃兹测试开发学社

文心一言 VS 讯飞星火 VS chatgpt (159)-- 算法导论12.3 6题

福大大架构师每日一题

福大大架构师每日一题

缺少反向ETL能力?ETLCloud帮你清障

RestCloud

数据仓库 ETL 数据集成

业内好用的低代码平台推荐

segao0927

低代码 PaaS

第五代英特尔至强可扩展处理器AI性能大幅提升,英特尔加注推动人工智能无处不在

E科讯

centos 7.9离线下载安装vscode,以及插件安装下载教程。

百度搜索:蓝易云

云计算 Linux centos vscode 云服务器

低代码助力软件开发

高端章鱼哥

软件开发 低代码 JNPF

深入解读MRKL系统

Bob Lin

AI ChatGPT LLM GPT-4 #LangChain

双喜临门!Apache IoTDB 及核心贡献者荣获开放原子评选生态开源项目+活力开源贡献者

Apache IoTDB

OpenAI 工程师自曝开发 ChatGPT 仅用时 8 天丨 RTE 开发者日报 Vol.108

声网

云数据库MySQL多人协同开发实践

天翼云开发者社区

MySQL 数据库 云计算

云电脑的显卡之谜与画面处理机制

天翼云开发者社区

云计算 云电脑

SD-WAN网络的可扩展性解析

Ogcloud

网络 SD-WAN 组网

Linux系统中bashrc和profile的区别

百度搜索:蓝易云

Linux 运维 Profile 云服务器 bashrc

SD-WAN优化远程办公网络体验

Ogcloud

远程办公 网络 SD-WAN 组网

人工智能革命:共同探索AIGC时代的未来

快乐非自愿限量之名

人工智能 大数据 AIGC

企业场景中大语言模型的应用实践探索丨Fabarta 技术专栏

Fabarta

大模型 数据基础设施 多模态大模型 大模型应用开发

迈向AI+API经济的智能时代

幂简集成

人工智能 AI API

一周内,体育赛事直播平台开发搭建上线!

软件开发-梦幻运营部

大数据服务与低代码开发:赋能创新与效率的双剑合璧

不在线第一只蜗牛

大数据 软件开发 低代码

1688商品API在跨境电商中的应用场景

技术冰糖葫芦

API

有道基于 Amoro Mixed Format 构建准实时湖仓实践

Amoro Community

大数据 开源 湖仓一体 有道 实时湖仓

软件测试/测试开发|最容易上手的Ubuntu虚拟机安装教程

霍格沃兹测试开发学社

大语言模型微调数据竞赛,冠军!

天翼云开发者社区

云计算 数据 大模型

数据分析场景下,企业大模型选型的思路与建议

Kyligence

数据分析 大模型

Pipeline 助您轻松驾驭海量数据!

观测云

数据分析 日志 pipeline

大模型时代,未来所有公司都是 Data+AI 公司

Kyligence

人工智能 数据分析

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