写点什么

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

评论

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

强强联合!北鲲云与宝德就打造混合云HPC解决方案达成战略合作

北鲲云

JavaScript 中 Math.random() 生成随机数据

devpoint

JavaScript 8月日更 math

ShardingSphere UI 初步体验

源码 ShardingSphere

区块链产业正处于繁荣前夜(下)

CECBC

我为什么坚持六点起床

月哥

架构实战训练营模块六作业

NewBranSTONE

#架构实战营

03. AI就是与人类思考方式相似的计算机程序:从仿生学看人工智能的定义

Databri_AI

人工智能

VMware中安装的Ubuntu启动时出现A start job is running for raise network interfaces...

Mike

在线JSON转HTML工具

入门小站

工具

区块链产业正处于繁荣前夜(上)

CECBC

【得物技术】得物App Android Crash治理演进

得物技术

发展 日志 进程 Crash 崩溃

轻松让你的nginx服务器支持HTTP2协议

程序那些事

Java nginx HTTP 程序那些事 http2

审计挖掘之CNVD通用漏洞

网络安全学海

黑客 网络安全 信息安全 WEB安全 漏洞挖掘

百度地图开发-绘制点线提示框 07

Andy阿辉

android Android 小菜鸟 Android端 8月日更

SSH免登陆

Mike

区块链蕴含的变革力

CECBC

区块链溯源:重塑咖啡产业链

CECBC

极光开发者周刊【No.0827】

极光JIGUANG

命中率高达87%,GitHub收费下载超过28W次的Java面试题库外泄

Java架构师迁哥

Docker 系列 _ 01_ 一念缘起

编程三昧

Docker 8月日更

neo4j 基本概念与入门实例

escray

学习 neo4j 8月日更

Linux之time命令

入门小站

Linux

mycat入门:落地分库分表与读写分离

小鲍侃java

8月日更

笔记分享 -- 弱网下的极限实时视频通信

声网

音视频 端到端 极限视频通信 弱网

聊聊 PC 端自动化最佳方案 - Pywinauto

星安果

Python 自动化 Pywinauto PC

死锁终结者:顺序锁和轮询锁!

王磊

Java 死锁 8月日更

ShardingSphere JDBC 语句执行初探

源码 ShardingSphere

如何使用python制作动感炫酷的 动态二维码

4ye

Python 后端 二维码 8月日更

价值连城 图灵奖得主Yann LeCun 杨立昆的采访 给AI从业者的建议 John 易筋 ARTS 打卡 Week 61

John(易筋)

ARTS 打卡计划

解析区块链技术如何帮助企业加速数字转型?

CECBC

术,路,心:陈天桥的大脑行旅

脑极体

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