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 位参与者 阅读完整话题
## 第一步 JWT=$(curl -s -X POST 'https://api.xiaomimimo.com/api/free-ai/bootstrap' \ -H 'Content-Type: application/json' \ -d "$(echo -n "{\"client\":\"haha\"}")" | python3 -c "import sys,json;print(json.load(sys.stdin)['jwt'])") ## 第二步 curl -X POST 'https://api.xiaomimimo.com/api/free-ai/openai/chat' \ -H "Authorization: Bearer $JWT" \ -H 'X-Mimo-Source: mimocode-cli-free' \ -H 'Content-Type: application/json' \ -d '{ "model": "mimo-auto", "messages": [{"role":"user","content":"hello, who are you?"}], "max_tokens": 128000, "stream": true, "temperature": 1.0 }' 1 个帖子 - 1 位参与者 阅读完整话题
This is an automated test post. Will be deleted. Testing API integration.
有没有佬遇到过和我一样的情况 申请沃达丰esim之后 autoid环节 下载了postident 跟着流程拍照验证了几次 完全没有通过的邮件的 也没有不通过的邮件 4 个帖子 - 4 位参与者 阅读完整话题
如题,周末我在手机Chrome登录L站,竟然没算登录天数?下载了归档记录查看,6月6号和7号都是有访问记录的,只是posts_read和time_read都是0,这种就不算登录天数吗,有没有佬友知道? 2 个帖子 - 2 位参与者 阅读完整话题
不想要AI生图那样,可以接受先生图+自己排版,佬们有什么推荐的流程吗 2 个帖子 - 1 位参与者 阅读完整话题
为啥首次启动,要先连接到 postgres 数据库?导致一直卡在初始化步骤 我记得之前不是这样的,这是哪个版本引入的吗? 我不是自托管的,现在的云托管数据库服务都默认没有这个库了呀!! 1 个帖子 - 1 位参与者 阅读完整话题
已将CHY公益站使用的MySQL迁移至 PostgreSQL 并配置了 Redis 作为缓存,至此,CHY公益站迈出向着稳定的第二步 10 个帖子 - 10 位参与者 阅读完整话题
来源是电鸭: https://eleduck.com/posts/5Bfrzn 📌 项目概述 为一个 OC (原创角色)社交平台开发后台管理系统,包含管理端前端+后端 API 。移动端前端已有团队在收尾,你负责的是管理后台全套。 🛠 技术栈 后端:Node.js + Express/Koa 数据库:MySQL + Redis 后台前端:Vue3 + Element Plus 部署:Docker + Nginx 接口文档:Swagger 📋 开发内容( 8 个模块) 综合看板 — 用户统计、对话量、收入等数据概览+趋势图 用户管理 — 用户列表/搜索/封禁/VIP 管理 OC 角色管理 — 角色 CRUD/审核流/标签分类/批量操作 内容审核 — 举报工单/审核队列/AI+人工双层审核/审核日志 通知系统 — 站内信/系统通知/互动提醒/模板管理 商城管理 — 虚拟商品 CRUD/订单管理/上下架 支付对接 — 微信+支付宝支付接口/订单流水/对账 系统设置 — 管理员权限/操作日志/AI Key 管理/参数配置 ⏰ 工期:45 天,分 4 个里程碑交付 💰 报酬:¥15,000-18,000 (按里程碑分期支付) ✅ 要求 2 年以上 Node.js 后端开发经验 有后台管理系统开发经验(需提供作品案例) 熟悉 MySQL 设计、Redis 缓存、Docker 部署 能写规范的 Swagger 接口文档 45 天内能保证投入(每天至少 4 小时) 有支付对接经验优先 📋 交付物 后台管理系统完整源码(前端+后端) MySQL 数据库设计及初始化脚本 Swagger 接口文档 Docker 部署配置 部署及本地运行文档
https://www.science.org/content/blog-post/causes-long-covid 虽然估计数字并不精确,但全球有数百万人正在应对新冠后遗症,这确实对公共卫生造成了影响。然而,弄清其原因却十分困难。最有可能的猜测之一是这与免疫反应有关。这符合个体免疫反应的差异性,因为每个人的免疫系统都有其独特的特征,也符合其他感染后已知的免疫相关后遗症。我们可以从格林-巴利综合征等急性疾病入手,并以此为基础进行研究;毫无疑问,某些病毒或细菌感染在某些人身上会持续多年,而另一些人则不会出现这种情况。呼吸道病毒感染尤其容易出现这种情况,其原因仍在研究中。莱姆病很可能是另一个例子。毫无疑问,多年来,人们一直将这些问题归类为精神病学而非免疫学的范畴,这阻碍了相关领域的研究。 遗憾的是,要用确凿的数据来支持这一极具吸引力的自身免疫假说一直非常困难,但这种情况或许已经有所改变。许多报告显示,这些患者体内存在自身抗体(自身免疫性疾病的关键标志),但相关文献似乎相当零散,亟需更多验证。不过,这里有一篇发表在《细胞报告医学》(Cell Reports Medicine)上的论文,还有一篇发表在《细胞》(Cell)杂志上的文章。这两个研究团队都对这类自身抗体进行了细致的搜寻------前者发现了靶向皮肤和上皮组织的候选抗体,后者(密切关注出现神经和认知症状的患者)则发现了靶向神经和内分泌组织的候选抗体。人们认为,皮肤/上皮组织中的自身抗体很可能靶向这些组织中的神经末梢,因此,长新冠可能总体上存在神经系统方面的因素。 重要的是,从这些患者血液中提取的IgG组分在体外与多种小鼠组织发生交叉反应,并且将这些IgG转移到活体小鼠体内后,小鼠出现了疼痛、疲劳、协调障碍、温度敏感性等症状。而从健康患者体内转移IgG则未观察到这些效应。毋庸赘言,输注抗体组分无法转移神经质或持续的不良态度。新冠后遗症是一种真正的疾病,与狼疮、多发性硬化症、桥本氏甲状腺炎或I型糖尿病一样,这些疾病都是由人体自身组织产生抗体所致。 https://www.sciencedirect.com/science/article/pii/S2666379126001102 https://www.sciencedirect.com/science/article/pii/S009286742600509X 1 个帖子 - 1 位参与者 阅读完整话题
三台服务器,一台用来跑服务,简称service,另外一台运行了Kafka和PostgreSQL,这台简称sql-kafka,最后一台放了Cassandra,这个简称Cassandra,然后这三个服务器都是同一个vpc,并且他们的可用区域都是一样的,service访问sql-kafka和cassandra都是通过vpc的里面的内网IP访问的,亚马逊的数据转发不是说处于同一个区域并且通过内网IP访问是没有数据转发费用的,但是现在我看到了很多的数据转发流量 3 个帖子 - 2 位参与者 阅读完整话题
到了使用 postident 认证的环节,拍完护照点使用就出来一个提示:a technical error occorred, please try later. 这怎么整?有佬遇到过的么。。 3 个帖子 - 2 位参与者 阅读完整话题
题主在公司里是做post train infra,也做一点算法,codex 重度用户,自己电脑上是20x pro平常做点开发。 公司因为提供免费的codex,加上现在项目比较重要,基本没有用量限制,最近做完一个大重构/架构开发之后,现在连启动debug 实验都是靠prompt codex做了,晚上睡觉前写一个大概的测试计划,把从集群启动实验的权限给codex,然后让他各种测试,把结果写成一个markdown记录,然后再开一个codex 去盯整个训练的log,分析报错+存下来的debug 数据,迭代速度快得飞起。 现在每天睡前都得想一下怎么压榨codex,一个月干掉了公司五万多美元的额度 3 个帖子 - 2 位参与者 阅读完整话题
IT之家 5 月 30 日消息,科技媒体 marktechpost 昨日(5 月 29 日)发布博文,报道称 Nous Research 为开源 Hermes Agent(Hermes 智能体)加入 Tool Search(工具搜索), 通过按需加载缓解 MCP(模型上下文协议)工具占满上下文的问题。 根据 Anthropic 在 2025 年 11 月发布的报告,在一个包含 5 台 MCP 服务器和 34 个工具的 Hermes 部署显示,平均每回合的提示符大小为 45000 个 tokens,其中大约 22000 个 tokens(约占 50%)仅仅是工具模式的开销。 Anthropic 在今年 4 月发布的论文中,指出在典型多服务器部署环境下,工具注意力(Tool Attention)是衡量“MCP 工具税”消耗的关键,优化前工具定义可消耗 134000 个 tokens,每回合消耗的 tokens 数量为 15000 至 60000 个。 这种“MCP 工具税”导致 2 个问题: 成本:会话开始时的缓存未命中生成每次可能花费 0.07 美元至 0.10 美元。 准确率下降:当模型同时看到数百个不相关的工具选项时,就会出现决策瘫痪。 Hermes Agent 为解决上述问题,引入 Tool Search 功能,是可选渐进式披露层,该模型不会预先加载所有工具架构,而是按需逐轮加载所需内容。 启用 Tool Search 后,模型可见工具数组中的 MCP 工具和插件工具替换为三个桥接工具: tool_search(query, limit?) — search the deferred-tool catalog tool_describe(name) — load the full schema for one tool tool_call(name, arguments) — invoke a deferred tool 其中 tool_search 负责搜索,tool_describe 负责载入完整模式,tool_call 负责调用真实工具。模型先找工具,再看参数,最后调用目标工具。 典型的交互过程如下: Model: tool_search("create a github issue") → { matches: [{ name: "mcp_github_create_issue", ... }] } Model: tool_describe("mcp_github_create_issue") → { parameters: { type: "object", properties: { ... } } } Model: tool_call("mcp_github_create_issue", { title: "...", body: "..." }) → { ok: true, issue_number: 42 } 启用该工具后,能有效提升准确率,Anthropic 内部 MCP 评测显示,Claude Opus 4 在启用 Tool Search 后,准确率从 49% 提升到 74%。Claude Opus 4.5 也从 79.5% 提升到 88.1%,无关工具减少后,误选概率随之下降。 检索层使用 BM25(经典文本检索算法),匹配工具名、描述与参数名。若 BM25 没有返回正分结果,系统会退回到工具名的字面子串匹配,避免在所有工具名都含有相同词时出现零分问题。 配置参考: 将以下内容添加到 hermes.yaml 文件中: tools: tool_search: enabled: auto # auto (default), on, or off threshold_pct: 10 # % of context at which auto mode kicks in search_default_limit: 5 max_search_limit: 20 IT之家附上参考地址 Tool Search Introducing advanced tool use on the Claude Developer Platform Tool Attention Is All You Need: Dynamic Tool Gating and Lazy Schema Loading for Eliminating the MCP/Tools Tax in Scalable Agentic Workflows
游记全文: https://victor42.eth.limo/post/trip-to-xi-an/
游记全文: https://victor42.eth.limo/post/trip-to-xi-an/
游记全文: https://victor42.eth.limo/post/trip-to-xi-an/
游记全文: https://victor42.eth.limo/post/trip-to-xi-an/
postman: 接口调试工具。 替换原因:强制账号登录 xshell: 远程连接工具。 替换原因:强制版本更新 navicat:数据库管理工具。 替换原因:收到官方邮件了,商业使用需付费 求推荐免费、轻量、好用的替代软件
postman: 接口调试工具。 替换原因:强制账号登录 xshell: 远程连接工具。 替换原因:强制版本更新 navicat:数据库管理工具。 替换原因:收到官方邮件了,商业使用需付费 求推荐免费、轻量、好用的替代软件