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

相关推荐
Tttian62219 分钟前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm
做梦敲代码1 小时前
达梦数据库-读写分离集群部署
数据库·达梦数据库
小蜗牛慢慢爬行2 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger2 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud2 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡2 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷2 小时前
Redis
数据库·redis·缓存
仰望大佬0073 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名3 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库