- 博客(172)
- 资源 (15)
- 收藏
- 关注
原创 PostgreSQL 谓词信息采集插件 pg_qualstats 源码分析
在处理复杂的 PostgreSQL 数据库时,性能优化一直是数据库管理员和开发人员关注的重点;pg_qualstats 作为一款强大的扩展工具,为数据库性能调优提供了独特的视角和有力的支持;本文深入介绍 pg_qualstats 的使用方法,并对其源码进行分析,旨在更好地理解和运用这一工具
2025-03-24 07:30:00
4336
2
原创 PostgreSQL 插件的事务回调机制
在 PostgreSQL 插件开发中,我们经常需要对数据库事务的不同阶段进行监控或控制;例如,在事务开始、提交、回滚时执行特定逻辑,这时就可以借助 PostgreSQL 提供的 XactCallback 机制来实现事务回调事件的钩入(hook)。本文将介绍事务回调机制的基础原理,以及在实际开发中如何实现一个简单的事务回调事件 Hook 插件。
2025-01-06 07:30:00
2321
原创 CentOS 7 桌面版中使用 VSCode 报 OS keyring 无法获取错误 - 解决记录
打开 VSCode 时会有这样的小窗报错 You're running in a GNOME environment but the OS keyring is not available for encryption
2024-12-25 07:00:00
3443
原创 PostgreSQL 插件的 Hook 机制
PostgreSQL 作为一个高度可配置和可扩展的开源数据库系统,提供了较为强大的扩展机制来满足各种场景下的自定义需求。其中,进程级上的 Hook 机制(钩子机制)是其重要组成部分之一,允许在 PostgreSQL 内部流程中插入自定义功能。本文将进一步讨论 PostgreSQL 中 Hook 机制的基本原理,举例解释举个类型的 Hook,并提供实现一个自定义 Hook 功能的清晰步骤。
2024-12-16 07:30:00
4199
原创 Apache Arrow IPC 消息格式
Apache Arrow 的 IPC(Inter-Process Communication,进程间通信)消息格式是一种用于在不同进程间高效传输数据的序列化格式,它允许不同系统或语言环境中的应用程序以统一的方式交换数据,而无需关心数据的具体存储细节。其 IPC 消息格式包括两种主要的二进制格式: Streaming 流式格式和 RandomAccessFile 随机访问格式 ,本文介绍了这两种消息格式的具体形式和其元数据使用到的 FlatBuffers 序列化方法,并通过一个简例说明消息格式的实际使用
2024-09-23 07:30:00
5872
原创 Apache Arrow 的列式内存格式
Apache Arrow 的列式存储格式是一种内存数据组织标准,它通过物理布局、Array(数组)、Schema(模式)和 RecordBatch(记录批次)等,优化了大数据的存储与处理。这种格式以列而非行来存储数据,从而提高了数据访问效率,支持跨平台和多种编程语言,且无需序列化开销,适应现代硬件架构,特别适合于高效的数据分析操作。
2024-08-29 07:30:00
7261
原创 进阶数据结构 BTree 的插入与删除操作实现
在数据库系统和文件系统中,高效的数据组织与管理是关键之一。B-Tree(Balanced Tree)作为一种平衡搜索树结构,在这一领域发挥着重要作用。本文详细探讨了 B-Tree 的基本概念以及对其进行插入与删除操作的实现,旨在帮助读者理解 B-Tree 的工作原理以及如何有效地维护这种数据结构。
2024-02-26 08:00:00
5547
1
原创 代码质量管理平台 SonarQube 社区版搭建及 C 代码分析
本文介绍如何在 CentOS 环境下搭建代码质量管理平台 SonarQube 社区版,并使用 PostgreSQL 数据库作为其后端数据库;同时,详细说明了如何配置 SonarQube 并使用 sonar-cxx 开源插件进行 C 语言系列项目的静态代码分析。
2024-01-31 08:00:00
7665
1
原创 时序数据库 性能测试工具 TSBS
TSBS 是一个时序数据处理(数据库)系统的性能基准测试平台,提供了 IoT、DevOps 两个典型应用场景,它由 Timescale 开源并负责维护。作为一个性能基准测试平台,TSBS 具有便捷、易用、扩展灵活等特点,涵盖了时序数据的生成、写入(加载)、多种类别的典型查询等功能,并能够自动汇总最终结果。由于其开放开源的特点,得到了众多数据库厂商的支持,作为专业的产品性能基准测试平台被若干数据库厂商广泛使用。
2023-12-01 08:00:00
3388
2
原创 PostgreSQL 机器学习插件 MADlib 安装与使用
MADlib 一个可以在数据库上运行的开源机器学习库,支持 PostgreSQL 和 Greenplum 等数据库;并提供了丰富的分析模型,包括回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型,KMEAN 聚集,文本挖掘,数据校验等。本文介绍,如何在 Linux 环境中为 PostgreSQL 数据库使用源码编译安装 MADlib 插件,并提供的基础例子演示通过 SQL 使用 MADlib 机器学习插件进行数据分析。
2023-11-14 08:00:00
2568
3
原创 本地部署清华大模型 ChatGLM3
ChatGLM 是一个开源的、支持中英双语的对话语言模型,由智谱 AI 和清华大学 KEG 实验室联合发布,基于 General Language Model (GLM) 架构,具有 62 亿参数。ChatGLM3-6B 更是在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上增加了更多特性。虽然,目前 ChatGLM 比 GPT 稍有逊色,但是,在部署后可以完全本地运行,完全由自己掌控!本文介绍怎么在 Linux 服务上部署 ChatGLM3 服务,并通过多种方式使用本地部署地大模型。
2023-11-03 08:00:00
28592
57
原创 PostgreSQL 插件 CREATE EXTENSION 原理
PostgreSQL 提供了丰富的数据库内核编程接口,允许开发者在不修改任何 Postgres 核心代码的情况下以插件的形式将自己的代码融入内核,扩展数据库功能。本文探究了 PostgreSQL 插件的一般源码组成,梳理插件的源码内容和实现方式;并介绍了 PostgreSQL 内核源码中处理 CREATE EXTENSION 创建插件的实现原理。
2023-10-24 08:00:00
7679
11
原创 GDB 调试 Coredump
Core dump(核心转储)是指在程序运行过程中发生错误或异常时,操作系统将程序的内存内容保存到磁盘上的一种文件。这个文件包含了程序崩溃时的内存状态,包括变量的值、函数调用栈、寄存器状态等信息。通过分析 coredump 文件,可以了解程序崩溃的原因,以便进行调试和修复。
2023-09-20 08:00:00
8331
原创 时序数据库 TimescaleDB 安装与使用
TimescaleDB 是一个时间序列数据库,建立在 PostgreSQL 之上。然而,不仅如此,它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL),所有这些都具有完整的 SQL 支持。本文介绍 TimescaleDB 的 CentOS 7 环境源码编译安装与使用。
2023-09-14 08:00:00
13748
原创 时序数据库 TimescaleDB 基础概念
时序数据在许多领域中具有广泛的应用,例如金融市场分析、气象预测、交通流量监测、生产过程监控等,时序数据通常是大规模的、高维度的、需要实时计算和分析,针对时序数据的特点与其所带来的挑战,针对时序数据处理所面临的挑战,通用数据库处理大规模数据效率低下,且无法提供丰富的数据保留策略、连续查询、灵活的时间聚合等功能。时序数据库则是为处理时序数据而设计的数据库,目的是实现时序数据的高效采集、存储、计算和应用。
2023-09-08 12:29:54
8378
原创 GDB 基础使用与多进程调试
GDB 全称“GNU symbolic debugger”是 Linux 下常用的程序调试器,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。
2023-05-28 08:00:00
11135
原创 Linux 用户管理与文件权限
Linux 是一个多用户系统,它允许多个用户同时登陆主机,并为他们分配不同的资源和工作环境进行使用。当然,不同的用户都有文件的私有需求,所以设置不同用户文件的权限管理十分重要。
2023-05-02 13:57:16
10450
2
原创 Win11 安装 WSL2 实现便捷 Linux 开发环境
我们日常工作学习中有很多涉及与 Linux 系统的交互,但是如果用的是 Win 系统通常需要构建虚拟机或者安装双系统来实现,但是 WSL 的出现让在这种需求更易实现了。WSL 全称是(Windows Subsystem for Linux,适用于Linux的Windows子系统),使用 WSL 一方面可以享受 Windows 系统的稳定性,同时可以并存 Linux 环境,还可以直接互相调用,极大地方便了开发人员进行开发工作。
2023-04-08 08:30:00
11063
2
原创 Win10 环境配置 Github SSH Key
使用 Git 关联远程仓库通常可以使用 HTTP 协议或者 SSH 协议,在使用上 SSH 只需要一次配置,之后都不需要进行用户密码验证;但是 HTTP 方式每次 Push 操作都需要验证用户名和密码。当然,HTTP 方式更方便开源,匿名用户可以随意进行克隆和代码阅读;在个人项目使用的时候则需要反复进行 Push 操作, 可以通过配置 SSH 实现快捷的代码提交。
2023-04-02 08:00:00
12291
4
原创 Golang基础 函数详解 匿名函数与闭包
相较于C++ 11中提供的Lambda表达式形式来定义匿名函数,Golang 中匿名函数的定义格式除了没有函数名,其他部分与普通函数定义格式一致。换言之,匿名函数的定义就是没有名字的普通函数定义// 声明格式 func(参数列表)(返回值列表) {函数体 } // example: func main() {1
2023-02-16 08:00:00
9063
原创 Golang基础 函数详解 函数基础
函数是一个固定的、可重复使用的程序段(子程序)📃,它在实现单一或相关联功能的同时,还可以带有入口和出口,📘所谓的入口,就是函数参数即形参,通过这个入口把函数的参数值传递给子程序;📙所谓出口,就是指函数的返回值,通过这个出口可以获取子程序的计算结果。Golang 中使用 关键字进行函数声明,声明语句中包含函数名,参数列表, 返回值列表和函数体四个部分,其中:02 更多样的参数列表函数定义时有参数,该变量可称为函数的形参,形参就像定义在函数体内的局部变量;而在外部调用函数时传递的变量就是函数的实参。
2022-12-07 07:30:00
7892
2
原创 Golang基础 流程控制 循环控制
值得注意的是对 map 遍历时,遍历输出的键值是无序的,如果需要有序的键值对输出,需要对结果进行排序。:Golang 中并没有 while 关键字,可以使用只有一个循环条件的 for 循环语句实现类似的功能,在循环体外部声明循环遍历,满足循环条件时循环执行循环体。的循环变量同样存在作用域问题,在 for 循环中声明的变量仅在该循环体内有效,对外部变量没有影响;循环控制通常用于程序中需要重复执行的逻辑模块,循环结构通常由循环变量、循环终止条件和循环体三个部分构成。,那真的是对我最大的鼓励 🔥🔥🔥。
2022-11-30 07:30:00
8280
原创 Golang基础 流程控制 条件判断
在编程中,变量在其实现了变量的功能后,作用范围越小,所造成的问题可能性越小,每一个变量代表一个状态,有状态的地方,状态就会被修改,函数的局部变量只会影响一个函数的执行,但全局变量可能会影响所有代码的执行状态,因此限制变量的作用范围对代码的稳定性有很大的帮助。区别于 C/C++ 中 switch 语句只能进行常量判断,Golang 中 switch 的分支表达式可以是任意类型,且在每个唯一的 case 分支代码块相互独立,可以省略 break 跳出操作,默认自动终止。互斥执行,而前者是相互独立执行的。
2022-11-28 08:42:59
8361
原创 Golang基础 基础数据类型 Slice切片
切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型,类似于 C/C++ 中的数组类型,而Golang 中的数组是值类型,赋值和函数传参操作都会复制整个数组数据。相较于 Golang 数组拷贝过程中的巨大内存开销,采用切片的方式进行赋值或者传参不需要使用额外的内存并且比使用数组更有效率。切片的实现原理类似 C++ STL 中的 vector,但是切片本身并不是动态数组或者数组指针。它内部实现的数据结构通过指针引用底层数组,设定相关属性将数据读写操作限定在指定的区域内。
2022-11-21 07:30:00
8018
原创 Ubuntu20.04 中已经安装 Pytorch 但 Import 报错 - 解决记录
笔者使用的是 Ubuntu 20.04.3 LTS,在使用 PyTorch 训练模型的时候,`torch` 模块引用失败,报错信息是OSError: /home/wang/.local/lib/python3.8/site-packages/torch/lib/../../nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtGetStatusString, version libcublasLt.so.11
2022-11-16 08:00:00
22461
原创 Golang基础 基础数据类型之值类型
字符串类型的保留字是string,可以直接使用双引号""来定义字符串。上面的例子中 str2 的定义中使用到反斜杠的转义符\\,除此之外字符串中常见的转义符包含回车、换行、单双引号、制表符等。转义含义\r回车符(返回行首)\n换行符(直接跳到下一行的同列位置)\t制表符(tab键)’单引号"双引号\反斜杠定义多行字符串:Golang中可以使用反引号定义一个多行字符串,但反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。world!
2022-11-04 07:30:00
9148
原创 Golang基础 变量与常量
但在声明多个常量时,可以通过省略值的方式初始化值相同的常量,如果省略了值则表示该常量的值与其上一行的常量值相同,这是变量中无法实现的初始化方式。Go语言编译器在声明变量时,如果没有显式地初始化,则会根据变量的数据类型用默认值对其进行初始化。:在显示初始化变量时,可以省略变量的数据类型,编译器自动根据赋值运算符右值来自动推导出变量的数据类型完成初始化。占位,表示忽略值,这也是Go语言的一语法特点,匿名变量不占用命名空间,不会分配内存,所以也不存在重复声明。:前者是赋值运算符,仅将右值赋给左侧变量;
2022-11-02 07:45:00
7135
原创 使用 Docker 搭建 Hadoop 分布式环境
对大数据初学者来说,直接用多台物理机搭建Hadoop集群是一个相当痛苦的过程,大多情况下还没开始跑wordcount,可能就被环境搭建劝退了。除了物理机,虚拟机搭建也是一种常见的方式,但这对宿主机也有着很大的性能要求。本文的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。快来学习吧 ~...
2022-07-21 11:42:59
14306
14
原创 Spell 基于最长公共子序列的在线日志解析方法
01 日志模板挖掘 系统日志通常包含两个部分,一个部分是日志时间戳、日志类型和主机名等结构化的信息,另一部分则是开发人员通过代码打印的日志文本内容。下图展示的就是 Linux 系统中 syslog 消息数据包的格式,PRI 和 HEADER 即为日志结构化部分,而 MSG 则是日志正文内容。 日志文本内容通常是异常检测和故障诊断等任务的主要关注点,它可以进一步地分为常量和变量两部分,其中,常量描述的是当前程序的行为或功能,而变量则反映程序运行过程中的动态上下文信息。日志文本内容常量部分在本质上对应
2022-04-29 17:12:23
10791
3
原创 LogHub 智能日志分析通用公开数据集
01 数据驱动的智能运维 随着人工智能(artificial intelligence,简称 AI)的发展,智能运维(artificial intelligence for IT operations,简称AIOps)的概念 [5] 于 2016 年被 Gartner 首次提出,即通过机器学习(machine learning)等算法分析来自于多种运维工具和设备的大规模数据,自动发现并实时响应系统出现的问题,进而提升信息技术(information technology,简称 IT)运维能力和自动化程度
2022-04-28 07:30:00
12473
12
原创 一个饮品店订单管理业务,学会四种设计模式
订单管理业务目标在于应用工厂模式、装饰器模式、策略模式和观察者模式设计一个灵活高效的饮品店订单管理业务。本订单管理业务流程主要包含顾客下单、后厨根据顾客需求出餐、顾客结账和订单历史记录四个过程。根据分析这个轻量的饮品店订单管理业务,具体设计目标如下:(1)本饮品店出售三种品类的饮料,分别是果汁(Fruit Juice)、咖啡(Coffee)、奶茶(Milk Tea)。果汁品类有三种饮品包括草莓汁(Strawberry juice)、芒果汁(Mango juice)和西瓜汁(Watermelon juice)
2022-04-21 07:30:00
6132
13
原创 云原生大厦的基石之一「云原生可观测性」
云原生的概念近几年非常火热 🔥,而且它极有可能成为 IT 技术新的发展方向 🚩, 本文将一探**云原生**。 在介绍云原生的概念之前,我们先理解一下当下**面向机器开发**的软件系统。不管是运行在 *Windows* 或者 *Linux* 上的 PC 端应用,还是运行在 *Android* 或者 *IOS* 上的移动端应用,这些应用的定义都是面向将来部署的机器的,需要考虑设备上的系统资源和环境。 而在云原生中,开发者无需考虑底层的技术实现,只需要关注充分发挥云平台的弹性和分布式优势,实
2022-04-18 07:00:00
4676
25
原创 二叉搜索树导览,一文拿下 BST&AVL
01 二叉搜索树 BST1.1 什么是二叉搜索树 二叉搜索树(又称:二叉查找树,二叉排序树,Binary Search Tree, BST)是一种特殊的二叉树:对于每个父节点,其左子节点的值小于等于父结点的值,其右子节点的值大于等于父结点的值。 因此对于一个二叉搜索树,我们可以在 O(nlogn) 的时间内查找一个值是否存在:从根节点开始,若当前节点的值大于查找值则向左下走,若当前节点的值小于查找值则向右下走。 同时因为二叉查找树是有序的,对其中序遍历的结果即为排好序的数组。 一个二叉搜索
2022-04-13 17:03:26
3141
9
原创 ELK 收集 Docker 日志
文章目录00 收集日志的目的01 安装Docker环境1.1 Ubuntu18.04 安装Docker1.2 Docker安装Nginx镜像1.3 查看Docker镜像的日志文件02 Filebeat根据容器ID收集Docker日志03 Filebeat收集多个Docker容器日志3.1 启动多个容器3.2 配置Filebeat进行多容器日志收集04 根据服务类型收集多个Docker容器日志4.1 直接配置Filebeat收集多容器日志的缺陷4.2 安装与使用 docker-compose4.3 配置Fil
2022-04-10 11:19:35
9456
13
原创 使用 Kafka 缓存优化 ELK 日志收集
00 前言上回书,我们提到直接使用 Filebeat 在节点上采集日志数据然后直接传输给 Elasticsearch 存储,在日志规模较大时,可能导致 Elasticsearch 存储集群容量不足,或者出现性能瓶颈的问题。针对这个问题我们提出了👉 使用 Redis 缓存优化 ELK 日志收集 👈但是 ELK 使用 Redis 作为缓存的一个缺陷在于:Filebeat 采集的日志数据只能传输给 Redis 的单节点,不能传输给 Redis 集群或者 Redis 哨兵(在新版本中应该会有所改进)针对这个
2022-04-09 10:23:59
4821
2
原创 ELK 日志收集中使用 Nginx 代理优化 Redis 缓存
使用Redis 缓存优化 ELK 日志收集请参考文章 使用 Redis 缓存优化 ELK 日志收集01 ELK 使用 Redis 作为缓存的高可用架构ELK使用Redis作为缓存的一个主要缺陷是:被收集的数据只能够缓存在单台Redis中。这降低了整体架构的可靠性,为了解决这一问题,使用Nginx实现负载均衡,使用keepalived实现主从热备,使用nginx+keepalived的方式代理多台Redis,达到整体架构高性能高可靠的目的。如图所示架构主要分为四个部分:日志收集:Filebeat采
2022-03-15 11:23:10
7746
原创 使用 Redis 缓存优化 ELK 日志收集
01 使用 Redis 作为缓存的 ELK 架构直接使用 Filebeat 在节点上采集日志数据然后直接传输给 Elasticsearch 存储。这种架构有利于日志数据的时效性,但是当日志规模较大时,可能导致 Elasticsearch 存储集群容量不足,或者出现性能瓶颈。为了解决这一问题,可以使用缓存机制提高 ES 的可靠性和稳定性,即使 ES 集群宕机,在重新恢复之后可以从 Redis 中同步数据。Redis 是一种内存高速缓存数据库,以键值对的方式存储数据,具有可持久化,分布式扩展的特点。ELK
2022-03-15 11:10:07
7188
原创 ELK 收集 Java 后台日志
01 Java 日志样式Java日志的特点在于输出信息非常多,通常需要将多行日志信息拼成一个事件,所以需要多行匹配模式。由于Elasticsearch本身就是使用Java开发的,所以Java日志收集实例就直接收集ES的日志。如下所示是Elasticsearch的几条日志目录,可以看到这些日志条目通过第一个中括号中的时间戳进行区分,第二个日志条目中有多行Java日志,这多行日志组成了一个事件,怎么使用Filebeat采集这种多行日志呢?[2021-08-02T07:14:18,201][INFO ][o
2022-03-14 12:28:31
7951
PyFlink 有状态流处理 + SkLearn 实现在线机器学习
2022-02-21
PyFlink 有状态流处理实现实时排行榜
2022-02-21
PyFlink 词频统计完整代码
2022-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人