KaiwuDB 乱序数据处理功能解读

news2024/12/25 0:03:35

01 背景一览

在时序数据写入数据库的场景中,由于存在网络延迟等问题,可能会出现需要写入数据的时间戳小于已写入数据的最大时间戳的情况,这类数据统称为乱序数据。乱序数据的产生几乎是不可避免的,同时,乱序数据的写入会影响所有数据的排序和查询,因此,我们需要在支持乱序数据写入的基础上,也能良好地支撑乱序数据高效查询。

02 流程概述

在处理乱序数据时,指定时间窗口内(比如 10 分钟或 1 小时)的乱序数据会根据去重策略处理之后存储下来,时间窗口之外的乱序数据会被丢弃。下图是乱序数据写入的基本流程:

其中,需明确 3 个要点:

  • 时间窗口是指表最新数据时间戳的时间点再前置的一段时间,在表没有新数据的写入时,它的时间窗口不会变。
  • 配置文件中存在参数:ts_st_iot_disorder_interval,用以支持乱序数据写入的时间窗口,单位:秒。此配置项的值不能超过分区时间间隔数值。
  • 数据是否乱序的判断依据为写入数据的时间戳小于等于写入的表对象中存储的所有数据最大时间戳。

03 场景示例

1、正常写入流程
时间分为系统时间和数据时间两条线。数据时间每个表都不相同,因此分为表 1 的数据时间和表 2 数据时间两条线。

  • 场景1:顺序写入两天前的数据场景如上图所示,表 1 的顺序写入历史分区 1 的场景,写入的顺序数据会被存储到对应的分区中,历史分区写入失败并抛错。

  • 场景2:时间窗口内写入乱序数据如上图所示,表 2 写入时间窗口内的乱序数据,写入的数据会被存储到活动分区 2 中,活动分区 2 正在另一个线程中进行分区压缩,写入操作也会成功。

  • 场景3:超出时间窗口的乱序数据写入当数据库开启压缩功能,并且配置乱序时间窗口为 1 小时,写入比表最新记录时间戳早 1 小时以前的乱序数据会失败。写入的数据会被过滤掉,写入到日志中。

2、导入数据流程
导入数据中也会存在有乱序数据的情况,这种场景下对于乱序数据的处理同正常写入流程保持一致。

  • 数据本身处理:逐行解析 CSV 文件中的数据,判断第一列数据是不是有效的时间/时间戳类型,如果不是报错返回;如果是有效时间数据,判断数据所属分区,获取分区 bt。如果该数据时间戳大于当前分区中已有数据最大时间戳,直接 pushback;否则需要根据去重配置逻辑处理乱序数据。

  • 适配降采样和预计算逻辑:导入的数据过程中需要更新 kaiwudb_jobs 系统任务表中 url 的记录状态为 expired;导入完成后通知预计算/降采样,对涉及的数据重新计算/处理,或者等待下一次预计算任务被系统调度时再重算。

导入结束后,通知预计算和降采样进行重计算或者结果更新,以及更新 lastbt。

3、降采样流程

乱序数据写入之后,降采样结果需要根据最新的数据进行更新。

  • 处理导入历史分区的乱序数据:导入归属历史分区的乱序数据时,更新 kaiwudb_jobs 系统任务表中 url=[database/partition/table_name] 的记录状态为 expired,后续会对该分区表重新进行对应降采样规则处理。

  • 处理 insert 写入历史分区数据:在对 insert 数据表的历史分区解压时,更新 kaiwudb_jobs 系统任务表中 url=[database/partition/table_name] 的记录状态为 expired,后续样会对该分区表重新进行对应降采样规则的处理。

4、预计算流程
乱序数据写入之后,预计算结果需要根据最新的数据进行更新。

  • 处理 insert 写入乱序数据:insert 每出现一条乱序数据就插入一条,这样的做法能更大程度保证预计算结果正确性。

  • 处理导入的乱序数据:导入目前按照分区表为单位处理,每个分区表导入过程中记录乱序开始时间戳和结束时间戳,当前分区表导入完成后调用预计算接口进行重算。

04 总结

乱序数据处理的场景中,涉及到的功能及联动模块较多,需要进行同步处理及更新。当数据库具备完善的乱序数据处理后,可更好地适配用户业务场景,大幅提高数据库的多场景适用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从概念到实践:揭开枚举与联合体在数字化创新时代的神秘面纱

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 在编程的世界中,枚举和联合体是两种非常基础且重要的数据结构。它们各自具有独特的特点和用途,为程序员提供…

Android Studio中查看和修改project的编译jdk版本

android studio中查看和修改project的编译jdk版本操作如下: File->settings->Build,Execution,deployment->Build Tools->Gradles 进入Gradles页面可以查看并修改project的编译jdk版本,如图所示

Open CASCADE学习|平面上的PCurve

曲面上的曲线PCurve,字面上理解即为参数曲线(Parametric Curve)。在几何建模中,PCurve通常被描述为附加在参数曲面之间公共边上的数据结构。从更具体的定义来看,当给定一个曲面方程,并且其参数u和v是另一个参数t的函数时&#xff…

企业微信认证后可以修改主体吗?

企业微信变更主体有什么作用?如果原有的公司注销了,或者要更换一家公司主体来运营企业微信,那么就可以进行变更主体,变更主体后才可以保留原来企业微信上的所有用户,否则就只能重新申请重新积累用户了。企业微信变更主…

SQLite数据库文件格式(十五)

返回:SQLite—系列文章目录 上一篇:SQLite 4.9的虚拟表机制(十四) 下一篇:SQLite—系列文章目录 ► 目录 本文档描述和定义磁盘上的数据库文件 自 SQLite 以来所有版本使用的格式 版本 3.0.0 (2004-06-18). 1. 数据库文件 …

高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例一全网唯一

高级Java开发工程师手把手教你用AI人工智能帮你写Java代码实际案例一 一、前言 现在AI人工智能概念炒的很火,人们到处听到的讯息是AI人工智能颠覆我们的生活,或者是代替什么岗位,但是到底AI能帮助到我们什么,能给我们生活带来什…

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…

基于SSM框架JAVA仓库管理系统源代码Mysql数据库(可当毕设,实训项目,设计大赛)

仓库管理系统实现的功能包括店铺管理,员工管理,部门管理,商品管理,权限管理,入库管理,出库管理,盘点管理,统计管理等功能。该项目采用了Mysql数据库,Java语言&#xff0c…

龙蜥社区「人人都可以参与开源」一次奇妙的开源之旅

前言: 3月17日,马斯克宣布开源Grok-1,这一举措使Grok-1成为当前参数量最大的开源大语言模型,拥有3140亿参数,远超OpenAI GPT-3.5的1750亿。 开源可促进技术高质量发展,让技术迭代更快,更能适应各行各业的发…

学习操作系统之多道批处理系统

1964年IBM生产了第一台小规模集成电路计算机IBM System/360(第三代计算机),并为该计算机开发了OS/360操作系统,是第一个多道批处理系统。 多道批处理的运行机制: 多道批处理系统同样要求事先将多道作业存放到外存上并…

无人机倾斜摄影技术在智慧城市中的应用

随着智慧城市的不断发展和完善,新兴热门技术也不断崛起。无人机技术作为其中之一,具有操作简单、应用灵活等优势,受到了各个行业的青睐。现阶段,无人机技术与5G移动通信系统、人工智能系统深度融合,实现了无人机技术的…

优卡达节能科技给您解读2024第13届生物发酵展

参展企业介绍 苏州优卡达节能科技有限公司位于江苏省苏州市相城区,它脱胎于苏州化工机械厂,是专一技术研发生产螺旋板式换热器的厂家。广泛应用于冶金、焦化、纺织、医药、食品、机械、电力、环保、暖通节能及需要热量转换等工业。 公司具有具有多名研…

IRIS / Chronicles 数据结构备忘录

数据结构的内容主要涉及到索引和全局变量。 这部分的内容的问题在于概念多,和普通的数据库对应的内容也不太一样,需要花点时间了解。 networked items 有关英文的解释是: Networked items that point to databases that use padded-string…

LeetCode-移除元素

题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

📝个人主页:哈__ 期待您的关注 在日常使用Java的时候,我们都接触过new这个关键字,那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢? 实际上要去判断一个类的初始化的顺序,需要分一下情况&…

《C++程序设计》阅读笔记【6--类(1)】

🌈个人主页:godspeed_lucip 🔥 系列专栏:《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C程序设计获取下载链接。 1 类1.1 概述1.2 构造函数1.3 析构函数1.4 重载构造函数 2 总结 1 类…

谷歌建站用什么程序比较好?

建网站这回事,说容易也容易,现如今市面上建站的程序多如牛毛,哪怕你不会代码也能建一个漂亮的网站,但网站搭建出来是为了什么?是为了获取流量,拉到业务,那么,建站的时候你就要考虑谷…

关于泛型类型参数的约束

默认情况下,泛型类型参数T可以是任意类型;如果我们希望泛型类型参数希望是某个类型或者是实现某个接口,或者继承某个类,又或者是某一个类型比如值类型,这就需要对类型参数T进行约束,泛型类型参数的约束语法…

二维码门楼牌管理应用平台建设:场所记录与智能化管理

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的建设意义四、结语 前言 随着科技的飞速发展,二维码技术已经深入到了我们生活的方方面面。在城市管理中,二维码门楼牌管理应…

如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…