#amazon-s3 #postgresql #s3 #parquet #cdc #database-table #database-migrations

dms-cdc-operator

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

7个版本

新版本 0.1.17 2024年8月5日
0.1.16 2024年8月5日
0.1.14 2024年6月11日
0.1.9 2024年5月29日
0.1.0 2024年4月26日

#877 in 数据库接口

Download history 120/week @ 2024-04-22 298/week @ 2024-04-29 252/week @ 2024-05-06 180/week @ 2024-05-13 353/week @ 2024-05-20 379/week @ 2024-05-27 499/week @ 2024-06-03 376/week @ 2024-06-10 34/week @ 2024-06-17 67/week @ 2024-07-01 54/week @ 2024-07-08 4/week @ 2024-07-15 16/week @ 2024-07-22 225/week @ 2024-07-29 273/week @ 2024-08-05

520 每月下载
dms-cdc-operator-client 中使用

MIT 许可证

89KB
2K SLoC

DMS-CDC-Operator

一个用于比较Amazon RDS数据库中的表与Amazon S3上的Parquet文件的工具,适用于变化数据捕获(CDC)

概述

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

特性

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

先决条件

  • 您的源数据库是PostgreSQL
  • 您有一个运行中的AWS DMS任务,处于完全加载(或完全加载+ CDC)模式
  • 任务的目的是AWS S3,具有
    • Parquet格式的文件
    • 基于日期的文件夹分区
    • DMS注入的额外列Op

安装(客户端)

要作为客户端使用此工具,您可以使用cargo

工具提供了两个运行特性,即InquireClap

使用Clap

Usage: dms-cdc-operator-client validate [OPTIONS] --bucket-name <BUCKET_NAME> --s3-prefix <S3_PREFIX> --source-postgres-url <SOURCE_POSTGRES_URL> --target-postgres-url <TARGET_POSTGRES_URL>

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
      --mode <MODE>
          Mode to load Parquet files Example: DateAware Example: AbsolutePath Example: FullLoadOnly [default: date-aware] [possible values: date-aware, absolute-path, full-load-only]
      --start-date <START_DATE>
          Start date to filter the Parquet files Example: 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
      --accept-invalid-certs-first-db
          Accept invalid TLS certificates for the first database
      --accept-invalid-certs-second-db
          Accept invalid TLS certificates for the second database
  -h, --help
          Print help
  -V, --version
          Print version

使用Inquire

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

安装(库)

要作为库使用此工具,您可以运行

cargo add rust-cdc-validator

示例

  • 通过Docker Compose启动本地Postgres DB
docker-compose up

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

cargo build

RUST_LOG=dms_cdc_operator=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=dms_cdc_operator=debug,rust_pgdatadiff=debug

许可证

本项目采用MIT许可证

依赖项

~85–120MB
~2M SLoC