使用 CDC MinIO 汇入端为 CockroachDB 保持持久数据

news2024/11/15 19:23:20

CockroachDB 数据库迅速崭露头角,作为一个坚韧且可扩展的分布式 SQL 数据库。它从其昆虫名字的坚持不懈中汲取灵感,即使面对硬件故障,CockroachDB 也能保证高可用性。其分布式架构横跨多个节点,类似于其昆虫原型的适应性。
凭借强一致性和 ACID 事务支持,CockroachDB 成为需要数据准确性和可靠性的应用程序的可靠选择,在动态环境中蓬勃发展,轻松管理分布式数据的复杂性。
本博客介绍了将 MinIO 用作 CockroachDB 的变更汇入端。这样做的话,您不仅能从 CockroachDB 的优势中受益,还能利用 MinIO 的耐用性、可扩展性和性能。将此作为建立企业级 CDC 策略的指南。它受到了这个很棒的仓库的启发。

什么是 CDC?

CDC 是一种智能的数据库管理技术,它追踪并捕捉像 CockroachDB 这样的关系数据库中的变化。它像一个监控器,实时检测 INSERTS、UPDATES 和 DELETES 等 CRUD 操作。
CDC 的优势在于它能够仅识别修改过的数据,这使得它在网络带宽和成本方面比传统的复制方法更有效。这种效率对于数据集成、实时分析和在分布式系统中保持一致性等任务至关重要。CDC 确实是实时连接数据织物的前提,也是保持数据库同步和在动态数据环境中保持可靠性的基本工具。
这种实时的数据更新流为训练和优化需要大量最新数据才能成功的机器学习模型提供了坚实的基础。

CockroachDB 中的变更汇入端

CockroachDB 中的变更汇入端就像高效的数据管道,将数据库中发生的 CRUD 操作导向外部目的地。在这个实例中,MinIO 充当了这样一个目的地。当配置为汇入端时,MinIO 成为连续变更流的存储库,为 CDC 操作提供了一个耐用且可扩展的存储解决方案。
这种方法的优点之一是,您可以使用 MinIO 桶中的 CDC 数据来在云之间复制您的数据策略。例如,如果您的 CockroachDB 托管在 AWS 上,但您需要将数据放在本地以便模型运行,您可以使用这种方法做到这一点。这可以是一种有效实施多云数据策略的方法。

先决条件

要遵循此指南,请确保已安装 Docker Compose。您可以分别安装 Docker Engine 和 Docker Compose,或者使用 Docker Desktop 一同安装。最简单的方法是选择 Docker Desktop。
通过运行以下命令检查 Docker Compose 是否已安装:

docker-compose --version

您将需要 CockroachDB 的自托管企业许可证。对于 CockroachDB 的本地部署,请注意,ARM for MacOS 上的 CockroachDB 是实验性的,尚未准备好用于生产。

开始

若要开始,请从此位置克隆或下载项目文件夹。

打开终端窗口,导航到项目文件夹并运行以下命令:

docker-compose up -d

此命令指示 Docker Compose 从“docker-compose.yml”文件中读取配置,创建并启动其中定义的服务,并在后台运行它们,从而允许您将终端用于其他任务,而无需绑定到容器的控制台输出。

运行该命令后,您应该能够看到容器已启动并正在运行。


您可以在以下位置 http:// 127.0.0.1 :8080 访问 Cockroach UI。验证您的节点是否处于活动状态。

您可以在以下位置 http://127.0.0.1:9001 访问 MinIO UI。使用用户名和密码组合登录 minioadmin:minioadmin

登录后,您应该能够验证 中的 mc 命令 docker-compose.yml 是否已执行,并且已自动创建名为 cockroach 的存储桶。

SQL 命令

容器启动并运行后,即可运行 SQL 命令。在下载教程文件并启动容器的同一文件夹中的终端窗口中运行以下命令。此命令在 crdb-1 容器内执行交互式 SQL shell,连接到在该容器中运行的 CockroachDB 实例,并允许您输入 SQL 查询。

docker exec -it crdb-1 ./cockroach sql --insecure

如果正确执行了 shell,则应看到以下内容。

#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v19.2.2 (x86_64-unknown-linux-gnu, built 2019/12/11 01:33:43, go1.12.12) (same version as client)
# Cluster ID: 0a668a2d-056d-4203-a996-217ca6169f80
#
# Enter \? for a brief introduction.
#

如先决条件中所述,您需要一个 Enterprise CockroachDB 帐户来设置 CDC。使用相同的终端窗口输入下一个命令。

SET CLUSTER SETTING cluster.organization = '<organization name>';

SET CLUSTER SETTING enterprise.license = '<secret>';

SET CLUSTER SETTING kv.rangefeed.enabled = true;

破碎的CDC

您现在可以构建数据库和表。下面的 SQL 创建一个名为 ml_data 的新数据库,将当前数据库上下文切换到 ml_data ,创建一个名为 model_performance 用于存储机器学习模型信息的表,并在此表中插入两行数据,表示特定模型的性能指标。在同一终端中执行这些命令。

CREATE DATABASE ml_data;

SET DATABASE = ml_data;

CREATE TABLE model_performance (
     model_id INT PRIMARY KEY,
     model_name STRING,
     accuracy FLOAT,
     training_time INT);

INSERT INTO model_performance VALUES
   (1, 'NeuralNetworkV1', 0.85, 120),
   (2, 'RandomForestV2', 0.92, 150);

接下来,运行以下命令为 CockroachDB 中的 model_performance 表创建更改源,并将其配置为将更新流式传输到 MinIO。

CREATE CHANGEFEED FOR TABLE model_performance INTO 'experimental-s3://cockroach?AWS_ACCESS_KEY_ID=minioadmin&AWS_SECRET_ACCESS_KEY=minioadmin&AWS_ENDPOINT=http://minio:9000&AWS_REGION=us-east-1' with updated, resolved='10s';

导航到 Cockroach UI at http:// 127.0.0.1 :8080 以验证是否已成功创建更改源并已建立高水位时间戳。


对数据进行更改,查看更改源的运行情况。

UPDATE model_performance SET model_name = 'ResNet50' WHERE model_id = 1;

运行以下命令以确保已执行该命令。

SELECT * FROM model_performance ;
  model_id |   model_name   | accuracy | training_time  
+----------+----------------+----------+---------------+
         1 | ResNet50       |     0.88 |           130  
         2 | RandomForestV2 |     0.92 |           150

在生产环境中,您的事务将填充 MinIO,而无需执行此步骤。

导航回 MinIO UI at’ http://127.0.0.1:9001 ,查看更改源的运行情况。

生产线的尽头

在本教程中,你已经完成了使用 MinIO 创建 changefeed 接收器的过程,以便为企业许可的 CockroachDB 启用 CDC 策略。

此 CDC 策略为最关键数据的弹性和持续同步的数据结构奠定了基础。当您绝对需要为数据探索、分析或 AI 应用程序提供完美的数据副本时,CockroachDB 和 MinIO 的组合是您的制胜策略。

改进此处概述的内容,您将继续支持更好的决策,促进 AI/ML 工作,并维护动态数据环境的可靠性。

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

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

相关文章

dos攻击与ddos攻击的区别

①DOS攻击&#xff1a; DOS&#xff1a;中文名称是拒绝服务&#xff0c;一切能引起DOS行为的攻击都被称为dos攻击。该攻击的效果是使得计算机或网络无法提供正常的服务。常见的DOS攻击有针对计算机网络带宽和连通性的攻击。 DOS是单机于单机之间的攻击。 DOS攻击的原理&#…

JavaScript学习-原型和原型链

原型和原型链 示例代码 //创建一个Person类 class Person {constructor(name) {this.name name;}drink() {console.log(喝水);} } //创建一个Teacher类&#xff0c;继承Person class Teacher extends Person {constructor(name, subject) {super(name);this.subject subjec…

详细解读vcruntime140_1.dll修复的手段,如何快速解决vcruntime140_1.dll丢失问题

当出现“无法找到vcruntime140_1.dll”或程序“未能正常启动”时&#xff0c;这通常指示系统中缺失了一个关键文件&#xff1a;vcruntime140_1.dll。作为Visual C Redistributable组件的一部分&#xff0c;这个小文件在很多用Visual Studio编译的C程序运行时发挥着重要作用。解…

go语言(十八)---- goroutine

一、goroutine package mainimport ("fmt""time" )func main() {//用go创建承载一个形参为空&#xff0c;返回值为空的一个函数go func() {defer fmt.Println("A.defer")func() {defer fmt.Println("B.defer")//退出当前goroutinefmt…

P1042 [NOIP2003 普及组] 乒乓球 Java版最简单题解!

为什么说最简单&#xff0c;因为本人就是一个算法小白&#xff0c;只学过一点数据结构&#xff0c;打算备战蓝桥杯的&#xff0c;网上说备战蓝桥杯就去刷洛谷&#xff0c;早有听闻洛谷很难&#xff0c;今天一看算是真的被打醒了&#xff0c;对于小白是真的太难了。(;༎ຶД༎ຶ…

在Idea中使用git查看历史版本

idea查git历史 背景查看步骤总结 背景 有好几次同事到我电脑用idea查看git管理的历史记录&#xff0c;每次都说我的idea看不了历史版本&#xff0c;叫我到他电脑上去看&#xff0c;很晕&#xff0c;为什么,原来是我自己把显示历史文件的视图覆盖了&#xff0c;下面我们来一起学…

Python open函数

在Python编程中&#xff0c;open()函数是一个重要的文件操作函数&#xff0c;用于打开文件并进行读取、写入、追加等操作。本文将深入探讨open()函数的用法、语法、文件模式、示例代码&#xff0c;并探讨其在实际编程中的应用场景。 什么是open()函数&#xff1f; open()函数…

【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用

文章目录 &#x1f4c4;前言一. 阻塞队列初了解&#x1f346;1. 什么是阻塞队列&#xff1f;&#x1f345;2. 为什么使用阻塞队列&#xff1f;&#x1f966;3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现&#x1f35a;1. 实现普通队列&#x1f365;2. 实现队列的阻塞功…

Python.五.文件

1.文件读取的操作 1.文件的打开 open(name,mode,encoding) name:是要打开目标文件名的字符串&#xff0c;可以包含文件所在的具体路径 mode:设置打开文件的模式&#xff1a;只读 r 、写入 w 、追加 a encoding&#xff1a;编码格式 UTF-8 fopen("C:/test.txt"…

XSS_Labs靶场通关笔记

每一关的方法不唯一&#xff1b;可以结合源码进行分析后构造payload&#xff1b; 通关技巧&#xff08;四步&#xff09;&#xff1a; 1.输入内容看源码变化&#xff1b; 2.找到内容插入点&#xff1b; 3.测试是否有过滤&#xff1b; 4.构造payload绕过 第一关 构造paylo…

怎么获取二维码的链接?二维码转链接只需3步

怎么从二维码中提取内容呢&#xff1f;现在很多内容都会用二维码方式来存储&#xff0c;但是有些场景下二维码是无法使用的时候&#xff0c;想要查看二维码中的内容&#xff0c;就需要分解二维码成链接后使用。那么二维码分解成链接具体该怎么做呢&#xff1f;今天就将在线二维…

Hammer.js中文教程

一、什么是hammer.js hammerJS是一个开源的&#xff0c;轻量级的触屏设备javascript手势库&#xff0c;它可以在不需要依赖其他东西的情况下识别触摸&#xff0c;鼠标事件。允许同时监听多个手势、自定义识别器&#xff0c;也可以识别滑动方向。 优点&#xff1a; 为移动端网…

[已解决]504 Gateway Time-out 网关超时

文章目录 问题&#xff1a;504 Gateway Time-out 504 Gateway Time-out 网关超时思路解决 问题&#xff1a;504 Gateway Time-out 504 Gateway Time-out 网关超时 思路 网上的常规思路是修改nginx配置文件,增加请求执行时间,试过没有用 keepalive_timeout 600; fastcgi_con…

一文读懂: AIGC基本原理及应用领域

AIGC是利用人工智能技术来生成内容的一种新型技术。随着人工智能技术的不断发展&#xff0c;AIGC技术也得到了越来越广泛的应用。未来&#xff0c;AIGC技术将会对我们的生活和工作产生巨大的影响。 一、AIGC技术的基本原理 AIGC技术的基本原理是利用人工智能技术中…

JAVA学习笔记三

1.java执行流程分析 2.什么是编译 javac Hello.java 1.有了java源文件&#xff0c;通过编译器将其编译成JVM可以识别的字节码文件 2.在该源文件目录下&#xff0c;通过javac编译工具对Hello.java文件进行编译 3.如果程序没有错误&#xff0c;没有任何提示&#xff0c;但在…

[数据结构]-哈希

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习目标&…

LabVIEW准分子激光器控制系统

LabVIEW准分子激光器控制系统是为了实现准分子激光光源在工业、医疗和科研领域的应用集成及其功能的扩展。系统由PC端和激光器端两部分构成&#xff0c;通过光隔离的RS232通讯连接&#xff0c;以实现稳定可靠的控制与通信。 系统主要由微控制单元&#xff08;MCU&#xff09;主…

程序员的你,是不是又被催婚了

程序员作为社会中一个较为特殊的群体&#xff0c;由于工作特性&#xff08;如长时间对着电脑、工作节奏较快、加班相对频繁等&#xff09;以及职业发展需要投入大量时间和精力&#xff0c;有时可能会面临较晚结婚的问题。这也导致了在某些情况下&#xff0c;他们可能被家人或朋…

C#使用TimeSpan对象获取时间间隔

目录 一、TimeSpan基础知识 二、实例 一、TimeSpan基础知识 使用TimeSpan对象可以方便地获取两个时间段的间隔。两个时间信息相减后会得到一个TimeSpan对象&#xff0c;该TimeSpan对象代表时间间隔&#xff0c;可以通过TimeSpan对象的Days、Hours、Minutes、Seconds、Millise…

腾讯云幻兽帕鲁专有服务器配置价格表,4核16G、8核32G

幻兽帕鲁服务器配置CPU内存多大合适&#xff1f;如何选择&#xff1f;最低4核8G起步&#xff0c;4核16G是官方推荐配置&#xff0c;最好是4核32G配置。阿腾云atengyun.com分享幻兽帕鲁Palworld服务器CPU内存配置及租用费用&#xff0c;如下图&#xff0c;Palworld官方推荐服务器…