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

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 工作,并维护动态数据环境的可靠性。

相关推荐
摇滚侠8 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试9 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767169 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_11 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl12 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒13 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB13 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB13 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB13 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj1985415 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse