#amazon-s3 #postgresql #s3 #parquet #cdc #polars

已删除 rust-cdc-validator

rust-cdc-validator 是一个基于 Rust 的实用工具,用于比较 Amazon RDS 数据库中一系列表的当前状态与存储在 Amazon S3 上 Parquet 文件中的数据,特别适用于变化数据捕获 (CDC) 场景。

1 个不稳定版本

0.1.9 2024年4月26日
0.1.8 2024年4月25日

#30#cdc

Download history 788/week @ 2024-04-22 12/week @ 2024-04-29 17/week @ 2024-07-01 41/week @ 2024-07-29

56 每月下载量
用于 rust-cdc-validator-client

MIT 许可证

72KB
1.5K SLoC

Rust-CDC-Validator

概述

rust-cdc-validator 是一个基于 Rust 的工具,用于比较 Amazon RDS (PostgreSQL) 数据库中的表与使用 AWS Database Migration Service (DMS) 迁移到 Amazon S3 的数据。它在确保 RDS 数据库与 S3 中 Parquet 文件的数据一致性方面特别有用,尤其是在变化数据捕获 (CDC) 更新方面,因为目前不支持以 S3 为目标的 DMS 验证。

特性

  • 导入存储在 AWS S3 中的基于日期文件夹分区的 CDC Parquet 数据的快照,到本地部署的 Postgres
  • 指定特定的时间范围以在 Postgres DB 上复制 S3 状态
  • 在数据丢失的情况下,从 S3 恢复 RDS 状态
  • 比较 Amazon RDS 数据库中特定表的当前状态与 S3 桶中的 Parquet 文件中的数据
  • 通过修改已验证的数据块大小来识别行级别的差异
  • 将其作为库集成到您的项目中,或作为客户端使用它作为独立工具

先决条件

  • 您的源数据库是 PostgreSQL
  • 您有一个在 FULL LOAD + CDC 模式下运行的 AWS DMS 任务
  • 任务的目的是 AWS S3,具有
    • Parquet 格式的文件
    • 基于日期的文件夹分区
    • DMS 注入的 Op 额外列

安装(客户端)

为了将工具作为客户端使用,您可以使用 cargo

该工具提供两个功能来运行它,分别是 InquireClap

使用 Clap

Usage: rust-cdc-validator-client validate [OPTIONS] --bucket-name <BUCKET_NAME> --s3-prefix <S3_PREFIX> --source-postgres-url <SOURCE_POSTGRES_URL> --target-postgres-url <TARGET_POSTGRES_URL> --start-date <START_DATE>

Options:
      --bucket-name <BUCKET_NAME>
          S3 Bucket name where the CDC files are stored
      --s3-prefix <S3_PREFIX>
          S3 Prefix where the files are stored Example: data/landing/rds/mydb
      --source-postgres-url <SOURCE_POSTGRES_URL>
          Url of the database to validate the CDC files Example: postgres://postgres:postgres@localhost:5432/mydb
      --target-postgres-url <TARGET_POSTGRES_URL>
          Url of the target database to import the parquet files Example: postgres://postgres:postgres@localhost:5432/mydb
      --database-schema <DATABASE_SCHEMA>
          Schema of database to validate against S3 files [default: public]
      --included-tables [<INCLUDED_TABLES>...]
          List of tables to include for validatation against S3 files
      --excluded-tables [<EXCLUDED_TABLES>...]
          List of tables to exclude for validatation against S3 files
      --start-date <START_DATE>
          Start date to filter the Parquet files Example: 2024-02-14T10:00:00Z [default: 2024-02-14T10:00:00Z]
      --stop-date <STOP_DATE>
          Stop date to filter the Parquet files Example: 2024-02-14T10:00:00Z
      --chunk-size <CHUNK_SIZE>
          Datadiff chunk size [default: 1000]
      --max-connections <MAX_CONNECTIONS>
          Maximum connection pool size [default: 100]
      --start-position <START_POSITION>
          Datadiff start position [default: 0]
      --only-datadiff
          Run only the datadiff
      --only-snapshot
          Take only a snapshot from S3 to target DB
  -h, --help
          Print help
  -V, --version
          Print version

使用 Inquire

rust-cdc-validator --features="with-inquire"

安装(库)

为了将工具作为库使用,您可以运行

cargo add rust-cdc-validator

示例

  • 通过 Docker Compose 启动本地 Postgres 数据库
docker-compose up

psql -h localhost -p 5438 -U postgres -d mydb
  • 构建并运行 Rust 工具
cargo fmt --all
cargo clippy --all

cargo build

RUST_LOG=rust_cdc_validator=info,rust_pgdatadiff=info cargo run --features="with-clap" validate --bucket-name my-bucket --s3-prefix prefix/path --source-postgres-url postgres://postgres:postgres@localhost:5432/mydb1 --target-postgres-url postgres://postgres:postgres@localhost:5438/mydb --database-schema public --included-tables mytable --start-date 2024-02-14T10:00:00Z --chunk-size 100

为了进行更多调试,您可以通过导出以下内容来启用与 Rust 相关的日志

export RUST_LOG=rust_cdc_validator=debug,rust_pgdatadiff=debug

许可证

此项目根据 MIT 许可证授权

依赖项

~87–125MB
~2M SLoC