开源时序数据库学习
计划学习使用QuestDB解决大数据日志存储场景。以下是常见引擎比较
比较项目 | InfluxDB | TimescaleDB | OpenTSDB | QuestDB |
数据模型 | Key-Value | Relational | Key-Value | Relational |
存储引擎 | 自主开发的TSI | PostgreSQL扩展程序 | Apache HBase | 自主开发 |
查询语言 | InfluxQL、Flux | SQL | OpenTSDB Query Language | SQL |
客户端库 | 多种语言的客户端库 | 多种语言的客户端库 | Java客户端库、其他语言的客户端库 | 多种语言的客户端库 |
可扩展性 | 高 | 高 | 高 | 高 |
主从复制 | 支持 | 支持 | 支持 | 支持 |
高可用性 | 支持 | 支持 | 支持 | 支持 |
社区支持 | 高 | 高 | 一般 | 一般 |
开发语言 | Go | C、C++、Python | Java | Java、C++ |
最大数据存储量 | 单机版本有存储上限,企业版和云服务没有存储上限 | 依赖于使用的 PostgreSQL 版本,企业版和云服务没有存储上限 | 无存储上限 | 无存储上限 |
响应速度 | 较快,可达毫秒级 | 较快,可达毫秒级 | 较快,可达毫秒级 | 非常快,可达微秒级 |
总体来说,这四个时序数据库都支持主从复制、高可用性和可扩展性,可以与C#结合使用,并提供多种客户端库。InfluxDB的数据模型是Key-Value,支持InfluxQL和Flux查询语言;TimescaleDB的数据模型是关系型,支持SQL查询语言;OpenTSDB的数据模型是Key-Value,支持OpenTSDB Query Language查询语言;QuestDB的数据模型是关系型,支持SQL查询语言。此外,InfluxDB和TimescaleDB都有较为活跃的社区支持,OpenTSDB和QuestDB的社区支持相对一般。QuestDB是一个相对新的时序数据库,它使用自主开发的存储引擎,支持SQL查询语言,提供多种语言的客户端库,并具有较高的可扩展性和高可用性。
这四个开源时序数据库都是免费的。
InfluxDB
部署步骤
-
下载InfluxDB二进制文件并解压缩。
-
配置InfluxDB,包括设置管理员账户、创建数据库和设置保留策略等。
-
启动InfluxDB服务,可以使用命令行启动或作为后台服务启动。
-
连接InfluxDB,使用InfluxDB的API或者第三方库连接InfluxDB进行数据的读写。
C#中的灵活运用
在C#中,可以使用InfluxDB的API或第三方库进行数据的读写,常用的第三方库包括InfluxData.Net和InfluxDB.Client。这些库支持对InfluxDB进行CRUD操作、执行查询、写入数据点等操作。此外,也可以使用InfluxQL查询语言进行数据查询和分析。
例如,在C#中使用InfluxData.Net库进行数据的读写,可以按照以下步骤进行:
-
在Visual Studio中创建一个新的C#项目,并在NuGet中添加InfluxData.Net包。
-
在代码中创建InfluxDB客户端实例并连接到InfluxDB。
-
使用InfluxData.Net库提供的方法执行查询、写入数据点等操作。
以下是一个使用InfluxData.Net库读取数据的示例代码:
csharp
using InfluxData.Net.InfluxDb; using InfluxData.Net.InfluxDb.Models; var influxDbClient = new InfluxDbClient("http://localhost:8086", "myusername", "mypassword"); var query = "SELECT * FROM mymeasurement WHERE time > now() - 1h"; var result = await influxDbClient.Client.QueryAsync(query, "mydatabase"); foreach (var serie in result) { Console.WriteLine(serie.Name); foreach (var point in serie.Values) { Console.WriteLine($"{point[0]}: {point[1]}"); } }
QuestDB
部署步骤
-
下载QuestDB二进制文件并解压缩。
-
启动QuestDB服务,可以使用命令行启动或作为后台服务启动。
-
连接QuestDB,使用QuestDB的API或者第三方库连接QuestDB进行数据的读写。
C#中的灵活运用
在C#中,可以使用QuestDB的API或第三方库进行数据的读写,常用的第三方库包括QuestDB.Client。这些库支持对QuestDB进行CRUD操作、执行查询、写入数据等操作。此外,也可以使用SQL查询语言进行数据查询和分析。
例如,在C#中使用QuestDB.Client库进行数据的读写,可以按照以下步骤进行:
-
在Visual Studio中创建一个新的C#项目,并在NuGet中添加QuestDB.Client包。
-
在代码中创建QuestDB客户端实例并连接到QuestDB。
-
使用QuestDB.Client库提供的方法执行查询、写入数据等操作。
csharp
using QuestDB.Client; using QuestDB.Client.Models; var connectionString = new ConnectionStringBuilder() .WithHost("localhost") .WithPort(9000) .WithUser("myusername") .WithPassword("mypassword") .Build(); using var connection = new QuestDbConnection(connectionString); await connection.OpenAsync(); using var command = connection.CreateCommand(); command.CommandText = "SELECT * FROM mytable WHERE timestamp > now() - 1h"; using var reader = await command.ExecuteReaderAsync(); while (await reader.ReadAsync()) { var id = reader.GetFieldValue<int>("id"); var timestamp = reader.GetFieldValue<DateTime>("timestamp"); var value = reader.GetFieldValue<double>("value"); Console.WriteLine($"id: {id}, timestamp: {timestamp}, value: {value}"); }
相关文章:
开源时序数据库学习
计划学习使用QuestDB解决大数据日志存储场景。以下是常见引擎比较 比较项目 InfluxDB TimescaleDB OpenTSDB QuestDB 数据模型 Key-Value Relational Key-Value Relational 存储引擎 自主开发的TSI PostgreSQL扩展程序 Apache HBase 自主开发 查询语言 InfluxQ…...

字节测试工程师悄悄告诉我的软件测试、测试开发常用的测试策略与测试手段
目录 前言 测试策略的关注重点 测试策略主要内容 总体测试策略 初级版本测试策略 跟踪测试执行 版本质量评估 后续版本测试策略 发布质量评估 测试手段 前言 测试策略是指在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的纲要ÿ…...
我常用的shell 进制转换工具
一、进制的一些基础知识 1. 二进制(binary) 二进制的取值是0和1; 前缀是 0b 2. 八进制(Octal) 八进制的取值是0-7;前缀是 O 3. 十进制(decimal) 十进制的取值是0-9;没有前缀 …...

手写vue(二)响应式实现
名词解释:vm:指Vue实例一、目标效果vue定义(1)新建vm时,可以通过一个data对象,或者data函数,其属性可以通过vm直接访问,而data对象可以通过vm._data获取(2)修…...
mysql数据库常问面试题
1、NOW()和CURRENT_DATE()有什么区别? NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。 CURRENT_DATE()仅显示当前年份,月份和日期。 2、CHAR和VARCHAR的区别? (1)…...

AI风暴 :文心一言 VS GPT-4
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 文心一言 VS GPT-4 文心一言:知识增强大语言模型百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动&#…...

VR全景城市,用720全景树立城市形象,打造3D可视化智慧城市
随着城市化进程的加速,城市之间的竞争也日益激烈。城市管理者们需要寻求新的方式来提升城市的品牌形象和吸引力。在这个过程中,VR全景营销为城市提供了一种全新的营销手段,可以帮助提升城市的价值和吸引力。一、城市宣传新方式VR全景营销是一…...

javaweb窗口服务人员分析评价系统ssh
A)后台管理员模块:通过该功能模块,管理员可以修改自己的密码,并对管理员进行添加和删除操作。 B)注册用户模块:通过该功能模块,管理员可以查看注册用户的基本信息,对存在问题的用户进…...

树莓派Pico W无线开发板UDP协议MicroPython网络编程实践
树莓派Pico W无线开发板(简称Pico W)是树莓派基金会于2022年6月底推出的搭载无线通信芯片的树莓派Pico开发板。本文在介绍树莓派Pico W无线开发板接口信号和TCP/IP和UDP通信协议基础上,给出Pico W无线开发板的UDP协议MicroPython网络编程实例…...

跨域解决方案
跨域解决方案 1.跨域基本介绍 文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS 跨域问题是什么? 一句话:跨域指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对 javascr…...
springboot的统一处理
在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。 拦截器的实…...

C/C++每日一练(20230319)
目录 1. 反转链表 II 🌟🌟 2. 解码方法 🌟🌟 3. 擅长编码的小k 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …...

GitHub 上有些什么好玩的项目?
前言 各个领域模块的都整理了一下,包含游戏、一些沙雕的工具、实用正经的工具以及一些相关的电商项目,希望他们可以给你学习的路上增加几分的乐趣,我们直接进入正题~ 游戏 1.吃豆人 一款经典的游戏开发案例,包括地图绘制、玩家控…...
蓝桥杯刷题第十二天
问题描述给定一个正整数 n ,请问 n 的十进制表示中末尾总共有几个 0 ?输入格式输入一行包含一个正整数 n。输出格式输出一个整数,表示答案。评测用例规模与约定对于所有评测用例,1 < n < 1000000000。运行限制最大运行时间&…...

开发也可以很快乐,让VSCode和CodeGPT带给你幸福感
CodeGPT 是一款 Visual Studio Code 扩展,可以通过官方的 OpenAI API 使用 GPT-3 (预训练生成式转换器) 模型,在多种编程语言中生成、解释、重构和文档化代码片段。CodeGPT 可用于各种任务,例如代码自动完成、生成和格式化。它还可以集成到代…...

【Linux】基本指令介绍
前言从今天开始,我们一起来学习Linux的相关知识,今天先来介绍怎么登录Linux,并且介绍一些Linux的基本指令。使用 XShell 远程登录 Linux很多同学的 Linux 启动进入图形化的桌面. 这个东西大家以后就可以忘记了. 以后的工作中 没有机会 使用图…...
JQuery介绍
文章目录一. JQuery介绍二. JQuery使用三. JQuery选择器四. JQuery选择集过滤五.JQuery选择集转移六. JQuery获取和操作标签内容七. JQuery获取和设置元素属性八. JQuery事件九.JQuery事件代理- 事件冒泡- 事件绑定的问题- 事件代理一. JQuery介绍 定义: jquery是JS的一个函数…...

Selenium基础篇之八大元素定位方式
文章目录前言一、如何进行元素定位?1.右击元素-检查2.F12-选择工具点击元素3.借助selenium IDE二、八大元素定位方式1.ID1.1 方法1.2 举例1.3 代码1.4 截图2.NAME2.1 方法2.2 举例2.3 代码2.4 截图3.CLASS_NAME3.1 方法3.2 举例3.3 代码3.4 截图4.TAG_NAME4.1 方法4…...

C语言的灵魂---指针(基础)
C语言灵魂指针1.什么是指针?2.指针的大小3.指针的分类3.1比较常规的指针类型3.2指针的解引用操作3.3野指针野指针的成因:4.指针运算4.1指针加减整数4.2指针-指针1.什么是指针? 这个问题我们通常解释为两种情况: 1.指针本质&#…...
带你一文透彻学习【PyTorch深度学习实践】分篇——线性模型 梯度下降
分享给大家一段我国著名作家、散文家史铁生先生的一段话: 把路想象的越是坎坷就越是害怕,把山想象的越是险峻就越会胆怯,把别人想象的越是优秀就越是不敢去接近。惯于这样想象的人,是天生谦卑的人。 --------史铁生《关于恐惧》 🎯作者主页:追光者♂🔥 �…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...