WWW.YOUINFO.SITE
标签聚合 BD

/tag/BD

LinuxDo 最新话题 · 2026-06-11 19:58:53+08:00 · tech

PostgreSQL 14 到 Apache Doris 4.1.1 CDC 同步方案 本文档用于验证并实施 PostgreSQL 业务库 fudabd_common_plat_db.public.terminal_pos_202602 到 Apache Doris 分析库 fudabd_common_plat_db.terminal_pos 的数据同步。 实际验证环境要求 PostgreSQL 源端 PostgreSQL 版本:14。 连接地址: 127.0.0.1:15432 。 登录账号: postgres 。 登录密码: Fdbd@2013 。 源数据库: fudabd_common_plat_db 。 源 schema: public 。 源表: fudabd_user 。 主键字段: id 。 已开启 logical replication。 pg_hba.conf 已允许 Doris 所在机器或容器访问数据库和 logical replication。 PostgreSQL 账号具备 logical replication、publication、slot 操作权限。 Doris 目标端 Apache Doris要求 最低docker镜像版本 4.1.1 ,此版本支持Stream Job; Doris 版本: doris-4.1.1-rc01-b10073ad9ca 。 Doris @@version : 5.7.99 。 目标数据库: fudabd_common_plat_db 。 目标表: fudabd_user 。 目标表当前不存在,需要由方案一手动创建。 目标表需要支持 UPDATE 、 DELETE ,因此设计为 UNIQUE KEY 表。 同步要求 需要先全量初始化,再持续增量同步。 需要处理 INSERT 、 UPDATE 、 DELETE 。 当前只验证 terminal_pos_202602 单表,暂不处理后续每月新增分表。 单表数据量:日均约 500 万条。 延迟目标:10 秒内。 Doris Streaming Job 支持判断 Apache Doris 4.x 官方文档提供 CREATE JOB ... ON STREAMING ,支持以下两类模式: TVF Mode :使用 cdc_stream(...) 读取 PostgreSQL CDC,再通过 INSERT INTO ... SELECT ... 写入指定 Doris 表,适合单表 SQL 映射同步。 当前环境是 4.1.1-rc01 ,建议正式执行前在当前 Doris 集群验证 Streaming Job 语法和 FE 配置。 参考文档: CREATE STREAMING JOB : CREATE STREAMING JOB - Apache Doris PostgreSQL SQL Mapping Sync: PostgreSQL CDC with SQL Mapping - Apache Doris PostgreSQL Auto Table Creation Sync: PostgreSQL CDC with Auto Table Creation - Apache Doris Doris 4.1.1 Release Notes: Release 4.1.1 - Apache Doris 前置检查 PostgreSQL 配置检查 当前已确认 postgresql.conf 包含以下配置: wal_level = logical max_replication_slots = 10 max_wal_senders = 10 wal_sender_timeout = 0 执行以下 SQL 复核: SHOW wal_level; SHOW max_replication_slots; SHOW max_wal_senders; 检查源表主键: SELECT tc.table_schema, tc.table_name, kcu.column_name FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = 'public' AND tc.table_name = 'terminal_pos_202602'; Doris 配置检查 登录 Doris FE MySQL 协议端口后执行: SELECT @@version_comment, @@version; SHOW FRONTEND CONFIG LIKE 'max_streaming_job_num'; 如果 max_streaming_job_num 为 0 或 Streaming Job 语法不可用,需要先调整 Doris FE 配置或切换到正式 4.1.1 镜像版本。 PostgreSQL JDBC Driver 准备 Streaming Job 需要 PostgreSQL JDBC Driver。建议将驱动放到 Doris FE/BE 都可访问的 HTTP 地址。 示例: postgresql-42.7.3.jar 本文 SQL 中使用 <PG_DRIVER_URL> 占位,执行前替换为实际地址,例如: https://maven.aliyun.com/repository/public/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar 源表结构 CREATE TABLE `fudabd_user` ( `id` bigint NOT NULL COMMENT "用户ID", `user_name` varchar(50) NOT NULL COMMENT "用户名", `password` varchar(255) NOT NULL COMMENT "密码(应加密存储)", `age` tinyint NULL COMMENT "年龄", `create_time` datetime NULL COMMENT "创建时间", `update_time` datetime NULL COMMENT "更新时间", `is_deleted` int NULL DEFAULT "0" COMMENT "是否删除标记" ) SQL 映射同步 推荐结论 当前验证目标是 fudabd_user 同步到 fudabd_user ,且 Doris 目标表不存在、需要设计为 UNIQUE KEY ,优先 SQL 映射同步。 该模式优势: 可将源表 fudabd_user 明确写入目标表 fudabd_user 。 可手动控制 Doris 表模型、字段类型、分桶数和副本数。 可承接 PostgreSQL 主键表的 INSERT 、 UPDATE 、 DELETE CDC 变更。 创建 Doris 数据库 CREATE DATABASE IF NOT EXISTS fudabd_common_plat_db; USE fudabd_common_plat_db; 创建 Doris 目标表 CREATE TABLE `fudabd_user` ( `id` bigint NOT NULL COMMENT "用户ID", `user_name` varchar(50) NOT NULL COMMENT "用户名", `password` varchar(255) NOT NULL COMMENT "密码(应加密存储)", `age` tinyint NULL COMMENT "年龄", `create_time` datetime NULL COMMENT "创建时间", `update_time` datetime NULL COMMENT "更新时间", `is_deleted` int NULL DEFAULT "0" COMMENT "是否删除标记" ) ENGINE=OLAP UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "min_load_replica_num" = "-1", "is_being_synced" = "false", "storage_medium" = "hdd", "storage_format" = "V2", "inverted_index_storage_format" = "V3", "compression" = "LZ4", "enable_unique_key_merge_on_write" = "true", "light_schema_change" = "true", "disable_auto_compaction" = "false", "enable_single_replica_compaction" = "false", "group_commit_interval_ms" = "10000", "group_commit_data_bytes" = "134217728", "enable_mow_light_delete" = "false" );; 参数建议: 单 BE 验证环境使用 replication_num = 1 。 生产多 BE 环境建议改为 replication_num = 3 。 日均 500 万数据验证阶段可先使用 BUCKETS 32 ,生产环境根据 BE 数量和 tablet 大小调整为 32 或 64 。 创建 SQL 映射 Streaming Job 执行前需要将 <PG_DRIVER_URL> 替换为 PostgreSQL JDBC Driver 的实际地址。 将 “offset” 从 “initial” 改为 “latest” 即可跳过全量快照,仅捕获增量变更: CREATE JOB pg_fudabd_user_to_fudabd_user ON STREAMING DO INSERT INTO fudabd_common_plat_db.fudabd_user ( id , user_name , password , age` tinyint , create_time , update_time , is_deleted ) SELECT id, user_name , password , age, create_time , update_time , is_deleted FROM cdc_stream( "type" = "postgres", "jdbc_url" = "jdbc:postgresql://127.0.0.1:15432/fudabd_common_plat_db", "driver_url" = "https://maven.aliyun.com/repository/public/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar", "driver_class" = "org.postgresql.Driver", "user" = "postgres", "password" = "Fdbd@2013", "database" = "fudabd_common_plat_db", "schema" = "public", "table" = "fudabd_user", "offset" = "initial" ); JOB 运维命令 以下命令用于查看、暂停、恢复和删除前面创建的 Doris Streaming Job。 JOB 查看所有 INSERT 类型 JOB: SELECT * FROM jobs("type" = "insert"); 查看 SQL 映射同步 JOB: SELECT * FROM jobs("type" = "insert") WHERE Name = 'pg_fudabd_user_to_fudabd_user'; 查看 JOB 产生的 TASK 查看所有 INSERT 类型 TASK: SELECT * FROM tasks("type" = "insert"); 查看 SQL 映射同步 JOB 的 TASK: SELECT * FROM tasks("type" = "insert") WHERE JobName = 'pg_fudabd_user_to_fudabd_user'; 暂停 JOB 暂停 SQL 映射同步 JOB: PAUSE JOB WHERE jobName = 'pg_fudabd_user_to_fudabd_user'; 恢复启动 JOB 恢复 SQL 映射同步 JOB: RESUME JOB WHERE jobName = 'pg_fudabd_user_to_fudabd_user'; 删除 JOB 删除 SQL 映射同步 JOB: DROP JOB WHERE jobName = 'pg_fudabd_user_to_fudabd_user'; PGSQL运维命令 -- 查看当前 Publication SELECT p.pubname, n.nspname AS schema_name, c.relname AS table_name FROM pg_publication p JOIN pg_publication_rel pr ON p.oid = pr.prpubid JOIN pg_class c ON pr.prrelid = c.oid JOIN pg_namespace n ON c.relnamespace = n.oid; -- 查看 Replication Slot SELECT slot_name, plugin, slot_type, active, database, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots; ​ -- 如果 Slot 仍然 active,先终止连接 SELECT pid, usename, application_name, client_addr, state FROM pg_stat_activity WHERE backend_type = 'walsender'; ​ SELECT pg_terminate_backend(pid); -- pid 需要手动替换 ​ -- 删除 Replication Slot SELECT pg_drop_replication_slot('slot_name'); ​ -- 删除 Publication -- 查看当前 Publication 进行替换 DROP PUBLICATION doris_pub_1781162893358; ​ ​ -- 确认 Slot 已删除 SELECT slot_name FROM pg_replication_slots; ​ -- 检查 WAL 是否恢复正常 SELECT slot_name, active, pg_size_pretty( pg_wal_lsn_diff( pg_current_wal_lsn(), restart_lsn ) ) AS retained_wal FROM pg_replication_slots; ​ 延迟与性能建议 当前单表日均约 500 万条,验证阶段建议先使用 BUCKETS 32 。 如果同步延迟超过 10 秒,优先检查 Doris Streaming Job 状态、BE compaction、tablet 数量、网络带宽和 PostgreSQL replication slot WAL 堆积。 如果 Doris 集群 BE 数量较多,可将 BUCKETS 调整到 64 ,但不建议在 POC 初期过度增加 tablet 数。 生产环境建议使用多 BE,并将 replication_num 调整为 3 。 PostgreSQL 侧需要持续监控 pg_replication_slots ,避免 Doris Job 停止后 WAL 长时间堆积。 注意事项 STREAMING JOB 任务状态出现PENDING解决 问题根因 __internal_schema.streaming_job_meta 是 Doris 内部管理 Streaming Job 元数据的系统表, FE 未能自动创建它 。所有 Streaming Job 操作都依赖此表,缺失则全部阻塞在 PENDING。 确认 __internal_schema 库及表现状 -- 查看内部库是否存在 SHOW DATABASES LIKE '__internal_schema'; ​ -- 如果存在,查看里面有哪些表 SHOW TABLES FROM __internal_schema; 第一步:先停掉报错的 JOB 止血 TOP JOB pg_fudabd_user_to_fudabd_user; 第二步:手动创建缺失的内部表 CREATE TABLE IF NOT EXISTS `__internal_schema`.`streaming_job_meta` ( `id` bigint NOT NULL, `job_id` bigint NOT NULL, `table_name` varchar(256) NOT NULL, `chunk_list` text ) UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_num" = "1" ); 这是基于日志中 SQL 推断的最小表结构。如果后续 FE 代码还访问了其他字段,会再次报错,届时根据错误信息用 ALTER TABLE 补充列即可。 第三步:删除旧 JOB 重新创建 3 个帖子 - 3 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-11 01:32:14+08:00 · tech

Audio priscos illos viros probos atque sapientes, die Iovis — quartus is hebdomadis dies habetur — pecuniam suam in plebem erogasse, ne quis egestate premeretur. Pullum aureum alienis pueris donasse, quod et suus puer hoc cibo delectaretur; aquam nigram dulcem aliis senibus praebuisse, quod suus quoque senex eam libenter hauriret. O priscam virtutem! O sapientiam maiorum! Si quidem tales sint viri, ut quisque quinquaginta sestertios alteri det, omnes carnem vescentur, civitas concordia florebit. O vere sapientes! 27 个帖子 - 27 位参与者 阅读完整话题

V2EX - 技术 · 2026-06-10 10:22:53+08:00 · tech

pydbdict 0.1.0a1 is out. It is a lightweight embedded Python dictionary database backed by SQLite, with JSON Schema validation, secondary indexes, foreign keys, and transaction support. 这是一个基于 SQLite 的轻量级嵌入式 Python 字典数据库,支持 JSON Schema 验证、二级索引、外键以及事务支持。 Install: pip install pydbdict Verify: python -m pydbdict.selftest python -m pydbdict.tests GitHub: https://github.com/arthwang/pydbdict PyPI: https://pypi.org/project/pydbdict/

IT之家 · 2026-06-08 18:26:55+08:00 · tech

IT之家 6 月 8 日消息,欧菲光今日宣布,推出 RoboVision 系列的首发产品 Dex400R RGBD(D 指深度 Depth)相机,支持 D2C+IMU 同步、数采、外部触发等模式, 可实现手眼协同、无序抓取、近远场避障等功能 ,为通用机器人场景量身定制。 IT之家获悉,Dex400R 专为机器人机械臂抓取识别、数据采集、补盲避障场景深度定制,通过硬件级同步、全局快门、IMU 融合等设计,保障机器人高速动态作业的稳定性与精准度。 官方表示,Dex400R 尺寸为 45mm*28mm*28mm,近距离 10-20cm 识别精度<1.5mm,可实现毫米级超高感知精度,远距离误差小于 1%;测距盲区 5cm,近场精密抓取、细缝检测,远场感知全覆盖。 该产品采用 USB+GMSL 双接口设计 ,为同品类业内唯一,兼顾本地直连与长距抗干扰传输,适配工业、机器人多场景部署,拓展更多应用场景。

v2ex · 2026-06-08 00:35:34+08:00 · tech

比如我 Windows 使用的是 Clash Party ,配置了不同家机场的订阅,然后通过 Clash Party-设置-WebDAV 备份且成功把该客户端下的不同家的机场订阅配置备份成功了,然后切换到 Android 手机端,且手机端使用了 FlClash for Android 客户端,同样在该 App 页面内的 WebDAV 配置了服务器地址、用户名和密码,但是无法恢复在 Clash Party 的配置信息,点恢复后有如下错误提示: DioException [bad response]:null Error:Not Found 请问各位 V2EX 大佬们,这是什么原因呢?

v2ex · 2026-06-08 00:35:34+08:00 · tech

比如我 Windows 使用的是 Clash Party ,配置了不同家机场的订阅,然后通过 Clash Party-设置-WebDAV 备份且成功把该客户端下的不同家的机场订阅配置备份成功了,然后切换到 Android 手机端,且手机端使用了 FlClash for Android 客户端,同样在该 App 页面内的 WebDAV 配置了服务器地址、用户名和密码,但是无法恢复在 Clash Party 的配置信息,点恢复后有如下错误提示: DioException [bad response]:null Error:Not Found 请问各位 V2EX 大佬们,这是什么原因呢?

LinuxDo 最新话题 · 2026-06-03 20:54:00+08:00 · tech

我在局域网内用 OpenList 在 5244 端口搭建了一个明文 HTTP 的 WebDav 服务器。当使用 Debian 13 的 KDE 桌面自带的 Dolphin 文件管理器挂载时,读取正常,但是不能上传文件。弹窗提示“尝试上传时发生意外错误(0)”。同样的设置用其他软件和安卓手机上的软件都正常。 问了 AI,抓了一下日志发现是 KIO Worker 进程崩溃 ~$ QT_LOGGING_RULES="kf.kio.workers.http.debug=true;kf.kio.workers.dav.debug=true" dolphin kf.kio.core: Connection::send() called with connection not inited kf.kio.core: An error occurred during write. The worker terminates now. kf.kio.core: Connection::send() called with connection not inited kf.kio.core: An error occurred during write. The worker terminates now. kf.kio.core: Connection::send() called with connection not inited kf.kio.core: An error occurred during write. The worker terminates now. 尝试了清理 KIO 缓存、重装 KIO 相关组件、尝试在地址栏改用 webdav:// 和 http:// 都没用。又问了一下 Grok,它说这个问题很早之前就有人提出过,但是至今未解决,推荐换用 davfs2 或者 rclone 代替自带的 KIO,也可以尝试换用 HTTPS 以及检查服务器是否支持 Expect: 100-continue,尝试关闭服务器的 keep-alive 等。 然后我又想起来之前我安卓上要用 FolderSync Pro,它只支持 HTTPS 而不支持明文 HTTP,我就用OpenResty 反代了一下 5244 端口的 OpenList。加上了自签名证书,运行在 8443 端口。我抱着司马权当活马医的心态用 Dolphin 进入 8443 的 webdavs,结果发现文件上传正常了。再回过头去连接 5244 的明文 HTTP 问题依旧。 于是这个玄学问题就如此用“曲线救国”的方式解决了。 1 个帖子 - 1 位参与者 阅读完整话题