【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

评论

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

使用 HyBench 测试 TiDB

TiDB 社区干货传送门

性能测评 7.x 实践

MetaVideo for Mac(视频元数据编辑工具)v1.1.3激活版

影影绰绰一往直前

数据库防水坝是什么?有什么作用?有哪些优势?

行云管家

数据库 堡垒机 数据库安全

Disk Drill for Mac(数据恢复软件)v5.4.1426中文激活版

影影绰绰一往直前

基于 Flink 的实时数仓在曹操出行运营中的应用

Apache Flink

软件测试|拒绝上市公司的 Offer,选择自己喜爱的行业,这么从容不迫他凭什么?

霍格沃兹测试开发学社

小程序开发实战案例五 | 小程序如何嵌入H5页面

盐焗代码虾

小程序 支付宝 web-view

How do IPQ9574 and IPQ9554 connect QCN9274 for WiFi7 connectivity?

wifi6-yiyi

802.11be

MetaRename for Mac(文件重命名工具)v1.0.8激活版

影影绰绰一往直前

Metasequoia 4 for Mac(水杉3D建模器)v4.8.6c激活版

影影绰绰一往直前

GPT应用开发:GPT插件开发指南

EquatorCoco

前端 插件开发 应用开发 GPT

聊聊TiDB里面如何实现读写分离

TiDB 社区干货传送门

实践案例

Disk Drill for Mac(数据恢复软件)v5.4.1426中文激活版

影影绰绰一往直前

SponsorBlock for YouTube for Mac v5.5激活版下载

影影绰绰一往直前

静态分析工具的评估测试

华为云PaaS服务小智

华为云

软件测试|测试管理训练营马上开营! 快来免费领取试听课吧~

霍格沃兹测试开发学社

WiFi Explorer for mac(WiFi资源管理器)v3.5.1直装版

影影绰绰一往直前

首个!百度飞桨会客厅落地广州,打通AI应用落地的“最后一公里”

飞桨PaddlePaddle

人工智能 AI AI技术 百度飞桨 智能化

2024年南京等保测评机构名单看这里!

行云管家

网络安全 南京 等级保护 等保测评

判断SD-WAN是否适用于你的企业的关键问题

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

精通 GraphQL API 设计:最佳实践指南

Apifox

程序员 前端 后端 graphql GraphQL API

2023 年值得一读的技术文章 | NebulaGraph 技术社区

NebulaGraph

图数据库

如何使用MindStudio轻松搞定大模型全流程开发

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟

Apeaksoft Android Toolkit for Mac(安卓数据恢复软件)v1.2.16激活版

影影绰绰一往直前

互动数字人的对话流程!

青否数字人

数字人

回顾 2023,NebulaGraph 的这一年的变化

NebulaGraph

图数据库

夜读 PingCAP CTO 文章总结 TiDB 三个特性

TiDB 社区干货传送门

7.x 实践

SD-WAN保障服务质量的五大核心功能

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

每日一题:LeetCode-153. 寻找旋转排序数组中的最小值

半亩房顶

面试 算法 LeetCode 二分查找 Go 语言

Mac FoneLab for Android for mac(Android数据恢复软件) v5.0.30免激活版

影影绰绰一往直前

Capture One 23 Enterprise for Mac(图片编辑工具)v16.3.4.5企业汉化版

影影绰绰一往直前

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