MemSQL可以为时间序列应用做些什么

article/2025/9/13 22:11:58

640?wx_fmt=gif




版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其内容的真实性。如果其他媒体、网站或其他任何形式的法律实体和个人使用,必须经过著作权人合法书面授权并自负全部法律责任。不得擅自使用腾讯云数据库团队的名义进行转载,或盗用腾讯云数据库团队名义发布信息。


在MemSQL使用中,我们发现人们对时序数据库的场景非常感兴趣。当遇到以下情况时尤其如此:(1)高效率的事务获取,(2)低延迟查询和(3)高并发查询率。

 

在下文中,我将展示如何使用MemSQL用作一个强大的时序数据库,并通过简单的查询和用户定义的函数来说明这一点,这些函数将展示如何进行时间序列 - 频率转换,平滑等操作。

 

我还将介绍如何快速加载时序数据点,并且没有规模限制。

 

用SQL操作时间序列

与大多数时序数据库不同,MemSQL支持标准SQL,包括内部和外部联接,子查询,通用表表达式(CTE),视图,用于日期和时间操作的丰富标量函数,分组,聚合和窗口函数。我们支持所有常见的SQL数据类型,包括具有微秒精度的datetime(6)类型,该类型非常适合作为时间序列的时间戳。

 

在金融交易系统中,一种常见的时间序列分析方法是操纵股票价格。下面是一个使用标准SQL进行这种计算的简单示例。我们使用一个包含多个股票时间序列的表格,并为每个股票生成高,低,开盘和收盘:

640?wx_fmt=png


此查询使用标准SQL 窗口函数为表中的每个符号生成高,低,打开和关闭值,假设“ticks”包含最近交易日的数据。

640?wx_fmt=png


类似的查询可用于创建“烛台图表”,这是一种流行的金融时间序列报表样式,如下图所示,可显示连续时间间隔内证券的开盘价,最高价,最低价和收盘价:

640?wx_fmt=png


例如,该查询生成一个表,该表可以在三分钟的时间间隔内直接转换为烛台图表:

640?wx_fmt=png


Results:

结果:

640?wx_fmt=png

 

平滑是时间序列管理的另一个常见需求。这个查询为股票“ABC”生成一个平滑的价格序列,平均最后三个记录的价格:

 

Results:

结果:

640?wx_fmt=png

 

使用可扩展性来增加MemSQL的时间序列功能

MemSQL支持用户定义的标量函数(UDF),聚合函数和存储过程(MPSQL语言)的可扩展性。MemSQL将UDF和存储过程编译为机器代码,以获得高性能。实际上,我使用了可扩展性来创建上一节中用作UDF 的time_bucket()函数(如下面的附录所示); 这为其他特定时间序列产品中的类似功能提供了相同的功能。您可以很容易地创建一个函数或表达式来按时间间隔存储,例如秒、分钟、小时或天。时间序列数据的一个常见需求是执行插值。

 

例如,假设有一个时间序列,其中随机间隔的点平均间隔为30秒。可能有几分钟没有数据点。因此,如果您将原始(不规则)时间序列数据转换为具有一分钟点的常规时间序列,则可能存在间隙。如果要为没有间隙的绘图提供输出,则需要从间隙前后的值中插入间隙的值。在MemSQL中实现存储过程非常简单,方法是获取一个查询结果,并输出一个行集,其中的空格插入到一个临时表中。

 

然后可以使用ECHO命令将其发送回客户端应用程序。此外,MemSQL支持用户定义的聚合函数,这些函数可用于实现有用的时间序列操作,例如获取序列中第一个和最后一个值的简写,而无需特定的窗口函数。根据一个名为FIRST()的用户定义的聚合函数(UDAF),考虑此查询以在每三分钟的交易中获得股票ABC的第一个值:

640?wx_fmt=png

 

Results:

结果:

640?wx_fmt=png

 

FIRST()和类似的LAST() UDAF的实现在下面的补充材料部分中给出。

 

时间序列压缩和生命周期管理

MemSQL擅长处理时间序列事件的突发插入流量和节省空间很重要的历史时间序列信息。对于突发插入流量,您可以使用MemSQL行存储表来保存时间序列事件。对于较大和较长生命周期的时间序列事件集或已经老化的较老的时间序列数据集(因此不再更新它们),MemSQLcolumnstore是一种很好的格式,因为它可以非常有效地压缩时间序列数据。此外,它保存在磁盘上,因此主内存大小不限制您可以存储的数据量。

 

可扩展的时间序列摄取

构建时间序列应用程序时,数据可以有许多来源,包括应用程序,文件系统,S3,HDFS,Azure Blob商店和Kafka队列。MemSQL可以从所有这些来源快速地获取数据。MemSQL Pipelines专门用于快速轻松地从这些源加载数据流,无需过程编码即可在MemSQL中建立快速的事件流。MemSQL可以以惊人的数据速率提取数据。在最近的一次测试中,我使用了一个双节点MemSQL集群,每个节点在Intel Xeon Platinum 28核系统上运行,每秒直接从应用程序插入2,850,500个事件,具有完整的事务完整性和持久性。可以使用直接加载或Kafka管道获得更好的速率。如果你必须扩展更高,只需添加更多节点 - 没有实际限制。

 

当通用MemSQL适合时间序列时

我们已经看到,时间序列数据管理市场已经分化为时间序列专用产品,使用它们自己的专用语言;以及可以与使用SQL的标准报告和业务智能工具互操作的扩展SQL系统。MemSQL属于第二类。MemSQL适用于需要快速查询,低延迟查询和高并发性的时间序列应用程序,没有扩展限制,并且受益于SQL语言功能和SQL工具连接。

 

许多特定于时间序列的产品在数据管理方面都有缺陷。有些应用程序缺乏扩展功能,限制了它们可以处理的问题的大小,或者迫使应用程序开发人员在代码中构建复杂的分片逻辑,以便在多个实例之间分割数据,这将耗费宝贵的人力资源,而这些人力资源可以更好地投入到应用程序业务逻辑中。其他系统的解释查询处理器无法跟上我们这样的最新查询执行实现。有些缺少SQL数据库常见的事务处理完整性功能。MemSQL让时间序列应用程序开发人员充满信心地前进,他们知道自己不会遇到规模瓶颈,并且可以使用所有熟悉的工具——任何可以连接到SQL数据库的工具。

 

总结

MemSQL是一个用于管理时间序列数据的强大平台。它支持快速方便地加载事件流的能力,并且可以无限扩展。它支持完整的SQL,可以使用SQL 92的所有标准功能,以及添加的窗口函数扩展来实现复杂的查询。它支持许多开发人员对各种应用程序(包括时间序列)所需的事务,高速并发更新和查询以及高可用性技术。而且,您最喜欢的SQL兼容工具可以连接到MemSQL,这使得MemSQL成为时间序列的强大平台。

 

640?

活动推荐:腾讯TEG与CCF(中国计算机协会)合办的腾讯技术工程沙龙“走进工业互联网”将在4月14日(周日)举办啦!扫码即可报名~


640?wx_fmt=jpeg

本文转自公众号【腾讯数据库TencentDB】,扫描以下二维码可以关注。

640?wx_fmt=png


http://chatgpt.dhexx.cn/article/6mD41a3G.shtml

相关文章

MySQL-SQL优化

文章目录 一、插入数据1、insert2、大批量插入数据 二、主键优化(1)数据组织方式(2)页分裂(3)页合并(4)索引设计原则 三、order by优化四、group by优化五、limit优化六、count优化1…

每秒1.28万亿行,最快的分布式关系数据库MemSQL又破记录了!

众所周知,如果交互式响应时间小于四分之一秒,那么人们会获得令人难以置信的满意度。当你提供的响应时间下降到大约四分之一秒时,交互对用户而言是即时的。 但是,由于大数据集和并发需求,给所有客户提供的速度水平似乎…

速度最快的数据库---MEMSQL的安装与部署

1. 什么是MEMSQL 前Facebook工程师创办的MemSQL公司获500万美元投资。号称世界上最快的分布式关系型数据库,兼容MySQL但快30倍,能实现每秒150万次事务。原理是仅用内存并将SQL预编译为C。2012年12月14,MemSQL 1.8 发布,号称最快的…

memsql-官宣世界最快的内存关系型数据库安装部署

官网地址:https://www.memsql.com/ 获取到的license:BGNhZmY4YjViM2Y1OTRhOTdiOTNlNTE0NmU3MGJhN2NlAAAAAAAAAAAEAAAAAAAAAAwwNAIYJLLETZcXn8NHKfJAS/Iai5hUjzaCMQ5PAhht2vDZAS1q1a49DPsq5gMGKY9AI0wmaSkAAA 1,memsql官网介绍 MemSQL 是一个分布式关系数…

memSQL简介

前言 由前Facebook工程师创办的MemSQL,号称世界上最快的分布式关系型数据库,兼容MySQL但快30倍,能实现每秒150万次事务。原理是仅用内存并将SQL预编译为C。 MemSQL 提供免费的开发者版本(数据限制32G)和全功能试用版…

统一异常处理解决方案

💁 作者:小瓦匠 💖 欢迎关注我的个人公众号:小瓦匠学编程。微信号:xiaowajiangxbc 📢 本中涉及到的所有代码资源,可以在公众号中获取,关注并回复:源码下载 👉…

SpringBoot统一异常处理详解

文章目录 一、概述1、统一异常处理介绍2、原理和目标 二、Assert(断言)1、概述2、Assert自定义实战2.1 自定义接口Assert2.2 自定义异常2.3 Enum整合2.4 实战检测 三、统一异常处理器1、异常处理器说明1.1 handleServletException1.2 handleBindException和handleValidExceptio…

Shell 异常处理

原创:转载请注明出处 #!/bin/bash ##################服务器执行以下脚本############################# ## 重新上传脚本到服务器 -> 部署启动的脚本#当任何一行的命令执行错误的时候(比如命令写错了)直接退出,不继续往下执行…

java中的统一异常处理

目录 统一异常处理的原因 如果进行统一异常处理 1、编写统一异常处理类与方法 2、编写自定义异常类 3、定义异常枚举类 4、抛出指定异常 小提醒 统一异常处理的原因 在我们写代码的时候,因为各种场景需要进行各种校验,我们就可能会进行多种响应&…

JNI异常处理

前言 本文所要介绍的异常处理是指通过JNI调用java层方法时产生的异常处理,并不是指JNI调用Native层函数时产生的异常处理,如果童鞋们想要了解Native层的异常处理可以参考笔者之前的文章《C之异常处理》 按照java的经验,当发生异常而又没有捕…

Python——异常处理

文章目录 异常Python中的异常类捕获与处理异常自定义异常类with语句断言 异常 异常是在程序执行过程中发生的影响程序正常执行的一个事件。异常是Python对象,当Python无法正常处理程序时就会抛出一个异常。一旦Python脚本发生异常,程序需要捕获并处理它…

python异常处理输入不是整数_Python异常处理

异常处理: Python程序运行语法出错会有异常抛出不处理异常会导致程序终止 示例:用户输入一个整数转换成int型,如果用户输入的不是数字而是其他例如字母等则会出现异常 不使用异常处理代码的处理方法 #cat 异常处理.py abc = input("请输入一个数字") if not ab…

ARM的异常处理机制

异常种类 ARM共有如下7种异常模式: 复位(RESET):当处理器复位引脚有效时,系统产生复位异常中断。复位异常中断通常在系统加电和系统复位时发生,直接跳转到复位中断向量处执行称为软复位。未定义的指令(UDE…

spring异常处理

在项目中采用spring的异常处理机制: 示例一、在Controller中加ExceptionHandler注解定义异常拦截的方法,在方法中定义返回的页面: Controller public class ExceptionTestController {ExceptionHandlerpublic String handleException(Excep…

C语言异常处理

文章目录 前言一、 异常表达二、 异常报告三、 异常处理 前言 错误与异常: 错误与异常都是在程序编译或者运行时出现的错误, 不同的是,异常可以被开发人员捕捉和处理;而错误,一般不需要开发人员处理(也无法…

SpringBoot全局异常处理

文章目录 异常处理方案分类基于请求转发基于异常处理器基于过滤器 常见异常处理实现方案1. BasicExceptionController2. ExceptionHandler3. ControllerAdviceExceptionHandler4. SimpleMappingExceptionResolver5. HandlerExceptionResolver6. Filter 全局异常处理实现方案1. …

springboot整合之统一异常处理

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

C++ 异常处理

目录 一、异常的定义 二、异常的抛出和捕获 1.throw 2.try...catch 3.异常安全 4.异常规范 三、系统预定义异常 四、用户自定义异常 一、异常的定义 异常在C用于错误处理,C语言中一般使用返回值表示错误,C对错误处理进行了扩展,统一使…

关于异常处理的知识整理

目录 1.什么是异常? 2.异常继承结构 3.异常结构继承图 4.关于异常处理的两种方式: 5.异常对象有两个非常重要的方法 1.什么是异常? 程序在执行过程中不正常的情况称为异常,以类和对象的形势存在,可以通过异常类&am…

异常处理---

异常 异常处理 例: public class Demo{public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method(){int[] arr{1,2,3};System.out.println(arr[3]);//数组索引…