调度系统:DonpinScheduler 执行 Couchbase SQL 脚本的实际例子

news2024/12/12 15:23:07

DonpinScheduler 是一款轻量级的分布式任务调度工具,适合用来管理和调度 SQL 脚本任务,包括 Couchbase SQL 脚本。以下是一个使用 DonpinScheduler 执行 Couchbase SQL 脚本的实际例子。

使用场景

目标:使用 DonpinScheduler 定时执行一组 Couchbase SQL 脚本,完成以下任务:

每小时同步数据到 Couchbase。

每天聚合统计数据。

每周清理过期数据。

需求:

定时调度 SQL 脚本。

支持分布式任务调度。

提供任务日志记录和失败后的重试机制。

实现步骤

  1. 准备 Couchbase SQL 脚本

示例脚本文件:

sync_data.sql:

INSERT INTO bucket-name (KEY, VALUE)
SELECT META().id, new_data.*
FROM source-bucket new_data
WHERE META().id NOT IN (SELECT RAW META().id FROM bucket-name);

aggregate_data.sql:

SELECT category, COUNT(*) AS count
FROM bucket-name
WHERE type = “product”
GROUP BY category;

cleanup_expired_data.sql:

DELETE FROM bucket-name
WHERE expiration_date < NOW_STR();

  1. 安装 DonpinScheduler 和 Couchbase 驱动

安装所需依赖:

pip install donpinscheduler couchbase

  1. 配置 DonpinScheduler 和任务

DonpinScheduler 允许通过装饰器定义任务,并支持任务依赖和定时。

SQL 执行函数

from couchbase.cluster import Cluster, ClusterOptions

from couchbase.auth import PasswordAuthenticator

from donpinscheduler import DonpinScheduler, task

初始化 Couchbase 连接

cluster = Cluster(
‘couchbase://localhost’,
ClusterOptions(PasswordAuthenticator(‘username’, ‘password’))
)
query_service = cluster.query_indexes()

执行 SQL 脚本的通用函数

def execute_sql(file_path):
with open(file_path, ‘r’) as file:
sql = file.read()
result = query_service.query(sql)
print(f"Executed SQL from {file_path}: {result}")

任务定义

定义 SQL 脚本任务:

scheduler = DonpinScheduler()

@task(schedule=“0 * * * *”) # 每小时执行
def sync_data():
execute_sql(“/path/to/sync_data.sql”)

@task(schedule=“0 0 * * *”) # 每天午夜执行
def aggregate_data():
execute_sql(“/path/to/aggregate_data.sql”)

@task(schedule=“0 0 * * 0”) # 每周日午夜执行
def cleanup_expired_data():
execute_sql(“/path/to/cleanup_expired_data.sql”)

注册任务到调度器

scheduler.register(sync_data)
scheduler.register(aggregate_data)
scheduler.register(cleanup_expired_data)

  1. 启动调度器

运行调度器以管理任务:

if name == “main”:
scheduler.run()

功能亮点

  1. 定时调度

DonpinScheduler 使用类似 Cron 的调度表达式:

0 * * * *:每小时运行一次。

0 0 * * *:每天运行一次。

0 0 * * 0:每周运行一次。

  1. 任务状态和日志

DonpinScheduler 会记录每个任务的运行状态和日志,包括任务成功、失败以及重试次数。

  1. 失败重试机制

任务装饰器支持设置自动重试策略:

@task(schedule=“0 * * * *”, retries=3, retry_delay=60) # 失败后最多重试3次,间隔60秒
def sync_data():
execute_sql(“/path/to/sync_data.sql”)

  1. 分布式任务调度

DonpinScheduler 支持多实例运行,便于扩展为分布式任务调度系统。

总结

通过 DonpinScheduler,可以轻松实现 Couchbase SQL 脚本的管理和调度。它的轻量级设计非常适合中小型项目,并且通过定时、失败重试和日志记录功能,使 SQL 执行任务更加高效和可靠。

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

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

相关文章

ip地址暴露了怎么办?手机怎样改ip地址以保障安全

在数字化时代,IP地址作为我们连接互联网的“身份证”,其安全性至关重要。然而,有时我们的IP地址可能会因各种原因暴露,从而引发隐私泄露、网络攻击等风险。本文将为您详细解析IP地址暴露后的应对措施,特别是针对手机用户,提供实用的更改IP地址方法,帮助您有效保障网络安…

组合分支预测

前言 这篇文章讨论了几种分支预测的实现方式。具体内容如下&#xff1a; 内容 introduction 这篇文章只考虑预测分支跳转方向&#xff0c;不讨论跳转的目标地址。 Bimodal Branch Prediction 分支行为的特点&#xff1a;大多数程序中的分支指令并不是随机的&#xff0c;通…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况&#xff0c;就是爬虫最初是正常运行、正常抓取数据的&#xff0c;一切看起来都是那么美好&#xff0c;然而一杯茶的工夫就出现了错误&#xff0c;例如 403 Forbidden&#xff0c;这时打开网页一看&#xff0c;可能会看到“您的IP访问频率太…

数据结构——对顶堆

对顶堆 由一个大根堆和一个小根堆组成&#xff0c;小根堆里面的数永远比大根堆里面的数要大 用途&#xff1a;用于动态维护区间内第k大的数&#xff0c;要比线段树和动态平衡树写起来更简单 比如说我们要维护第k大的数&#xff0c;那么我们肯定是将前k大的数放进小根堆&#…

设计模式之原型模式:深入浅出讲解对象克隆

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 原型模式概述 在我们的日常生活中&#xff0c;经常会遇到"复制"这样的场景。比如我们在准备文件时&#xff0c;常常会复印一份原件&a…

Elasticsearch Serverless 中的数据流自动分片

作者&#xff1a;来自 Elastic Andrei Dan 在 Elastic Cloud Serverless 中&#xff0c;我们根据索引负载自动为数据流配置最佳分片数量&#xff0c;从而使用户无需摆弄分片。 传统上&#xff0c;用户会更改数据流的分片配置&#xff0c;以处理各种工作负载并充分利用可用资源。…

【Golang】Go语言编程思想(六):Channel,第四节,Select

使用 Select 如果此时我们有多个 channel&#xff0c;我们想从多个 channel 接收数据&#xff0c;谁来的快先输出谁&#xff0c;此时应该怎么做呢&#xff1f;答案是使用 select&#xff1a; package mainimport "fmt"func main() {var c1, c2 chan int // c1 and …

MindSearch深度解析实践

任务要求&#xff1a;在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下&#xff0c;Space 名称中需要包含 MindSearch 关键词&#xff0c;请在必要的步骤以及成功的对话测试结果当中 1.在github codespace中配置环境 conda create -n mindsearch python3.10 -y conda…

【PyQt5教程 二】Qt Designer 信号与槽的使用方法及PyQt5基本小部件说明

目录 一、信号与槽机制&#xff1a; 二、信号与槽使用方法&#xff1a; &#xff08;1&#xff09;使用Qt Designer 的信号与槽编辑器&#xff1a; &#xff08;2&#xff09;使用固定语法直接建立信号槽连接&#xff1a; 三、PyQt小部件及其触发信号&#xff1a; &#x…

基于PHP课堂签到系统的设计与实现

摘 要 随着教育业的迅速发展和学生人数的不断增加&#xff0c;导致在班级登记制度中传统的“点到”方式不能适应学校的实际需要。从而需要设计一个好的课堂签到系统将会对课堂签到管理工作带来事半功倍的效果。文章着重介绍了基于实践应用的班级签到系统的开发流程&#xff0c…

CSS学习记录11

CSS布局 - display属性 display属性是用于控制布局的最终要的CSS属性。display 属性规定是否/如何显示元素。每个HTML元素都有一个默认的display值&#xff0c;具体取决于它的元素类型。大多数元素的默认display值为block 或 inline。 块级元素&#xff08;block element&…

高效利用资源:分布式有状态服务的高可靠性设计

在分布式系统设计中&#xff0c;实现有状态服务的高可靠性通常采用主备切换的方式。当主服务停止工作时&#xff0c;备服务接管任务&#xff0c;例如通过Keepalive实现VIP的切换以保证可用性。然而&#xff0c;这种方式存在资源浪费的问题&#xff0c;因为备服务始终处于空转状…

重生之我在异世界学智力题(2)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言智力题&#xff1a;逃离孤岛智力题&a…

论文浅尝 | SAC-KG:利用大语言模型作为领域知识图谱熟练的自动化构造器(ACL2024)...

笔记整理&#xff1a;杜超超&#xff0c;天津大学硕士&#xff0c;研究方向为自然语言处理、大语言模型 论文链接&#xff1a;https://aclanthology.org/2024.acl-long.238/ 发表会议&#xff1a;ACL 2024 1. 动机 知识图谱&#xff08;KG&#xff09;在各个专业领域的知识密集…

Python机器视觉的学习

一、二值化 1.1 二值化图 二值化图&#xff1a;就是将图像中的像素改成只有两种值&#xff0c;其操作的图像必须是灰度图。 1.2 阈值法 阈值法&#xff08;Thresholding&#xff09;是一种图像分割技术&#xff0c;旨在根据像素的灰度值或颜色值将图像分成不同的区域。该方法…

Elasticsearch高性能实践

前言 本方案主要从运维层面分析es是实际生产使用过程中的参数优化&#xff0c;深入理解es各个名词及含义&#xff0c;深入分析es的使用过程中应注意的点&#xff0c;详细解释参数设置的原因以及目的&#xff0c;主要包括系统层面&#xff0c;参数层面。除此之外&#xff0c;优…

笔记本外接显示屏没声音

1、笔记本正常有声音&#xff0c;但是外接显示屏后没有声音了怎么回事呢&#xff1f;原来外接显示屏后笔记本的声音输出会自动选择显示屏的音频输出&#xff0c;但是显示屏可能没有声音输出所以导致笔记本没有声音。 2、解决办法&#xff1a;打开笔记本设置&#xff0c;选择声…

JavaWeb学习(4)(四大域、HttpSession原理(面试)、SessionAPI、Session实现验证码功能)

目录 一、web四大域。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;RequestScope。(请求域) &#xff08;3&#xff09;SessionScope。(会话域) &#xff08;4&#xff09;ApplicationScope。(应用域) &#xff08;5&#xff09;PageScope。(页面域) 二、Ht…

用人话讲计算机:Python篇!(十二)正则运算+re模块

目录 一、正则表达式 &#xff08;1&#xff09;什么是正则表达式 &#xff08;2&#xff09;它的结构及使用 示例&#xff1a; 1.字符 . &#xff08;←这里有个小点哦&#xff09; 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d &#xff08;3&#xff09;补充&#xff…

力扣打卡12:复原IP地址

链接&#xff1a;93. 复原 IP 地址 - 力扣&#xff08;LeetCode&#xff09; 这道题需要对字符串进行操作&#xff0c;我选择了三层循环&#xff0c;其实还可以递归。 我在循环时进行了剪枝&#xff0c;比如一些情况直接跳出循环。 我的代码&#xff1a; class Solution { p…