首页 > 其他分享 >利用influxdb实现空间索引

利用influxdb实现空间索引

时间:2024-03-22 14:13:31浏览次数:23  
标签:s2 influxdb 查询 cell 索引 空间 基数 id

问题描述

influxdb官方有一个库(实验版本),说的是可以支持空间索引(如查询某一个框内的轨迹点)。但是我经常测试,查询慢的不可思议。
我在论坛曾经反馈过这个问题,目前没找到答案。
image

解决方案

1、在 influxdb 表中增加 s2_cell_id字段,通过telegraf 给该字段赋值。 (见上截图)
image

来验证下s2_cell_id的逻辑(level 设置为 12)

https://gojekfarm.github.io/s2-calc/
image

然后转换成 16 进制字符串:
image

和截图中第一行的s2_cell_id字段值一致。

2、需求是,查询一天内经过某一个区域(正方形)的所有车辆。

(1) 正方形区域用 4 个点可以表示,先计算这 4 个点的s2_cell_id(同样使用 level 12 计算)
(2)然后使用s2_cell_id作为influxdb的 sql 查询条件
select * from "iot_track" where customerId='2071' and s2_cell_id='3414b15';
image
这个 sql 快的不可思议。

(3)拿到了对应 s2 cell中的所有轨迹点,这个数据比业务实际需要的数据要多,然后后端程序再使用空间索引算法,从中找出确实在正方形内的轨迹点。

注意事项

1、s2_cell_id的 level 设置至关重要。

https://s2geometry.io/resources/s2cell_statistics.html

我用的是 12,即 5平方公里内的点,划分到一个格子中。
如果格子太小,会导致influxdb表的基数过大,会导致严重的性能问题。
在线上经过测试(64G、16 核、机械硬盘),基础为几万时,influxdb的内存、cpu 消耗都很正常。当基数为 60 万时,cpu 长期大于 300%。这时候查询、写入性能没发现明显的问题,但是感觉是个隐患。

2、我们的业务场景是,车辆的行驶范围一般都固定一个城市内部。如果同一辆车在全国各地跑,用这种方式,可能就会导致influxdb的基数显著膨胀。

扩展: influxdb的基数怎么计算的

举例,一辆车(deviceId,作为表的 tag)经过了 5 个s2 cell(每个 cell 5 平方公里,也就是一辆车的行驶范围在 25 平米公里内),这辆车上报了 5个指标(里程、经纬度、速度等),如果一共有 1 万辆车。那么基数的计算方式就是:
(5 * 5)* 10000 = 25万

另外,要考虑的是,不同种类的车上报的指标数量可能不同(如新能源车 32960 协议上报 30 个指标,而油车 808协议只上报了 5 个指标),计算基数时就不能简单地用10000 * 30

标签:s2,influxdb,查询,cell,索引,空间,基数,id
From: https://www.cnblogs.com/xushengbin/p/18089336

相关文章

  • Mysql索引
    目录一、索引1、索引的概念二、索引的作用1、索引的作用2、索引的副作用三、创建索引的原则依据1、索引创建的原则2、MySQL的优化哪些字段/场景适合创建索引,哪些不适合?①小字段②唯一性强的字段③更新不频繁,但查询率很高的字段④表记录超过300+行⑤主键,外键,唯一......
  • 良心干货,常见的MySQL索引类型枚举!!!
    在MySQL中,索引是一种用于快速查询和检索数据的数据结构。它们类似于书籍的目录,可以帮助数据库系统更快地定位到特定的数据行,而不需要扫描整个数据表。索引可以显著提高查询性能,特别是在处理大量数据时。MySQL支持多种类型的索引,每种索引都有其特定的使用场景和优势。以下是......
  • 浅谈MySQL中的外键、索引和性能优化
    当我们讨论MySQL中的外键、索引和优化时,我们通常指的是为了提高数据库查询效率、数据完整性和整体性能而采取的一系列措施。1.外键(ForeignKeys)定义:外键是一个字段,它在一个表中引用另一个表的主键。外键用于确保数据引用完整性和在两个表之间建立关系。举例:假设......
  • 【测试开发学习历程】MySQL增删改操作 + 备份与还原 + 索引、视图、存储过程
    前言:SQL内容的连载,到这里就是最后一期啦!如果有小伙伴要其他内容的话,我会追加内容的。(前提是我有学过,或者能学会)接下来,我们就要开始python内容的学习了~~ 目录1 MySQL增删改操作1.1数据添加操作1.1.1插入完整的行1.1.2插入多行1.2数据更新操作1.3数据删除操......
  • 索引
    一、索引概述索引是帮助MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。优点:提高数据检索效率,降低数据库的IO成本通过索......
  • MySQL 索引:索引为什么使用 B+树?
    Hash索引不支持顺序和范围查询;二叉查找树(BST):解决了排序的问题,极端情况下可能会退化成线性链表,查询效率急剧下降;平衡二叉树(AVL):通过旋转解决了平衡的问题,但是旋转操作效率太低; AVL树是严格的平衡二叉树,所有节点的左右子树高度差不能超过1红黑树:通过舍弃严格的平......
  • windowsVMware虚拟机中扩展linux磁盘空间
    1.虚拟磁盘磁盘扩容 VM中,关闭linux虚拟机,直接编辑虚拟机-硬盘-扩展磁盘容量    2.通过Gparted工具进行LINUX系统磁盘分区 未分区挂载前可以看到/挂载点下空间为20G:   通过虚拟机-快照-拍摄快照,操作前可拍摄快照(便于恢复之前状态),保存完后若要恢......
  • C++基础入门(命名空间,函数,引用)
    文章目录前言1,命名空间2,函数函数重载缺省参数内联函数3,引用尾声前言欢迎来到这篇关于C++的入门博客!C++是一门强大而又广泛应用的编程语言,作为一门面向对象的编程语言,C++可以让你更好地组织和管理代码,提高代码的重用性和可维护性。它广泛应用于游戏开发、嵌入式系......
  • 深入浅出mysql索引
    了解mysql是一个关系型数据库,mysql默认的最大链接数为151,一条语句的执行过程主要为:词法解析->语法解析->预处理器->优化器->执行器,这么一个流程。oracle中的sql执行流程(了解),oracle中采用了共享池来判断sql中是否存在缓存和执行计划,通过这一步骤我们可以知道应当采......
  • 倒排索引关键点普及
     倒排索引倒排索引是什么?为什么es、hbase、doris、starrocks都有倒排索引?倒排索引(英文:InvertedIndex),是一种索引方法,常被用于全文检索系统中的一种单词文档映射结构。现代搜索引擎绝大多数的索引都是基于倒排索引来进行构建的,这源于在实际应用当中,用户在使用搜索引擎查找信息......