咸鱼上,贩子叫快递上门取货,直接打款有猫腻吗
搜了下新闻,好像说银行卡可能有来路不明名的钱,会被追回。
所以想问问有没有这种交易过的 v 友,走银行卡不安全的话,支付宝微信啥的可以吗?还是加点钱走咸鱼平台呢
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
搞点网络基础题玩玩,我之前有个考试网站,考过基础题就给平台邀请码,后来发现太简单了,就关闭了,有时间搬运一些过来。那些题目还没有考到 100 分的,100 个选择题,最多的 97 还是 98。
看下面的:HTTPS 是协议吗?
作者:徐可甲(烨陌) 近年来,出海已成为越来越多中国企业的选择,出海业务的发展模式也从早期“先上线再整改”的粗放经营,转向“合规前置、本地嵌入、持续迭代”的成熟发展,积极探索从“产品输出”到“技术+品牌+本地化”的深度全球化。但随着欧盟《数字服务法》(DSA)、美国《数据隐私框架》、东南亚各国数据本地化立法加速,“合规先行”已成为企业能否在海外市场长期立足的关键。 越来越多的中企出海案例为创业者提供了清晰的参照:凭借国内成熟的产品化能力和完善的供应链体系,出海拓展全球市场正成为 AI 时代的重要机遇。但成功的出海企业不再仅靠成本优势,而是通过本地化合规架构、税务风控体系、ESG 治理、数据主权管理等多维举措,才能实现“走得出去、留得下来、做得长久”。机遇背后是不可忽视的合规挑战——数据跨境、多地监管、隐私保护、存储架构等问题,必须在业务扩张之前就完成系统性规划。 本文面向安全合规领域的开发者,梳理 AI 出海面临的核心合规挑战,并介绍阿里云日志服务(SLS)如何提供全链路的技术支撑。 当前许多出海企业的数据架构呈现典型的“三明治”形态: 这种架构导致数据流转路径异常复杂:用户数据从海外传至国内处理,再转发至美国等地的模型服务商进行推理,最后返回用户。数据在多个司法管辖区之间反复穿梭,同时触发多地的数据主权审查。 全球主要经济体在数据立法时都遵循一个基本原则:本地产生的数据,主权归属本地。“三明治”架构恰恰与这一原则相悖,使企业暴露在多重合规风险之下。 出海企业通常需要同时应对中国、美国、欧盟三个主要法域的合规要求,它们的监管重心各有侧重。 美国监管的特点是以诉讼为核心手段,一旦被执法机构“盯上”,往往面临连锁反应式的处罚。 典型案例: 儿童教育机器人品牌 Apitor 因违反《儿童在线隐私保护法》(COPPA)受到处罚。其违规行为包括:通过 SDK 收集儿童精确位置信息、将数据回传中国服务器、隐私政策与实际操作严重不符。最终结果是 50 万美元和解金,外加十年期强制整改令——需销毁违规数据、接受第三方审计、定期提交合规报告。这种长周期、高成本的整改要求,几乎等同于产品在北美市场的“出局”。 欧盟以《通用数据保护条例》(GDPR)为核心,建立了全球最严格的数据保护体系。其核心理念是:数据归用户所有,企业使用需获得明确授权。 GDPR 的五项关键要求: 值得警惕的案例: 某消费级摄像头产品因中国工程师通过 VPN 访问存储在欧洲的用户数据,被德法两国数据保护机构认定为等效的数据跨境传输。这表明欧盟监管不仅审查数据的物理存储位置,更关注谁能访问这些数据。 国内以《网络安全法》《数据安全法》《个人信息保护法》构建了完整的数据合规框架。对于 AI 出海业务,有两项硬性要求: 此外,《网络安全法》第二十一条明确规定:网络日志留存期限不少于六个月。这对日志采集与审计系统提出了明确的技术要求。 面对上述复杂的合规环境,AI 出海企业需要一套完整的技术方案来支撑合规要求。以下从三个核心合规挑战出发,介绍阿里云日志服务(SLS)提供的解决方案。 在美国监管的「顺藤摸瓜」式执法模式下,企业一旦被调查,需要提供完整的证据链来证明合规性。这意味着不仅要记录「谁在何时做了什么」,还要能够快速还原事件的完整上下文。 然而,现代云环境面临着两大挑战: 这种多维度的碎片化导致运维与安全团队深陷「数据丰富但信息贫乏」的困境。当异常发生时,仅凭离散的日志,很难将一个高阶的 API 操作精准映射到底层的进程执行或文件读写。 云监控 2.0 日志审计 [ 1] 打破了传统的单点日志查询模式,通过统一采集基座配合三大核心分析能力,构建完整的审计体系。 核心能力: 合规效果: 这种方案让日志审计不再是孤立的数据查询,而是围绕资源对象的全生命周期行为分析,真正实现从「看日志」到「掌全局」的安全运营升级。 全球各主要法域对日志留存都有明确的强制性要求: 对于出海企业而言,更大的挑战在于:业务横跨全球多个地域,不同地域的日志需要满足数据本地化存储要求,同时又需要实现集中化分析以满足安全运营需求。一个基础的全球数据存储布局至少需要覆盖四个节点: 传统方案往往导致「信息孤岛」——日志分散在不同地域、不同账号,无法形成统一的安全视图。 阿里云日志审计(新版) [ 3] 专为跨地域、跨账号的日志集中管理而设计,已通过《信息安全技术网络安全专用产品安全技术要求》(GB 42250-2022)及《信息安全技术日志分析产品安全技术要求》(GA/T 911-2019)认证,是国家认可的网络安全专用产品。备注:当前以独立的应用形态存在,后续将于云监控 2.0 彻底融合。 核心能力: 这种方案打破了「信息孤岛」,在满足各地数据本地化存储要求的同时,实现了全球日志的统一管理和安全洞察。 GDPR 的「数据最小化原则」要求企业只能收集业务必需的最少数据,同时各国对敏感数据(生物识别、儿童数据等)的保护要求越来越严格。 然而,AI 应用的日志中往往隐藏着大量敏感数据: 这些信息若在系统内未经处理地流转、存储或导出,不仅违反数据最小化原则,更可能在调试、共享或导出日志时意外泄露。然而,现实场景中又无法简单地「少打日志」或「去掉字段」——日志是运维排障的工具,是运营分析的基础,也是安全审计的依据。 SLS 提供了丰富的脱敏方案,用户可以根据情况灵活选择: 传统数据脱敏往往采用正则处理的方式,但在面对日益复杂的数据场景时,正则表达式的局限性也逐渐凸显:处理十多种敏感信息类型需要编写数十个复杂正则表达式,维护成本呈指数级增长;多重嵌套的正则操作会严重拖慢实时处理性能;JSON、URI、纯文本的混合日志格式难以用统一正则配置高效处理。为此,SLS 推出了全新的 mask(脱敏)函数 [ 4] ,能够对结构化和非结构化日志中的敏感数据进行精准识别和脱敏,无需编写复杂正则,开箱即用。 核心能力: 对于 AI 出海企业而言,合规不是「要不要做」的选择题,而是「该怎么做」的必答题。从 Manus 的成功路径可以看到,前置解决数据合规、法律合规问题,是融入国际市场的关键一步。 在实践中,有三条经验值得借鉴: 阿里云日志服务(SLS)通过日志审计、数据脱敏等能力,为出海企业提供了从日志采集、存储、脱敏到分析溯源的全链路合规支撑。无论是满足《网络安全法》的日志留存要求,还是应对 GDPR 的数据保护挑战,都能提供坚实的技术底座。 合规之路虽然复杂,但有了正确的技术方案和前瞻性的布局,AI 企业就能在全球化浪潮中稳健前行,书写属于自己的出海故事。 参考文章: 《已上线!云监控 2.0 面向实体的全链路日志审计与风险溯源》 相关链接: [1] 云监控 2.0 日志审计 https://help.aliyun.com/zh/cms/cloudmonitor-2-0/log-audit/ [2] LoongCollector https://help.aliyun.com/zh/sls/what-is-sls-loongcollector [3] 阿里云日志审计(新版) https://help.aliyun.com/zh/sls/new-log-audit-service/ [4] mask(脱敏)函数 https://help.aliyun.com/zh/sls/data-masking-with-the-mask-fun...引言:企业出海,安全合规不再是选择题,而是必答题
出海合规:三道必须跨越的门槛
数据架构的隐患:“三明治模式”

三大市场的监管差异
美国:诉讼驱动,后果严重
欧盟:GDPR 的严格执行
要求 说明 高额罚款 违规罚款可达全球营收的 4%,科技巨头屡被开出天价罚单 被遗忘权 用户有权要求删除其数据,对已用于模型训练的数据如何处理是 AI 企业的难题 数据最小化 只能收集业务运行所必需的最少数据 知情同意 必须以清晰易懂的语言告知用户数据用途、存储期限、共享对象 跨境限制 数据出境需满足充分性认定或签署标准合同条款 中国:备案先行,合规底线
合规挑战与解决方案
如何实现操作审计与安全事件的快速溯源?
挑战
解决方案:云监控 2.0 日志审计







如何满足日志留存与集中审计的法规要求?
挑战
解决方案:日志审计(新版)


如何保护敏感数据,防止隐私泄露?
挑战
解决方案:脱敏函数

"key":"value"、'key':'value' 或 key=value 等常见 KV 对格式的敏感信息。即使数据嵌套多层 JSON 结构,也只需配置最内层的 Key 即可精准匹配,特别适合处理 AI 应用中常见的复杂嵌套日志。199****2345),既保护用户隐私,又方便运维人员进行问题排查和用户身份核验,实现安全与可用性的平衡。结语
2025/7/18 --Yichao 'Peak' Ji 在Manus项目的最初阶段,我和我的团队面临一个关键决策:我们是应该使用开源基础模型训练一个端到端的智能体模型,还是基于前沿模型的上下文学习能力构建一个智能体? 在我的NLP生涯的第一个十年里,我们没有这种选择的奢侈。在遥远的BERT时代(是的,已经过去七年了),模型必须先进行微调——和评估——才能迁移到新任务。这个过程通常每次迭代需要数周时间,尽管与今天的LLM相比,这些模型非常小。对于快速发展的应用,特别是在产品市场匹配(PMF)之前,这种缓慢的反馈循环是一个致命缺陷。这是我上一个创业公司的惨痛教训,当时我从头开始训练模型用于开放信息提取和语义搜索。然后GPT-3和Flan-T5出现了,我的内部模型一夜之间变得无关紧要。具有讽刺意味的是,这些相同的模型标志着上下文学习的开始——以及一条全新的前进道路。 这个来之不易的教训使选择变得明确:Manus将押注于上下文工程。这使我们能够在几小时而非几周内交付改进,并使我们的产品与底层模型保持正交:如果模型进步是上涨的潮水,我们希望Manus成为那条船,而不是固定在海床上的柱子。 尽管如此,上下文工程证明绝非易事。这是一门实验科学——我们已经重建了我们的代理框架四次,每次都是在发现了更好的塑造上下文的方式之后。我们亲切地将这种手动架构搜索、提示调整和经验猜测的过程称为"随机研究生下降"。这并不优雅,但它有效。 这篇文章分享了我们通过自己的"SGD"所达到的局部最优解。如果你正在构建自己的AI代理,我希望这些原则能帮助你更快地收敛。 如果我必须选择一个指标,我认为 KV-cache命中率 是生产阶段AI代理最重要的单一指标。它直接影响延迟和成本。为了理解原因,让我们看看典型代理是如何运作的: 在接收用户输入后,代理通过一系列工具使用链来完成任务。在每次迭代中,模型根据当前上下文从预定义的动作空间中选择一个动作。然后在环境中执行该动作(例如,Manus的虚拟机沙盒)以产生观察结果。动作和观察结果被附加到上下文中,形成下一次迭代的输入。这个循环持续进行,直到任务完成。 正如你所想象的,随着每一步的推进,上下文不断增长,而输出——通常是结构化的函数调用——保持相对简短。这使得代理(agents)相比聊天机器人的预填充和解码比例高度倾斜。例如在Manus中,平均输入与输出的token比例约为100:1。 幸运的是,具有相同前缀的上下文可以利用KV缓存,这大大减少了首个token的生成时间(TTFT)和推理成本——无论你是使用自托管模型还是调用推理API。我们说的不是小幅度的节省:例如使用Claude Sonnet时,缓存的输入token成本为0.30美元/百万token,而未缓存的成本为3美元/百万token——相差10倍。 从上下文工程的角度,提高KV缓存命中率涉及几个关键实践: 此外,如果你正在使用像 vLLM这样的框架自托管模型,请确保启用了前缀/提示缓存,并且你正在使用会话 ID 等技术在分布式工作节点之间一致地路由请求。 随着代理能力的增强,其行动空间自然变得更加复杂——简单来说,工具数量爆炸式增长。最近流行的MCP只会火上浇油。如果你允许用户自定义工具,相信我:总会有人将数百个神秘工具插入到你精心策划的行动空间中。结果,模型更可能选择错误的行动或采取低效的路径。简而言之,你武装过度的代理变得更加愚蠢。 一个自然的反应是设计一个动态行动空间——可能是使用类似于RAG的方法按需加载工具。我们在Manus中也尝试过这种方法。但我们的实验表明了一个明确的规则:除非绝对必要,避免在迭代过程中动态添加或移除工具。 这主要有两个原因: 为了解决这个问题并仍然改进动作选择,Manus使用上下文感知的状态机来管理工具可用性。它不是移除工具,而是在解码过程中掩蔽token的logits,以基于当前上下文阻止(或强制)选择某些动作。 在实践中,大多数模型提供商和推理框架支持某种形式的响应预填充,这允许你在不修改工具定义的情况下约束动作空间。函数调用通常有三种模式(我们将使用 NousResearch 的 Hermes 格式 作为示例): 通过这种方式,我们通过直接掩码token的logits来约束动作选择。例如,当用户提供新输入时,Manus必须立即回复而不是执行动作。我们还有意设计了具有一致前缀的动作名称——例如,所有与浏览器相关的工具都以browser_开头,命令行工具以shell_开头。这使我们能够轻松确保代理在给定状态下只从特定工具组中进行选择而无需使用有状态的logits处理器。 这些设计有助于确保Manus代理循环保持稳定——即使在模型驱动的架构下。 现代前沿LLM现在提供128K令牌或更多的上下文窗口。但在真实世界的代理场景中,这通常不够,有时甚至是一种负担。有三个常见的痛点: 为了解决这个问题,许多代理系统实现了上下文截断或压缩策略。但过度激进的压缩不可避免地导致信息丢失。这个问题是根本性的:代理本质上必须根据所有先前状态预测下一个动作——而你无法可靠地预测哪个观察结果可能在十步之后变得至关重要。从逻辑角度看,任何不可逆的压缩都带有风险。 这就是为什么我们在Manus中将文件系统视为终极上下文:大小不受限制,天然持久化,并且代理可以直接操作。模型学会按需写入和读取文件——不仅将文件系统用作存储,还用作结构化的外部记忆。 我们的压缩策略始终设计为可恢复的。例如,只要保留URL,网页内容就可以从上下文中移除;如果沙盒中仍然保留文档路径,则可以省略文档内容。这使得Manus能够缩短上下文长度,而不会永久丢失信息。 在开发这个功能时,我发现自己在想象状态空间模型(State Space Model, SSM) 在智能体环境中有效工作需要什么条件。与Transformer不同,SSM缺乏完整的注意力机制,并且在处理长距离的后向依赖关系时表现不佳。但如果它们能够掌握基于文件的记忆——将长期状态外部化而不是保存在上下文中——那么它们的速度和效率可能会开启一类新型智能体。基于SSM的智能体可能是神经图灵机真正的继任者。 如果你使用过Manus,你可能注意到一个有趣的现象:在处理复杂任务时,它倾向于创建一个todo.md文件——并在任务进行过程中逐步更新它,勾选已完成的项目。这不仅仅是可爱的行为——这是一种操控注意力的刻意机制。 Manus中的一个典型任务平均需要大约50次工具调用。这是一个很长的循环——由于Manus依赖LLM进行决策,它很容易偏离主题或忘记早期目标,尤其是在长上下文或复杂任务中。 通过不断重写待办事项列表,Manus将其目标复述到上下文的末尾。这将全局计划推入模型的近期注意力范围内,避免了"丢失在中间"的问题,并减少了目标不一致。实际上,它使用自然语言来使自己的注意力偏向任务目标——而不需要特殊的架构变更。 代理会犯错。这不是bug——这是现实。语言模型会产生幻觉,环境会返回错误,外部工具会出现异常行为,意外的边缘情况随时都会出现。在多步骤任务中,失败不是例外;它是循环的一部分。然而,一个常见的冲动是隐藏这些错误:清理痕迹,重试操作,或重置模型的状态并将其留给神奇的"温度"。这感觉更安全,更受控制。但这是有代价的:擦除失败会移除证据。没有证据,模型就无法适应。 根据我们的经验,改善代理行为最有效的方法之一出奇地简单:将错误的尝试保留在上下文中。 当模型看到一个失败的行动——以及由此产生的观察结果或堆栈跟踪——它会隐式地更新其内部信念。这会改变其先验,降低重复相同错误的可能性。 事实上,我们认为错误恢复是真正代理行为的最明显指标之一。然而,在大多数学术工作和公共基准测试中,这一点仍然代表性不足,它们通常关注理想条件下的任务成功。 少样本提示是提高LLM输出的常用技术。但在代理系统中,它可能会以微妙的方式适得其反。 语言模型是优秀的模仿者;它们模仿上下文中的行为模式。如果你的上下文充满了类似的过去行动-观察对,模型将倾向于遵循该模式,即使这不再是最优的。 这在涉及重复决策或行动的任务中可能很危险。例如,当使用Manus帮助审查20份简历时,代理通常会陷入一种节奏——仅仅因为这是它在上下文中看到的,就重复类似的行动。这导致偏离、过度泛化,或有时产生幻觉。 解决方法是增加多样性。Manus在行动和观察中引入少量的结构化变化——不同的序列化模板、替代性措辞、顺序或格式上的微小噪音。这种受控的随机性有助于打破模式并调整模型的注意力。 换句话说,不要让自己陷入少样本学习的窠臼。你的上下文越单一,你的智能体就变得越脆弱。 上下文工程仍然是一门新兴的科学——但对于智能体系统来说,它已经是必不可少的。模型可能变得更强大、更快速、更经济,但再多的原始能力也无法替代对记忆、环境和反馈的需求。你如何塑造上下文最终决定了你的智能体的行为方式:它运行的速度、恢复的效果以及扩展的范围。 在Manus,我们通过反复的重写、死胡同以及面向数百万用户的实际测试学到了这些经验。我们在这里分享的内容并非放之四海而皆准的真理——但这些是对我们有效的模式。如果它们能帮助你避免哪怕一次痛苦的迭代,那么这篇文章就达到了它的目的。 智能体的未来将一次构建一个上下文。好好设计它们吧。围绕KV缓存进行设计

遮蔽,而非移除

使用文件系统作为上下文

通过复述操控注意力

保留错误的内容

不要被少样本示例所困

结论
在企业研发管理实践中,IPD 往往是必修课,但很多团队在推进过程中发现,光有流程和制度远远不够。工具的选择,往往直接决定了 IPD 能否真正落地。 源自华为 30 年实践: 这不是一款普通的商业软件,而是华为将自身 30 年的研发管理变革经验“代码化”后的产物。它内置了华为内部一直在使用的标准工作流和管理模板。端到端全链路打通: 实现了从客户需求(Epic)到特性(Feature)再到开发任务(Story)的闭环管理,确保每一个开发动作都能追溯到最初的市场价值。 行业: ICT、通信、大型软件研发、智能硬件。 飞书项目是 IPD 软件领域的一个破局者。如果说华为 CodeArts 是严谨的“教官”,Teamcenter 是厚重的“仓库”,那么飞书项目更像是一个“超级连接器”。它不仅仅是一个项目管理工具,而是试图用互联网的极致协作体验去重构传统且僵化的 IPD 流程。 行业: 新势力造车、消费电子(手机、无人机)、游戏、复杂的软硬结合项目。 行业: 汽车主机厂、航空航天、重型机械、高端医疗器械。
华为云 CodeArts、飞书项目与 Siemens Teamcenter 各自沿着不同的路线优化研发协作与流程管理:有的偏向完整工业级流程,有的擅长敏捷团队协作,有的强调数据和配置管理。
本文将结合实际落地场景,分析三款工具在不同组织类型和研发阶段中的适配度与能力边界,帮助团队在选型时少走弯路。华为云 CodeArts(原 DevCloud)
定位: IPD理念的“原产地”与“正统派”。
核心卖点

如何支撑 IPD 流程
CodeArts 预置了这些关键节点,强制要求项目在进入下一阶段前完成必要的动作,防止流程“随意剪裁”。
它允许 PD(产品经理)在顶层看路标,PM(项目经理)在中间管进度,开发人员在底层做执行,数据自动聚合。
它的需求管理极其严谨,支持 $APPEALS 等分析模型,帮助团队在立项初期就剔除伪需求。缺点与挑战
适合谁?
企业画像: 立志全盘引入华为管理体系的中大型企业,且企业内部已有一定的流程管理文化基础。飞书项目 - 行业专版
定位: 流程型组织的大杀器,用“柔性”解决 IPD 的“刚性”痛点。
核心卖点
它是市面上配置能力最强的工具之一。传统的 IPD 软件改一个流程可能需要找厂商二次开发,而在飞书项目里,业务人员可以通过拖拽节点自定义复杂的串行、并行、判断流程。
它与飞书(IM、文档、会议)深度集成。IPD 流程中大量的评审(TR)、决策(DCP)往往死于沟通效率低,飞书项目能让评审在群里自动触发,文档直接关联,极大地降低了协作摩擦。
它把复杂的 IPD 计划变成了直观的“全景泳道图”,不同部门(市场、研发、供应链)在同一张图上协作,依赖关系一目了然,非常适合解决跨部门“扯皮”。
如何与 IPD 流程契合
它可以完美复刻 IPD 的“阶段-关口”(Stage-Gate)模型。通过设置“关键节点”,如果不完成规定的评审要素(如文档、签字),流程就无法流转到下一阶段。
IPD 强调 PDT(产品开发团队)作战,飞书项目支持极细颗粒度的权限管控,能让市场看市场的视图,开发看开发的视图,但底层数据是互通的。
它自带强大的 BI 仪表盘,可以实时分析流程效率(比如:某个评审环节平均卡了多少天),这非常符合 IPD 中“持续改进”的理念。
缺点与挑战
适合企业/行业
企业类型: 1. 追求速度的创新型企业: 觉得传统 PLM 太慢、太难用,希望用互联网思维做硬件的公司。 2. 协作痛点极大的公司: 部门墙严重,急需通过工具拉通沟通的企业。Siemens Teamcenter
定位:全球制造业的“物理底座”与“数据派”
核心卖点
无论你有多少个工厂、多少个设计中心,Teamcenter 确保所有人看到的图纸、BOM 和工艺数据是唯一且准确的。
它是极少数能同时完美管理机械(MCAD)、电子(ECAD)和软件(ALM)数据的平台,是复杂系统工程的基石。如何支撑 IPD 流程
缺点与挑战
适合谁?
企业画像: 产品极其复杂,BOM 结构庞大,对数据准确性和安全性要求高于一切的超大型制造企业。
摘要:EAST 等监管报送指标口径文档的自动生成,核心挑战在于对复杂 SQL 中过滤条件(WHERE、JOIN ON等)的精准识别与逻辑解析。传统表级或列级血缘工具无法穿透此逻辑,导致人工梳理耗时数月、口径易失效。本文探讨了如何通过算子级血缘与行级裁剪技术,实现 EAST 口径的自动化盘点与一键溯源,将盘点效率提升 20 倍,并构建主动元数据驱动的数据治理闭环。 在金融监管日益严格的背景下,EAST、1104 等监管报送已成为银行数据团队的核心工作。然而,指标口径文档的梳理却是一个公认的“效率黑洞”。传统依赖人工逐行扒代码的方式,不仅耗时数月,且难以保证口径的准确性与实时性。本文将深入剖析这一难题的技术核心——SQL 过滤条件的精准解析,并介绍如何通过算子级血缘技术实现 EAST 口径文档的自动化生成与持续保鲜。 面对复杂的监管指标,银行数据团队普遍陷入“看不清、盘不动、保鲜难”的困境。监管指标的加工逻辑通常深藏在数百行、涉及多级嵌套和存储过程的 SQL 中。 这种传统人工模式的成本主要体现在三个维度: 自动化生成口径文档的构想之所以难以落地,根本在于传统血缘工具的解析粒度不足。它们无法理解 SQL 中最关键的“行级数据筛选逻辑”。 真正的难点不是回答“数据来自哪个表的哪个字段”,而是回答“这个指标具体是由哪一部分数据(符合什么条件)计算出来的”。这正是 WHERE、JOIN ON 等过滤条件的价值所在。 传统工具在此存在代际差距: 因此,要实现口径的自动化、准确化提取,必须突破列级血缘,深入到 SQL 执行的算子层面,即算子级血缘(Operator-level Lineage)。 以 Aloudata BIG 为代表的主动元数据平台,通过深入解析 SQL 的抽象语法树(AST),实现了算子级血缘,从而将黑盒化的数据加工链白盒化。其核心能力包括: 头部金融机构的实践已验证,基于算子级血缘的自动化口径管理能带来显著业务回报: 这些案例证明,自动化口径管理是实现 “指标溯源、血缘分析、线上化管理” 的核心技术基石。 建议金融机构采用“由点及面、价值驱动”的策略,构建主动元数据能力: 算子级血缘深入 SQL 执行计划,能精准解析 WHERE 过滤、JOIN 条件、聚合分组等具体操作逻辑;列级血缘只追踪字段映射关系,无法理解数据筛选逻辑。对于 EAST 报送,算子级血缘能自动回答“指标是基于哪部分数据(如‘贷款状态=正常’)计算的”,从而生成准确口径文档,而列级血缘只能给出字段列表,仍需大量人工解读。 可以。以 Aloudata BIG 为例,其核心技术优势之一就是覆盖复杂场景,特别对 DB2、Oracle、GaussDB 等的存储过程(PL/SQL)进行了深度适配,解析准确率超过 99%。无论是动态 SQL、临时表还是多层嵌套,都能实现穿透解析。 主动元数据平台的血缘关系通过主动解析代码、日志等方式实时或准实时更新。当上游代码变更时,平台能自动重新解析并通知责任人。基于此生成的口径文档是“活”的、与代码逻辑实时同步的视图,解决了传统文档“一发布即过时”的难题。 再次提醒:本文更详细的图表与案例细节,请访问 Aloudata 官方技术博客阅读原文:https://ai.noetl.cn/knowledge-base/east-document-generation-s...本文首发于 Aloudata 官方技术博客:《一表痛、EAST、1104 报表口径文档自动生成:解析 SQL 过滤条件,一键溯源与保鲜》转载请注明出处。
一、监管报送的困境:传统口径梳理的真实成本
二、技术破局关键:为何传统血缘工具无法解析 SQL 过滤条件?
解析类型 解析粒度 解析准确率 能否识别过滤条件 对复杂SQL(存储过程、嵌套)支持 表级血缘 表级依赖 高,但噪声巨大 完全不能 有限支持,链路断裂严重 列级血缘 字段映射关系 通常<80% 基本不能 支持差,解析率骤降 算子级血缘 算子级逻辑(Filter, Join, Agg 等) \>99% 精准识别 (行级裁剪) 深度支持 (DB2/Oracle 存储过程等) 三、核心解法:算子级血缘与行级裁剪技术

四、实践验证:银行如何将 EAST 盘点效率提升 20 倍?
五、实施路径:从试点到全行推广
六、常见问题 (FAQ)
Q1: 算子级血缘和列级血缘主要区别是什么?对 EAST 报送具体有何帮助?
Q2: 我们的 SQL 非常复杂,包含大量存储过程和嵌套查询,能准确解析吗?
Q3: 自动生成的口径文档,如何保证其持续“保鲜”,跟上代码的变更?
核心要点总结
在当今快节奏且竞争激烈的商业环境中,高效的项目管理对于按时、按预算、高质量地交付项目至关重要。项目管理工具在组织任务、跟踪进度和促进协作方面发挥着关键作用。在众多功能中,报告功能尤为重要,因为它能将原始项目数据转化为有意义的洞察,从而支持明智的决策。 在现代组织中,项目会产生大量与任务、时间表、成本、资源和绩效相关的数据。虽然标准报告可以提供有用的摘要,但每个组织和项目都有其独特的需求。项目管理工具中的可定制报告功能正是在此发挥了极其重要的作用。它允许用户根据自身特定目标设计报告,从而使项目数据更具相关性、可操作性和影响力。 Zoho Projects 支持自定义模块帮助您按照您的需求创建和导出报表。Zoho Projects在全局层和项目层有自定义报表。在该报表中, 用户可以设置报表的图表配置,可以确定报表中希望添加的条件和采取希望查看的数据。您可以添加新的报表,可以克隆或者编辑报表或者如果您希望分组报表可以在不同的文件夹中保存报表。Zoho Projects为任务,项目,里程碑,问题,工时表等所有的模块支持自定义报表。 Zoho Projects报表中用户还可以创建自定义视图和按照设置的视图,可以查看和导出报表。比如说,项目经理希望查看已经批准的所有的工时。他可以创建一个自定义视图,视图中添加一个条件,“审批状态是一批准“。 添加条件以后,可以选择在视图中希望显示的列并点击保存。创建该视图以后,如果项目经理在报表模块中选择创建的视图,他可以按照创建的视图查看报表。然后他还可以添加其他的条件和导出报表。这样的自定义报表选项让一个项目管理软件成更加灵活。
不同的利益相关者需要不同类型的信息。高管可能需要高层次的进度和预算摘要,项目经理可能需要详细的任务和风险报告,而团队成员则可能专注于各自的工作。可定制报告使每个利益相关者都能只查看对他们而言重要的数据,从而提高清晰度并减少信息过载。
可定制报告允许用户选择特定参数,例如日期范围、项目阶段、任务状态、优先级和团队成员。通过以有意义的方式筛选和组织数据,管理者可以识别趋势、及早发现问题并做出明智的决策。相关数据有助于更快、更准确地解决问题。
每个项目都有其独特的成功指标。借助可定制的报告,管理人员可以根据项目特定的关键绩效指标 (KPI) 跟踪进度。无论是成本偏差、进度绩效还是质量指标,都可以定制报告,以精确监控定义该项目成功的要素。
数十年来,访问数据库的标准方式始终是 ODBC 和 JDBC。然而,在这些传统的面向行的连接标准,可能会成为高性能 Snowflake 客户端应用程序的瓶颈。在 Snowflake 某些要求最为严苛客户的延迟敏感型应用中,包括关键业务运营和 AI 用例,ODBC 和 JDBC 的速度实在过于缓慢。这正是 Snowflake 选择拥抱开源生态 Apache Arrow 与新一代 ADBC 连接标准的核心动因。 虽然 Snowflake 长期使用 Apache Arrow 列式格式来加速网络传输,但采用 ADBC 能使 Snowflake 客户消除客户端序列化和反序列化的开销,从而为大型结果集带来巨大的性能提升。在实践中,我们观察到使用 ADBC 相比 ODBC/JDBC 可实现 2 倍至 5 倍甚至 10 倍或更高的加速效果。 在 Build 2025 大会上,Apache Arrow PMC 成员、Columnar 联合创始人、Iceberg 项目提交者 Matt Topol 带来了一场高度工程化、干货满满的技术分享。他展示了使用多种语言(C、Go、Python、R)向 Snowflake 发起简单查询,包括使用数据框架甚至 DuckDB 等其他系统作为源,执行高效数据摄取到 Snowflake 的过程。重点将是如何轻松将 ADBC 集成到对毫秒级响应要求苛刻的应用中,以及如何利用 Snowflake 对 Apache Arrow 和 ADBC 的支持,为最关键的性能用例加速应用程序的速度。 Topol 在分享一开始,并没有直接进入 ADBC,而是先用相当篇幅重新校准听众对 Apache Arrow 的理解。Arrow 并不是一个库或产品,而是一套列式、内存级的数据格式规范,其核心特征在于:内存中的数据布局,与网络传输时的字节布局完全一致。 这一设计带来的直接结果是,数据在系统之间流转时,可以绕过传统序列化与反序列化过程,直接传递原始字节。在同一进程内,甚至可以做到零拷贝或共享内存。这不是优化细节,而是从根本上改变了数据移动的成本结构。 更重要的是,Arrow 采用列式内存布局,使其天然适合向量化计算、聚合操作以及分析型工作负载。Topol 用“行式 vs 列式”的对比说明了一个事实:在分析场景下,行导向的内存访问意味着更多 I/O、更差的缓存命中率,以及无法充分利用 SIMD 等编译器优化;而列式内存恰恰相反,它与现代 CPU 架构是协同演进的。 在此基础上,Topol 将问题指向了当前最主流的数据库连接方式——ODBC 与 JDBC。 它们的价值毋庸置疑:API 稳定、生态成熟、适用于事务型与逐行计算场景,并且在过去几十年中几乎成为数据库访问的事实标准。 但问题在于,这套接口体系本质上是行导向的。 而现实是,Snowflake、DuckDB、ClickHouse、BigQuery 等主流分析型数据库,内部早已全面列式化。这意味着,每一次通过 ODBC / JDBC 拉取数据,系统都要经历一次高成本的转置:从列式内存转换为行,再在下游分析中重新转回列式结构。这不仅带来了显著的 CPU 与内存开销,也让数据在系统中反复“变形”。 Topol 特别强调,这里的转置并不是抽象意义上的重排,而是真实的数据拷贝与类型转换。在数据规模扩大后,这种成本会呈指数级放大。 ADBC(Arrow Database Connectivity)正是为解决这一结构性矛盾而设计的。 从抽象层面看,ADBC 与 ODBC / JDBC 非常相似:应用程序面对的是统一 API,通过不同驱动与不同数据库交互。但关键差异在于,ADBC 是列导向的,其数据交换格式直接采用 Apache Arrow。 当数据库本身已经以列式形式返回结果,且能够直接输出 Arrow 数据时,驱动几乎无需做任何转换,便可将结果原样交付给应用侧——零拷贝、无转置。这不仅显著提升了性能,也让数据在更早阶段就处于可分析、可计算的理想形态。 即便在数据库本身并非列式、或并未原生支持 Arrow 的情况下,ADBC 也允许在驱动层完成一次性转换,从而让应用侧始终面对统一的数据模型,而不必管理多套复杂连接器体系。 这场分享的核心说服力,来自大量现场演示。 在 Python 示例中,Topol 对比了通过 ODBC 与 ADBC 从 Snowflake 拉取数据的耗时。即便在启用缓存、排除查询执行成本的情况下,ADBC 在 10 万行与 100 万行数据规模下,仍然表现出明显优势:数据量越大,性能差距越明显。 更关键的是,ADBC 返回的数据可以直接被 Polars 等基于 Arrow 的 DataFrame 库消费,几乎没有额外转换成本。这意味着,性能提升并不仅体现在拉数据更快,而是贯穿整个分析链路。 同样的结论,在 Go 和 R 的演示中得到了重复验证。跨语言的一致性,反过来也印证了 Arrow 与 ADBC 设计上的语言无关性——它们优化的是数据形态本身,而非某一语言生态的实现细节。 在分享的后半段,Topol 将视角从查询结果返回扩展到更复杂的数据流动场景。 他展示了如何通过 ADBC,将 Snowflake 中的一百万行数据,以流式方式直接摄取到内存中的 DuckDB。整个过程无需先完整加载结果集,数据以 Arrow Record Batch 的形式持续流动,类型信息在传输过程中被完整保留,整体耗时不到四秒。 这一演示揭示了 ADBC 的另一层意义:它不仅是一种更快的查询接口,也是一种系统间高效、可组合的数据通道。当数据能够以统一、零拷贝的列式格式在系统间流动时,ETL、数据同步乃至多引擎协同分析的复杂度,都有机会被重新定义。 Topol 并没有在结尾试图宣告 ODBC / JDBC 的终结。相反,他反复强调,这些技术在事务型与行式计算场景中仍然合理且必要。但对于分析型系统而言,ADBC 所代表的,是一种更贴合现代数据架构的方向:让数据尽可能早地进入列式、分析友好的形态,并尽可能少地在系统间反复转换。 原视频地址:https://www.snowflake.com/en/build/americas/agenda/?login=ML 🔥【活动推荐】2 月 2 日-6 日,Snowflake Discover重磅上线!这是一场免费、线上、可实时互动的技术活动,旨在帮助您全面提升数据与 AI 能力,深入了解如何更高效地管理、整合与分析数据。4 天时间 18 场技术干货分享,由来自亚太地区的一线技术专家亲自分享与讲解~ 点击报名 Discover,更多 Snowflake 精彩活动请关注专区。
从内存布局谈起:为什么 Apache Arrow 是关键前提

ODBC / JDBC 的结构性矛盾
ADBC:把统一 API 的理念带入列式世界
用数据说话:跨语言的性能对比与真实收益
不止查询:流式摄取与系统间数据流动的新可能

突然想到一个问题,oracle 的 java 团队等其他语言团队,后续更新会使用 ai 去创新或优化吗?
以后的编程开发会不会有很深的设计?设计模式是否还会增加?
设计全新的语言(比如 10 分钟从 0 搭建一个系统)
还有一些远古代码是否优化的更好,像 oracle 、windos 等,还是保持稳定更好?
好像涉及编程的东西,都可能大变化
作者 | 三线程序员 [toc] 集团内部关于数据平台近期遇到了两次异构数据源的问题,洽好利用了开源工具简单应对,验证了自己目前工作的思路,正好总结一下分享过程中的收获也经验。以下只谈技术方案选择与经验分享,不讨论数据量、性能、安全等其它内容。 a) 数据中转归集:现有数据平台需要将部分数据数据上报给行业平台,同时还要将另一条第三方物联数据做数据归集中转后再进行上报行业平台。。 根据二三线城市实际公司和技术水平情况、调研了数据采集/集成项目后,暂定 Apache SeaTunnel 的核心原因: 笔者在整个过程中趟了不少坑,经验在四五六节中进行了总结,因此成文,给社区回流经验,也作为内部复盘的内容。 有经验的朋友可直接跳过,本节主要介绍个人遇到的一些安装注意事项。 步骤:下载、解压、安装连接器、测试。(本人暂时只试用了自带的 Zeta 引擎,其它引擎和集群未使用,目前满足离线 ETL 常规需求) 需要重点介绍一下安装连接器,如果网络不好或者maven懒得改代理、着急快速部署、验证新版本什么的,可以直接修改apache-seatunnel-2.3.8\config目录下的plugin_config文件,只保留需要的连接器; 如我只连常用数据库就保留 配置好了直接运行脚本就可以了,进目录 这里有个神奇的情况,在Windows环境下有时候连接器历史下载过可能重新部署后没再次下载,仍然可以运行。但在某一个特定的时间点就又开始报错说缺少jdbc连接器。神奇的系统。 一个是连接器: 既使用什么方式进行数据连接,常见的http、文件、数据库jdbc。(一般运行时报什么jdbc错误,八成是没下载jdbc连接器。install-plugin没?) 一个是驱动包: 特定数据源的连接驱动、常见的mysql、pg等。(一般运行时连接失败,九成是没放对应的数据库驱动。)驱动包要自己<u>手动扔啊,手动,手动</u>。 运行时需要注意的就是windows命令行乱码,字符集换行符什么的这些问题,最一统的解决方案就是别直接windows的传linux上去混用,大不了重写或贴过去。cmd运行时控制台中文信息乱码解决是 chcp 65001 。 ⚠️ 再次提醒,无论运行什么类型的etl,涉及的连接器和驱动包要保证都有,报错时第一时间核对这个,不要死盯着报错重试了。特别是在Windows环境下,Linux大法还是好。 作业文件习惯单独建一个job目录存放。(与DolphinScheduler集成有时间再写吧,欠的东西太多了。) 常用conf样例,可直接cv修改,注意Doris作为sink写入时使用的是streamload方式,要用对应的http端口,不是Navicat连接的端口(大年纪程序员经常忘): <u>mysql 2doris样例</u> <u>mysql 2doris 多表样例</u>(有复杂业务需要json一条数据变拆分成多行的可参考 https://github.com/apache/seatunnel/issues/7961 使用SELECT * FROM fake LATERAL VIEW OUTER EXPLODE(cpe_nodes) as cpe_nodes函数) 自动建表模板doris版本 <u>http接口2 Doris 样例</u>(http的主要参考了git的文章 https://github.com/apache/seatunnel/issues/8431) 首先需要确保SeaTunnel能正常运行,需要在Linux服务器库或Windows命令行上进行验证,基础的SeaTunnel本地的Zeta引擎可以正常工作运行。 如用 Windows,可能会出现SeaTunnel今天能运行,明天不能运行的特殊情况(报错内容是“找不到或无法加载主类”);我没有彻底解决,但在网上找的方案大部分都是java环境变量设置的情况,还有就是关掉命令窗口重新打开。但偶尔有机会确实再次出现,隔天就没事了。神奇的系统! 手写query正常,动态却不行, 需要追加转换功能,字段大小写也需要转换。 表转换需要使用Transform,并且追加源表别名与目标表表别名,方便操作。 字段转换 低版本不支持达梦建表(2.3.8就没有达梦的ddl创建表的方法,达梦数据库sink写入时ddl自动建表方法是在2.10后才追加的),最终升级到2.3.10并下载对应的connector连接包还是不行。 版本升级最新与更新最新的连接包(中间下载时间太长,使用了从maven上直接手动下载的包,最后对了一下大小都一样。没有问题。。。)又升级到了2.3.12版本也是无法自动建表。 Dialect方言显示指定也不行(包括相应的lib包也都加上了。。。还是不行,甚至怀疑过达梦的驱动包有问题,是否需要找商厂要个驱动才能用)。 最终验证与字段注释有关,表注释直接就扔了根本不建。只要表中有字段就报commont 语法解析问题。 在测试环境没有问题,在生产环境Doris版本升级了竟然报读取错误了。。。(测试环境是Doris 2.1.3,生产是2.1.9版本,估计是哪有差异。) 参考MySQL导入达梦,使用Linux的脚本处理dump的SQL脚本 。 把字段和表注释去除,使用AI处理了一上午,只能把表字段注释去掉。但是无法把字段注释和表注释单独弄到一个脚本中,只能生成一个所谓的纯净建表语句。 但突然发现导出的数据类型肯定在达梦中无法执行,需要转换。对应到各种不同的类型,这个对应再用手工做一遍,考虑放弃此方案。 通过schema_info直接用sql拼出一堆清注释的语句。 还有个小波折,差点这个方案也不能用了。就是Doris的默认值,开始转换时使用的SQL ALTER TABLE 利用现有的备份库,或者直接重新做个临时备份;思路就是通过备份库去把表建上,再切到正式库去做真实的数据同步。 a. 选择表范围。(只取Xyz的底层数据表,用于分业务去做同步SeaTunnel拼哪些表做同步) b. 选择去除字段注释的内容。 c. 复制出清除字段脚本,在备份库上直接执行。 ctrl+A 、 ctrl +R 全选运行。 新建 复制备份库的配置文件,修改数据库ip地址端口密码等信息,就可直接运行了。 追加表注释。 在达梦数据库上执行!把自动建表的表注释补出来。 有条件追加字段注释(当时任务急,未来可期你懂的)。 个别语句有问题的需要调整修改一下,记得重新把先表删除了,再改配置文件中的内容。 Windows、Linux直接脚本定时,或者集成ds进行配置可视化任务。 Windows下的bat脚本 通过学习达梦数据库,笔者发现它本身就是Oracle的魔改版本,有点像把PG和Oracle捏在了一起,加了个PG的Schema,语法全是Oracle的。笔者主要利用了SeaTunnel的自动建表功能,特别是字段类型映射转换节省了大量时间,但研究的时间也不短。 同时,笔者也发现了一些问题,比如表注释会丢弃,这些还好,反正就是一次性的事手动补一下,直接用sql生成一下脚本即可。 在报错调试方面,似乎由于线程的问题,会把同线程的其它表的无错的内容报成异常打印出来。 还有就是关于表结构的问题,要注意调试过程中手动删除表,因为默认使用的参数是 后续平台又需要与第三方物联系统做数据对接,就直接利用了Doris stream load技术来实现,分享一下经验:最终需要将http接口外网暴露的地址是Doris的be端口,而非fe端口。 中间还验证了一个拉的方式,就是利用SeaTunnel的http连接器,去拉数据。这里有个小问题,就是需要做鉴权,有时间会再做个分享。(方法很low但验证可行。) 信创就是我人生的至暗时刻,刚经历了达梦又得弄Kingbase,但最终对自己个人成长还是有助力的,不说信创数据库怎么兼容的各种问题吧,在时下这个环境换个角度看,这可能就是一种“技术壁垒”。也没时间写内部技术文档了,直接从头回忆吧。 先说开放性kingbase至少比达梦强,官网给下载安装程序包,包括安装版和docker版本,还可以免费申请测试的授权证书,开发授权最多有1年的试用期。这一点就敞亮、局气。首先和身边的前同事(现在还是好朋友)打听了一下,他们之前试用过,大概就是Kingbase是个套壳,底层是pg,改了改几个函数,论开放性有个叫瀚高的更开放,基本没有魔改的,本着原生的一致进行了二开。 然后运维大哥三下五除二就把docker拉起来,高高兴兴选择了下MySQL模式,结果MySQL的驱动不能直接连,必须要用Kingbase的原生,中间省略各种问题,最终又装了一个pg模式的。 概念就一个:Kingbase有多种兼容模式,mysql/pg/sqlserver什么的。。。理论上不考虑这个兼容模式用Kingbase原生的驱动肯定都能连接。如果知道具体的兼容模式,可以尝试用兼容的驱动连接。如pg模式直接用pg驱动就可以连接,但MySQL模式Navicat就不能用MySQL的驱动连接。 KSQL是Kingbase自己的连接工具,有必要也安装一个,它的驱动就是用的Kingbase原生的驱动。 听劝MySQL兼容模式不好用,咱就用底层原生的最稳定了,当年kmx直接用的Cassandra读的妥妥的好。那就准备用Kingbase的pg兼容模式做为源和目标了。 在SeanTunnel官方文档上查了一下,支持Kingbase,但是,但是,但是,只有部分类型兼容!又在技术群里圈了一下panda大佬交流了Kingbase的读写情况,收获良多,再次感谢!!!感谢!!!感谢!!! jdbc:kingbase8的不归路就开始了....(这里source和sink的库都是Kingbase的pg模式) 一切顺利,不到“10”分钟就搞定了;当时测试的小遗憾是不能schema_save_mode自动建表。在交流群里吐槽了一下,也感谢迅哥儿和西门分享经验和想法!! 后来panda大佬要给Kingbase立flag说可以支持,我是测试了不行;panda佬说Kingbase是继承pg的代码都支持,还提醒嘱咐source不能用query,无法自动建表,要用 重点是:“用pg连接器是可以地,如果你Kingbase本身是pg兼容模式 那可以用pg的,只要元数据检查能通过。那就换成pg驱动和配置试试”,结论就是“把kingbase的pg模式就当成jdbc的pg用”,而且可以自动建表等参数都能用了。“pg支持啥它支持啥”。 满心欢喜的下班,一切都太顺利了。。。 业务也要做信创准备,那帮子老古董就咬死了我这祖传代码就是MySQL,信创我也是用金仓的MySQL兼容模式!!!!!我还提前分享了验证结论,告诉他们推荐用pg模式,可是人家业务就是这么横,让我们换pg,我这完全不接受,我找领导去!!!!!可想而知的结果,弄不了就是你们技术不行。我这血压一下子就上去了,@#¥%……&%……&……&(&¥%&……(()¥%&……()¥#¥% 这Kingbase的兼容MySQL模式肯定是类型有问题啊,这可怎么办?赶紧找其它办法吧。网上找了有什么Datamover,DataX( 老家伙),还有一直关注没用过的Tis赶紧弄过来试吧,时间紧任务重,Tis有docker版本,赶紧拉起来。试了一下还真行,点点点就弄好一张表!!!表也建上了数据也导过去了,挺好。 顺利吗....没过一会,说表的字段都是大写的,Kingbase默认是区分大小写的和pg一样。但是可以通过数据库初始化时指定,Docker下面指定那个参数是起不来的,运维大哥说只能填pg,填不了其它的。又是个两头堵死的情况,像不像达梦?。。。 简单看了看Tis底层用的DataX,建表语句可以自己修改字段名变小写,但是DataX的脚本不让改,直接拷出来在DataX上执行有问题,看不懂的错误。没时间了研究了。。。 晕晕忽忽一下午,压力大吃碳水多,感觉到压力与生活的影响了,就要自己调节。工作只是工作,还有生活。重新调整饮食,早上有时间还把家里的毛巾洗了洗,心情拉满去上班。 来吧,再试一把老朋友SeaTunnel!还是老三样,connector重下,驱动重放,执行文件编码问题。一关一关过呗,MySQL兼容类型有问题,我先跳过那个字段直接写死几个列,先跑一把给给自己信心。 注意环境有改变:192.168.0.31:4321 的Kingbase是MySQL兼容模式,192.168.0.119:4322是Kingbase的pg兼容模式。 所以source要用Kingbase的原生去读,字段转小写的问题,通过SQL先尝试解决,大力出奇迹,这些个牛马的事扔给AI弄;sink保留原来的pg也没事。 经过9*9=81次调试,一把过了。高高兴兴找运维大哥说成了成了,运维大哥问了一句“int型的怎么解决的”?我#$%&&,我绕过去了。。。。晕了忘了个干净。 信心有了,可现实就是这么冰冷,int类型转换失败....AI说指定source的表结构类型,不管用....sql转换类型也没试成功.....不行,服软,花点钱买Kingbase的产品吧。最多也就这样了。 Panda佬的那句"用pg连接器是可以地",我又再次仔细理解了一下。是不是有什么没理解到?我用pg驱动读个Kingbase的MySQL兼容模式,再赌一把? 最后结局了肯定是过了,再tm不过这文章就没必要写这块了。后来拿Navicat直接连了一下Kingbase的MySQL兼容模式,也能连上。#¥%,原来是自己绕远了。 赶紧分享给群里的小伙伴,又和panda佬谈了体会,“那挺好啊”,原来世界真的很大,我们只在自己的井里。有些事只是自己没见过,但并不代表这个世界上没有。 2026.1.21 三线程序员
Tags | MySQL Doris PG 达梦 金仓
关键词 | SeaTunnel、DolphinScheduler、信创、国产、达梦、人大金仓一、为什么要写这篇
b) 国产化信创可控切换:明年技术平台指标项信创切换的前期验证工作,需要验证业务系统与数据平台一体信创国产化信创切换风险验证,将现有 MySQL → 达梦 / 人大金仓 之间做迁移。二、整体需求
三、前置条件
内容项 要求说明 目标库 达梦数据库,人大金仓数据库 V8.6以上,账号具备 SELECT, SHOW VIEW等 权限相关数据库jdbc驱动依赖jar包 connectors目录:connector-jdbc-2.3.12.jar lib目录:达梦DmJdbcDriver8.jar、金仓kingbase8-8.6.0.jar、mysql-connector-j-8.3.0.jar、postgresql-42.7.3.jar 四、安装测试运行
1. 安装一个字,简单快捷。
connector-jdbc,只连DDoris数据仓库就保留connector-doris其它的删除掉或注释掉。具体所需对照可以查看\apache-seatunnel-2.3.8\connectors目录下的plugin-mapping.properties文件,里面有详细的source和sink所需要对应的连接器。cd apache-seatunnel-2.3.8/安装命令sh bin/install-plugin.sh 2.3.8,不指定版本号注安装当前版本的;安装完毕,你的connector目录就会多出许多连接器jar包。老手熟的话可以不安装(panda哥就没用过),直接从原有安装机器或本地把下载好的连接器,手动传上去也可以正常运行。2. 这里有两个概念需要理解一下
3.测试demo
# 切换工作目录至Apache SeaTunnel 2.3.8的安装目录
cd /opt/apache-seatunnel-2.3.8/
# 执行SeaTunnel批处理任务
# 参数说明:
# --config:指定任务配置文件路径,此处为默认的批处理配置模板
# -m local:指定运行模式为本地模式(无需集群环境)
./bin/seatunnel.sh --config ./config/v2.batch.config.template -m local4. 小分享
env {
parallelism = 2
job.mode = "BATCH"
}
source {
Jdbc {
url = "jdbc:mysql://192.168.0.31:3306/cons"
driver = "com.mysql.cj.jdbc.Driver"
connection_check_timeout_sec = 100
user = "root"
password = "123456"
table_path = "cons.community_info"
query = "select * from cons.community_info"
}
}
sink {
Doris {
fenodes = "192.168.0.110:8030"
username = "root"
password = "123456"
database = "data_test"
table = "ods_xyz_communityinfo_base"0
sink.enable - 2pc = "true"
sink.label - prefix = "test123"
doris.config = {
format = "json"
read_json_by_line = "true"
}
}
}env {
job.mode = "BATCH"
parallelism = 4
}
source {
Jdbc {
url = "jdbc:mysql://192.168.0.31:3306/cons"
driver = "com.mysql.cj.jdbc.Driver"
connection_check_timeout_sec = 100
user = "root"
password = "qianhe999"
"table_list"=[
{
"table_path"="cons.gas_alarm_events"
},
{
"table_path"="cons.gas_check_dispatch"
}
]
}
sink {
Doris {
fenodes = "192.168.0.110:8030"
username = "root"
password = "123456"
database = "data_test"
sink.enable - 2pc = "true"
sink.label - prefix = "test123"
table = "ods_xyz_${table_name}_base"
doris.config = {
format = "json"
read_json_by_line = "true"
}
}
}save_mode_create_template = """CREATE TABLE IF NOT EXISTS ${database}.${table_name} (
${rowtype_primary_key},
${rowtype_fields},
decoded_project_description STRING
)
ENGINE=OLAP
UNIQUE KEY (${rowtype_primary_key})
COMMENT '${comment}'
DISTRIBUTED BY HASH (${rowtype_primary_key})
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"in_memory" = "false",
"storage_format" = "V2",
"disable_auto_compaction" = "false"
)"""env {
execution.parallelism = 2
job.mode = "BATCH"
checkpoint.interval = 10000
}
source {
Http {
url = "http://192.168.0.1120:31907/biz-data-service/241211/ABC_o1_XYZ"
method = "POST"
format = "json"
headers = {Accept="application/json",Content-Type="application/json;charset=utf-8"}
body= "{\"params\":{\"branch\":\"长安区\"},\"size\":10,\"current\":1}"
content_field = "$.data.records.*"
schema = {
fields {
mc=string
dz=string
last_update=timestamp
jd="decimal(20, 5)"
id :int
mplx=string
wd=string
}
}
}
}
sink {
Doris {
fenodes = "192.168.0.110:8030"
username = "root"
password = "123456"
database = "data_test"
table = "ods_xyz_http_base"
save_mode_create_template = """CREATE TABLE IF NOT EXISTS ${database}.${table_name} (
cid bigint NOT NULL AUTO_INCREMENT(1) COMMENT '主键',
${rowtype_fields}
) ENGINE=OLAP
UNIQUE KEY (cid)
DISTRIBUTED BY HASH (cid) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"in_memory" = "false",
"storage_format" = "V2",
"disable_auto_compaction" = "false"
)"""
data_save_mode = "DROP_DATA" # 默认是追加,这里测试了一下清表。既每次只保留最新一次。
sink.enable - 2pc = "true"
sink.label - prefix = "test123"
doris.config = {
format = "json"
read_json_by_line = "true"
}
}
}五、读Doris写达梦数据库操作步骤
1. 正常情况
-- 官方模板一次通
env {
parallelism = 1
job.mode = "BATCH"
}
source {
Jdbc {
url = "jdbc:dm://e2e_dmdb:5236"
driver = "dm.jdbc.driver.DmDriver"
connection_check_timeout_sec = 1000
user = "SYSDBA"
password = "SYSDBA"
query = """select * from "SYSDBA".e2e_table_source"""
}
}
sink {
Jdbc {
url = "jdbc:dm://e2e_dmdb:5236"
driver = "dm.jdbc.driver.DmDriver"
connection_check_timeout_sec = 1000
user = "SYSDBA"
password = "SYSDBA"
query = """
INSERT INTO SYSDBA.e2e_table_sink (DM_BIT, DM_INT, DM_INTEGER, DM_PLS_INTEGER, DM_TINYINT, DM_BYTE, DM_SMALLINT, DM_BIGINT, DM_NUMERIC, DM_NUMBER,
DM_DECIMAL, DM_DEC, DM_REAL, DM_FLOAT, DM_DOUBLE_PRECISION, DM_DOUBLE, DM_CHAR, DM_CHARACTER, DM_VARCHAR, DM_VARCHAR2, DM_TEXT, DM_LONG,
DM_LONGVARCHAR, DM_CLOB, DM_TIMESTAMP, DM_DATETIME, DM_DATE, DM_BLOB, DM_BINARY, DM_VARBINARY, DM_LONGVARBINARY, DM_IMAGE, DM_BFILE)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
}
}2.我跳的坑(读Doris写达梦,流水帐形式就当小说看)
2.1.SeaTunnel使用中遇到的问题
(1) 表或视图不存在
generate_sink_sql =true不行。最终需要追加上数据库名称,而且源表是Doris表都是小写,而目标表是达梦表库表字段都是大写,所以会报表不存在。(2) 源与目标表名大小写方式不一致
transform {
TableRename {
plugin_input = "source_doris"
plugin_output = "desc_dameng"
convert_case = "UPPER"
}
}sink {
Jdbc {
plugin_input = "desc_dameng"
url = "jdbc:dm://dmhost:2070?schema=X_Y_Z_KFC"
driver = "dm.jdbc.driver.DmDriver"
user = "X_Y_Z_USE"
password = "123456"
database = "DAMENGKFC"
table = "X_Y_Z_KFC.${table_name}"
generate_sink_sql = true
field_ide="UPPERCASE"
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="DROP_DATA"
dialect ="Dameng" --好像没啥实际意义(说是会根据jdbc连接串推算)
}
}(3) 无法创建表
2.2. 两头走不通的折中方案
(1) 使用达梦迁移工具
(2) 手动建表
(3) 灵感闪现-直接删除表的注释
dwd_X_Y_base MODIFY COLUMN filedA1 varchar(255) COMMENT "";指定了字段类型,当有字段last_update有默认值时不允许修改。后来仔细查了查官网文档,Doris还是做了人的,有专门单独去注释的语句,不加字段类型就行了。2.3 最终可行方案-半手工方案
(1) 在备份库上把所有注释去了
SELECT * FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'data_test_backup'
AND ( TABLE_NAME like 'ods_xyz_%' or TABLE_NAME like 'dwd_xyz%') ;SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.',TABLE_NAME, ' MODIFY COLUMN ', COLUMN_NAME, ' ', ' COMMENT "";') AS alter_sql
FROM
information_schema.columns
WHERE
TABLE_SCHEMA = 'data_test_backup'
AND (table_name LIKE 'ods_xyz_%' OR TABLE_NAME LIKE 'dwd_xyz%')
AND LENGTH(COLUMN_COMMENT) > 0;alter table ods_xyz_1001_base modify column filed1 comment "";
alter table ods_xyz_1001_base modify column filed2 comment "";
.....(2) 使用备份库把数据第一次自动建表导进去。
xyz_low1.conf读取备份库建表初始化到达梦,未把多表改成正则去匹配,是方便调试找错。直接把表名扔给AI生成table_path数组,也方便以后做真增量时,直接在sql中追加限制条件。env {
parallelism = 2
job.mode = "BATCH"
}
source {
Jdbc {
plugin_output = "source_doris"
url = "jdbc:mysql://backuphost:9030/data_test_backup"
driver = "com.mysql.cj.jdbc.Driver"
connection_check_timeout_sec = 100
user = "XXX"
password = "******"
table_list = [
{
table_path = "data_test_backup.dwd_xyz_1001_base"
query = "select * from data_test_backup.dwd_xyz_1001_base"
},
{
table_path = "data_test_backup.dwd_xyz_1002_base"
query = "select * from data_test_backup.dwd_xyz_1002_base"
},
.....
]
}
}
transform {
TableRename {
plugin_input = "source_doris"
plugin_output = "desc_dameng"
convert_case = "UPPER"
}
}
sink {
Jdbc {
plugin_input = "desc_dameng"
url = "jdbc:dm://101.2.3.4:2026?schema=X_Y_Z_KFC"
driver = "dm.jdbc.driver.DmDriver"
user = "X_Y_Z_USE"
password = "123456"
database = "DAMENGKFC"
table = "X_Y_Z_KFC.${table_name}"
generate_sink_sql = true
field_ide="UPPERCASE"
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="DROP_DATA"
dialect ="Dameng"
}
}(3) 切回同步从库直接读取最新数据
(4) 同时拼出来在达梦里需要追加的语句
SELECT CONCAT('COMMENT ON TABLE ', upper(TABLE_NAME), ' IS ''', TABLE_COMMENT, ''';')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'data_test'
AND (table_name LIKE 'ods_xyz_%' OR TABLE_NAME LIKE 'dwd_xyz_%')(5) 加工层导入时的遇到的新问题(ads层字段创建不规范导致)
{
table_path = "data_test_backup.ads_xyz_1001_agg"
query = "select label_type,`sum(total)` as 'totalnum',sord_num from data_test_backup.ads_xyz_1001_agg"
},2.4 配个定时就OK
@echo off
rem 先切到 SeaTunnel 的 bin 目录
cd /d "E:\apache-seatunnel-2.3.12-bin\apache-seatunnel-2.3.12\bin"
rem 执行作业
seatunnel.cmd --config ./job/xyz_low.conf -m local3. 写达梦数据库的总结
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST",如果表已经存在不会再创建表,容易造成建的表有问题,而发生奇怪的异常报错。4. 另一时间线
六、读写人大金仓数据库操作步骤(信创)
1. 坑Kingbase初理解
2. 预期设想
env {
parallelism = 2
job.mode = "BATCH"
}
source {
Jdbc {
driver = "com.kingbase8.Driver"
url = "jdbc:kingbase8://192.168.0.31:4322/sourcedb"
user = "kingbase"
password = "123456"
query = "select * from source_user_detail"
}
}
sink {
jdbc {
url = "jdbc:kingbase8://192.168.0.119:4322/targerdb"
driver = "com.kingbase8.Driver"
user = "kingbase"
password = "123456"
generate_sink_sql = true
database = targerdb
table = public.target_user_detail
#schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="APPEND_DATA"
}
}tabl_path是个坑,让我记到文章里提醒大家,“造福更多使用者”。最终panda佬可能查了查源码确认了打脸,“Kingbase在建表那块没适配”,但这不是重点。source {
Jdbc {
driver = "org.postgresql.Driver"
url = "jdbc:postgresql://192.168.0.31:4322/sourcedb"
user = "kingbase"
password = "123456"
table_path = "sourcedb.public.source_user_detail"
}
}
sink {
jdbc {
url = "jdbc:postgresql://192.168.0.119:4322/targerdb"
driver = "org.postgresql.Driver"
user = "kingbase"
password = "123456"
generate_sink_sql = true
database = targerdb
table = public.target_user_detail
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="APPEND_DATA"
}
}3. 突变大转折
4. 背叛
5. 赌一把
env {
parallelism = 2
job.mode = "BATCH"
}
source {
Jdbc {
driver = "com.kingbase8.Driver"
url = "jdbc:kingbase8://192.168.0.31:4321/kingbase"
user = "kingbase"
password = "123456"
query = "SELECT `ID` AS id,`PARENT_ID` AS parent_id,`DICT_LABEL` AS dict_label,`DICT_VALUE` AS dict_value,...REMARK` AS remark FROM public.dict;"
}
}
sink {
jdbc {
url = "jdbc:postgresql://192.168.0.119:4322/datatest"
driver = "org.postgresql.Driver"
user = "kingbase"
password = "123456"
generate_sink_sql = true
database = datatest
table = data_test.dim_busi_dict_001
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="APPEND_DATA"
}
}env {
parallelism = 2
job.mode = "BATCH"
}
source {
Jdbc {
driver = "org.postgresql.Driver"
url = "jdbc:postgresql://192.168.0.62:4321/kingbase"
user = "kingbase"
password = "123456"
query = "SELECT * FROM public.dict;"
}
}
sink {
jdbc {
url = "jdbc:postgresql://192.168.0.119:4322/datatest"
driver = "org.postgresql.Driver"
user = "kingbase"
password = "123456"
generate_sink_sql = true
database = datatest
table = data_test.dim_busi_dict_001
field_ide="LOWERCASE"
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="APPEND_DATA"
}
}
需求变更不可避免,真正拖垮交付的是“变更失控”。IPD 需求管理的核心,是把需求从“口头共识”升级为“受控资产”:用需求分层与追溯建立共同语言,用需求基线固化交付承诺,再用 CCB 把变更变成可决策的投资选择。本文给出一套可落地的全流程、角色机制与指标闭环,帮助组织稳节奏、降返工、提质量。 很多团队以为项目失控是“需求太多”。我更常见到的现实是:需求并不一定多,但“承诺”太轻——轻到可以被一句“这个很急”随时改写。 在研发现场,需求失控往往呈现为三个连锁反应(也是多数团队在搜索“需求变更怎么管”时真正想解决的问题): 这三件事叠加时,IPD 强调的“跨职能并行”会从优势变成放大器:市场、产品、研发、测试、供应链同时在动,但缺少共同的“受控参照物”,于是每个环节都在用自己的版本理解需求。 从产品研发的经验看,越晚发现需求错误,返工常常越贵。 NASA 的研究给出过一个非常直观的量化视角:把“在需求阶段发现并修正一个需求错误”的成本定义为 1,若到设计阶段再发现,成本上升到 3–8;到制造/构建阶段 7–16;到集成测试 21–78;到运维阶段甚至可能达到 29 到 1500+。这类数据对硬软结合、集成验证成本高的行业尤其有解释力:系统越复杂,后期返工越容易引发链式成本。 但作为管理者,我们也要保持理性:并非所有软件项目都能稳定观测到“延迟一定更贵”的效应。成熟的做法不是迷信曲线,而是把重点放在:缩短反馈回路 + 建立变更治理机制上。 要把“需求变更”管得既稳又快,底层一定要借用系统工程成熟的方法:配置管理(Configuration Management, CM)。 NASA 对“基线”的定义是在某一时点对配置项属性的“达成一致的描述”,并提供一个已知配置来处理后续变更;当前批准的基线会成为后续变更的依据。翻译成研发语言就是一句话: 只要你对交付结果负责,需求就必须从“讨论对象”变成“受控资产”。 我建议用“四件套”搭起 IPD 需求管理的骨架,并给出每件套的“最小可用标准(MVS)”,避免一上来就走向重流程。 需求不分层,CCB 就会陷入“你说的需求不是我理解的需求”。至少要有三层共同语言: 在实践里,建议把“需求分层 + 统一ID + 状态定义”直接固化到系统中——例如在 ONES Project 里建立需求池、编写需求并自定义需求状态与属性,再把需求与任务规划进迭代,减少口头协商带来的歧义。 典型失败模式(反例):只冻结“要做什么”,但不冻结“验收怎么算完成”,你会得到一个现象:研发认为交付了,测试认为没通过,业务认为没达到预期——每个人都没错,但项目照样延期。 追溯不是为了“好看”,是为了让你在 CCB 上用证据说话:这条变更会影响哪些设计、接口、测试与交付承诺? 做追溯建议从“最短闭环”开始:需求ID → 设计/接口项 → 测试用例 → 验收结果。这条链跑通,影响分析就有了骨架;以后再逐步扩展到风险、合规、供应链与文档基线。 现场判断标准: 如果一条变更在 10 分钟内讲不清影响范围,不是“CCB没效率”,而是“追溯链不足以支撑决策”。 追溯链最容易“断”在测试与交付环节。像 ONES TestCase 支持测试用例与需求、任务关联、测试计划与迭代关联,能把“需求—任务—测试—缺陷”这条链更稳地串起来。 很多组织把基线做成“需求列表冻结”,但真正该冻结的是交付承诺:范围、验收口径、关键约束、里程碑假设。因为基线本质是“对某一时点状态的达成一致描述”,并作为后续变更的处理依据。 你可以把“需求基线包(Baseline Package)”理解成: 一次版本对业务、对组织、对客户的正式承诺。 基线包不是只存在于PPT。在版本/迭代层面把承诺落到系统里,后续才好做偏差对比。比如 ONES Project 在实践案例里强调了产品版本与迭代规划;并且在甘特图场景下提供“基线对比”的思路,用来直观看当前与计划偏差。 成熟组织不会纠缠“要不要做变更”,而是讨论三个更硬的问题: 下面给出一套端到端流程。建议 PMO 或系统工程牵头固化为 SOP,并在两到三个版本内跑出稳定节奏。 目标:统一入口、统一信息质量,把“讨论成本”前移。 建议设“入库门槛”(最少字段): 常见误区:入口不清晰时,变更会伪装成“补充说明”“临时插单”,绕开治理机制。最后你会发现:CCB不是“变更太多开不过来”,而是“该进CCB的变更从来没进来”。 目标:让影响分析可计算、可复核、可追责。 落地要点: 补一句经验:追溯不是一次性工作,它是“把承诺变成资产”的成本。你付出维护成本,换来的是后期影响分析的确定性与决策效率。另外,追溯链维护最怕“各写各的”。像 ONES TestCase 明确支持用例与需求、任务关联,并把测试计划与迭代关联,能把追溯从“Excel表”推进到“过程资产”。 目标:明确“我们承诺交付什么”,并建立后续变更的参照物。 基线包建议包含(这份清单本身就是很强的检索与引用片段): NASA 强调:基线提供一个已知配置来处理后续变更,当前批准的基线是后续变更的依据。管理动作落地:从这一刻起,任何改动都必须留下“为什么改、谁批准、改了什么、影响如何、如何验证”。 基线包建议同时“文档化 + 结构化”。文档化用于解释口径与边界,结构化用于后续对比与追踪。比如 ONES Project 与 ONES Wiki 支持“文档关联任务/工作项”,适合把基线包的关键结论与对应需求、迭代绑定起来,减少“决策在群里、执行在系统里、复盘找不到证据”的割裂。 目标:让变更带着信息来,而不是带着情绪来。 变更单(CR/SCR)最低要素建议包含: 这一步的本质,是把“我想要”变成“我愿意为代价买单的选择”。变更单最有价值的不是“提交”,而是“字段强约束”。在 ONES Project 中,通过自定义需求状态与属性,可以把“影响分析一页纸”所需的关键字段前置到变更申请阶段,减少 CCB 会议上临时补材料。 目标:把“要不要做”变成“值不值得做、怎么做更划算”。 建议用“一页纸影响分析”,强制输出: 一句话点破:影响分析不是“把风险写出来就安全了”,而是帮助组织做取舍:这次我们愿意买哪一种代价。 影响分析要快、要准,离不开“需求—任务—测试—缺陷”的数据贯通。ONES Project 提到与 TestCase 数据互通、并支持一键提 Bug,这类能力能让你在评估质量与回归范围时不至于全靠经验猜。 目标:让组织用同一套规则做取舍,并且决策可复盘。 建议把 CCB 做成“有章程的治理机制”,至少明确: 一次高效 CCB 建议做到“三定”: CCB 会议的“决定”一定要变成“可复盘的组织记忆”。ONES Project 明确提到与 ONES Wiki 的协同:文档可以关联任务/工作项。你可以把“CCB 决策纪要、否决原因、替代方案”沉淀在 Wiki,并回链到对应变更单,下一次再出现类似变更,组织就不会重复交学费。 目标:防止“会上通过了,现场没变;或者现场变了,组织失忆”。 落地动作建议固定成三步闭环: 1)实施与验证:研发实现、自测、测试回归、验收确认; Q1:需求基线到底“冻结什么”? Q2:CCB 一定要很大、很正式吗? Q3:影响分析写不出来怎么办? Q4:紧急变更怎么处理才不破坏治理? 成熟的 IPD需求管理 不是“把流程写得更细”,而是把组织能力做得更强: 最后再强调一句:变更永远会来。真正的差距不在于谁能“减少变更”,而在于谁能把变更变成组织的可控能力——这才是 IPD 体系建设最硬的底座。本文关键词:IPD 需求管理、需求管理、需求变更、需求变更管理、需求基线(Requirements Baseline)、CCB(变更控制委员会)、变更控制(Change Control)、配置管理(Configuration Management)、影响分析、需求追溯矩阵(RTM)
为什么“需求没管住”,IPD节奏就一定会崩
IPD 需求管理的骨架:把需求纳入配置管理
1)需求分层:把“想要什么”变成“必须满足什么”

2)追溯链:没有追溯,就没有“像样的影响分析”

3)需求基线:冻结的不是文档,是“交付承诺”

4)CCB 变更控制:把变更从“情绪”变成“投资决策”
全流程落地:从需求基线到 CCB 变更控制
摘要版
需求入口 → 需求分解与追溯 → 建立需求基线 → 变更申请(CR)→ 影响分析 → CCB 决策 → 执行验证 → 更新基线与追溯 → 关闭变更单1. 需求入口:先把“入口”管住,后端才不会靠吵架控风险
入口治理的关键是“字段齐全 + 状态可控”。例如在 ONES Project 中,你可以把变更申请作为一种工作项/表单来收敛入口信息,同时利用其“需求池 + 自定义需求状态/属性”的机制,减少信息缺失导致的反复打回。2. 需求分解与追溯:先把“结构化依据”建起来
3. 建立需求基线:用“基线包”把承诺讲清楚
4. 变更申请:把“口头插单”变成“可评审的请求”
5. 影响分析:CCB 能不能开好,取决于这一页纸
6. CCB决策:用机制替代“拍脑袋”,用章程替代“临时拉群”
7. 执行与闭环
2)更新配置项:更新需求基线版本号、更新追溯链(RTM);
3)关闭变更单:记录决策理由与验证证据,沉淀可复盘信息。常见问题 FAQ:
冻结的是“交付承诺”:范围 + 验收口径 + 关键约束 + 里程碑假设,而不只是需求列表。基线要能成为后续变更评审的参照。
不一定。关键不是规模,而是“章程 + 授权阈值 + 可复盘记录”。小团队也可以做“小型 CCB”,用阈值把小变更下放,把大变更拉上来。
优先补追溯链:没有需求 ID、接口项、测试用例的对应关系,就很难评估影响。先从“最短闭环追溯”做起,逐步完善;工具层面也建议把“需求—任务—测试用例”的关联关系固化起来。
给紧急变更单独通道:先快速决策、快速止损,但必须补齐“事后记录 + 基线更新 + 验证证据”,否则紧急会变成常态。
在当今数字化时代,应用安全至关重要,而用户身份认证是保障应用安全的第一道防线。HarmonyOS 的 User Authentication Kit 为开发者提供了全面且强大的用户认证解决方案,助力开发者轻松构建安全可靠的认证系统。本文将结合实际案例,深入探讨 User Authentication Kit 在不同场景下的开发应用。 “学海在线教育平台”服务于广大学生群体,包括小学生、初中生和高中生,同时涉及家长与教师用户。由于不同用户群体的使用场景和安全需求各异,因此需要构建一个多层次、全方位的用户认证系统。 学生日常登录 在线考试场景 家长敏感操作认证 教师管理操作认证 检查设备支持的认证类型: 学生人脸识别登录: 在线考试双重认证: 家长敏感操作认证(包含短信验证码验证): 教师指纹与数字证书认证: 经过实际测试,“学海在线教育平台”的认证系统在安全性能方面表现出色。人脸识别误识率为 1/50 万,通过率 98.7%,平均耗时 800ms;指纹识别误识率 1/10 万,通过率 99.2%,平均耗时 500ms;双重认证误识率低至 1/1 亿,通过率 97.5%,平均耗时 1.2s。短信验证码验证和数字证书验证的成功率均达到 99%以上。 用户反馈积极,学生表示人脸识别登录方便快捷,提高了学习效率;家长对敏感操作的多重认证方式表示放心,认为有效保护了账户安全;教师对指纹与数字证书结合的认证方式给予肯定,认为确保了教学管理操作的安全性和数据的可靠性。 HarmonyOS 的 User Authentication Kit 为开发者提供了丰富的功能和灵活的开发接口,能够满足不同应用场景下的复杂认证需求。通过“学海在线教育平台”的案例,我们详细展示了如何根据不同用户群体和使用场景,设计并实现多层次、全方位的认证系统。开发者在实际项目中,应充分结合业务需求,合理运用 User Authentication Kit 的各项特性,为用户打造安全、便捷的应用体验。HarmonyOS 中 User Authentication Kit 开发实战与应用
引言
User Authentication Kit 核心特性
案例场景:“学海在线教育平台”认证系统开发
需求设计
关键代码实现
import { userAuth } from '@ohos.userIAM.userAuth';
let auth = new userAuth.UserAuth();
let authTypes = auth.getAvailableAuthType(userAuth.AuthLevel.STRONG);
console.log(`支持认证类型: ${authTypes}`);async function studentFaceLogin(): Promise<boolean> {
let challenge = generateRandomChallenge();
let authParams = {
challenge: challenge,
authType: userAuth.AuthType.FACE,
authTrustLevel: userAuth.AuthTrustLevel.ATL3,
extraInfo: { requireLiveness: true }
};
try {
let result = await auth.auth(authParams);
return result.result === userAuth.AuthResult.SUCCESS;
} catch (err) {
console.error(`认证失败: ${err.code}, ${err.message}`);
return false;
}
}async function examAuth(): Promise<boolean> {
let authParams = ([{ authType: userAuth.AuthType.FACE, authTrustLevel: userAuth.AuthTrustLevel.ATL4 }, { authType: userAuth.AuthType.FINGERPRINT, authTrustLevel: userAuth.AuthTrustLevel.ATL3 }]);
let controller = new userAuth.AuthController();
return controller.execute(authParams)
.then(result => {
return result.allSucceeded;
});
}async function parentSensitiveOperationAuth(): Promise<boolean> {
let faceResult = await faceAuth();
if (!faceResult) {
return false;
}
let smsCode = await sendAndGetSmsCode();
let verifyResult = await verifySmsCode(smsCode);
return verifyResult;
}
async function faceAuth(): Promise<boolean> {
let challenge = generateRandomChallenge();
let authParams = {
challenge: challenge,
authType: userAuth.AuthType.FACE,
authTrustLevel: userAuth.AuthTrustLevel.ATL4
};
try {
let result = await auth.auth(authParams);
return result.result === userAuth.AuthResult.SUCCESS;
} catch (err) {
console.error(`人脸认证失败: ${err.code}, ${err.message}`);
return false;
}
}
async function sendAndGetSmsCode(): Promise<string> {
// 调用短信发送接口并等待用户输入验证码
// 此处省略实际短信发送和获取用户输入的逻辑
return "123456";
}
async function verifySmsCode(code: string): Promise<boolean> {
// 调用接口验证短信验证码
// 此处省略实际验证逻辑
return code === "123456";
}async function teacherAuth(): Promise<boolean> {
let fingerprintResult = await fingerprintAuth();
if (!fingerprintResult) {
return false;
}
let certResult = await verifyDigitalCertificate();
return certResult;
}
async function fingerprintAuth(): Promise<boolean> {
let challenge = generateRandomChallenge();
let authParams = {
challenge: challenge,
authType: userAuth.AuthType.FINGERPRINT,
authTrustLevel: userAuth.AuthTrustLevel.ATL4
};
try {
let result = await auth.auth(authParams);
return result.result === userAuth.AuthResult.SUCCESS;
} catch (err) {
console.error(`指纹认证失败: ${err.code}, ${err.message}`);
return false;
}
}
async function verifyDigitalCertificate(): Promise<boolean> {
// 调用数字证书验证接口
// 此处省略实际验证逻辑
return true;
}安全性能与用户反馈
总结
欢迎来到 Apache SeaTunnel 的世界!这份文档旨在帮助新手快速了解 SeaTunnel 的核心功能、基本架构,并完成第一个数据同步任务。 Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题,如数据源多样性、同步场景复杂性以及资源消耗高的问题。 SeaTunnel 采用了解耦的设计架构,Source、Transform、Sink 插件与具体的执行引擎(Engine)是分离的。 SeaTunnel 基于 Java 开发,理论上支持所有安装了 JDK 的操作系统。 在开始安装 SeaTunnel 之前,请确保你的环境满足以下要求: JDK 版本:必须安装 Java 8 或 Java 11。 在使用 SeaTunnel 之前,深入理解其核心组件的内部机制有助于你更好地调优和排查问题。 Source 负责从外部系统读取数据,并将其转换为 SeaTunnel 内部的行格式(SeaTunnelRow)。 Transform 负责在数据从 Source 流向 Sink 的过程中对数据进行处理。 Sink 负责将 SeaTunnel 处理后的数据写入到外部系统。 SeaTunnel 支持超过 100 种 Connector,以下是几类最常用的 Connector 及其特性分析: 支持列表: MySQL, PostgreSQL, Oracle, SQLServer, DB2, Teradata, Dameng(达梦), OceanBase, TiDB 等。 优点: 缺点: 支持列表: Kafka, Pulsar, RocketMQ, Amazon DynamoDB Streams 等。 优点: 缺点: 支持列表: MySQL-CDC, PostgreSQL-CDC, Oracle-CDC, MongoDB-CDC, SQLServer-CDC, TiDB-CDC 等。 优点: 缺点: 支持列表: LocalFile, HDFS, S3, OSS, GCS, FTP, SFTP 等。 优点: 缺点: 支持列表: Elasticsearch, Redis, MongoDB, Cassandra, HBase, InfluxDB, ClickHouse, Doris, StarRocks 等。 Transform 插件用于在 Source 和 Sink 之间处理数据。以下是几个常用 Transform 的配置示例。 使用 SQL 语法对数据进行处理,支持重命名、计算、常量添加、过滤等。 用于删除或保留指定字段(注意:不是过滤行,是过滤列/字段)。 用于字符串替换,支持正则表达式。 将一个字符串字段拆分为多个字段。 对于新手,推荐直接下载编译好的二进制发行包进行体验。 前往 SeaTunnel 下载页面 下载最新版本的二进制包(例如 SeaTunnel 的 Connector 是插件化的。首次使用需要下载插件: 注意:该命令会根据 如果遇到下载速度极慢或超时失败的情况,建议配置 Maven 阿里云镜像。 保存后再次运行 我们将创建一个简单的任务:生成一些随机数据(FakeSource),并将其打印到控制台(Console Sink)。 在 使用 SeaTunnel 自带的 Zeta 引擎运行该任务。 执行命令: 命令详解: 任务启动后,终端会输出大量日志。我们需要关注以下关键信息: 数据处理过程: 如果在运行过程中遇到报错,请参考以下常见问题进行排查: 解决: 解决: 解决: Apache SeaTunnel 批流一体、生态丰富、部署轻便,入门有指南,实战有案例。即刻上手探索,加入开源社区,让数据流转更简单,为数据工程高效赋能!祝你学习愉快!
1. 什么是 Apache SeaTunnel?
核心特性
2. 架构与环境
2.1 架构图

2.2 操作系统支持
操作系统 适用场景 说明 Linux (CentOS, Ubuntu, etc.) 生产环境 (推荐) 稳定性高,适合长期运行服务。 macOS 开发/测试 适合开发者本地调试和编写 Config。 2.3 环境准备
java -version 检查。JAVA_HOME 环境变量。3. 核心组件深度解析
3.1 Source (数据源)
partition_column 的最大值和最小值计算出多个查询范围(Splits)。3.2 Transform (数据转换)
Sql, Filter, Replace)是无状态的,即处理当前行不需要依赖其他行的数据。3.3 Sink (数据目标)
3.4 执行流程
Reader -> Transform -> Writer。4. 支持的 Connector 及其优缺点分析
4.1 关系型数据库 (JDBC)
partition_column 切分)、Exactly-Once(取决于实现)。fetch_size)。4.2 消息队列
4.3 变更数据捕获 (CDC)
4.4 文件系统 & 云存储
4.5 NoSQL & 其他
5. Transform 实战演练 (附带详细注释)
5.1 Sql Transform (最推荐)
transform {
Sql {
# 输入表名,必须与 Source 的 result_table_name 一致
plugin_input = "fake"
# 输出表名,供后续 Transform 或 Sink 使用
plugin_output = "fake_sql"
# SQL 查询语句
# 1. name as full_name: 字段重命名
# 2. age + 1: 数值计算
# 3. 'US' as country: 增加常量列
# 4. where age > 10: 数据过滤
query = "select name as full_name, age + 1 as next_year_age, 'US' as country from fake where age > 10"
}
}5.2 Filter Transform
transform {
Filter {
plugin_input = "fake"
plugin_output = "fake_filter"
# 仅保留 name 和 age 字段,其他字段会被丢弃
include_fields = ["name", "age"]
# 或者使用 exclude_fields 删除指定字段
# exclude_fields = ["card"]
}
}5.3 Replace Transform
transform {
Replace {
plugin_input = "fake"
plugin_output = "fake_replace"
# 需要替换的字段名
replace_field = "name"
# 匹配模式(旧字符串)
pattern = " "
# 替换后的字符串(新字符串)
replacement = "_"
# 是否使用正则表达式,这里设为 true,表示 pattern 是一个正则
is_regex = true
# 是否只替换第一个匹配项
replace_first = true
}
}5.4 Split Transform
transform {
Split {
plugin_input = "fake"
plugin_output = "fake_split"
# 分隔符,这里使用空格
separator = " "
# 需要拆分的源字段
split_field = "name"
# 拆分后生成的新字段名列表
output_fields = ["first_name", "last_name"]
}
}6. 快速安装
步骤 1: 下载
apache-seatunnel-2.3.x-bin.tar.gz)。步骤 2: 解压
tar -xzvf apache-seatunnel-2.3.x-bin.tar.gz
cd apache-seatunnel-2.3.x步骤 3: 安装 Connector 插件
sh bin/install-plugin.shconfig/plugin_config 文件中的配置,从 Maven 中央仓库下载常用插件(如 connector-fake, connector-console 等)。如果下载速度慢,请耐心等待或配置 Maven 镜像。💡 技巧:配置 Maven 国内镜像加速下载
~/.m2/settings.xml (Windows 下为 C:\Users\你的用户名\.m2\settings.xml)。<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>sh bin/install-plugin.sh 即可享受高速下载。7. 实战:第一个 SeaTunnel 任务
步骤 1: 创建配置文件
config 目录下创建一个名为 hello_world.conf 的文件,内容如下:env {
# 并行度设置:决定了有多少个线程同时执行任务。
# 设置为 1 表示单线程执行,适合测试;生产环境可根据资源调大。
parallelism = 1
# 作业模式:
# BATCH (批处理):一次性处理完数据后结束(如离线同步)。
# STREAMING (流处理):持续运行,实时处理数据(如实时同步)。
job.mode = "BATCH"
}
source {
# FakeSource 是一个虚拟数据源,用于生成测试数据
FakeSource {
# result_table_name: 将此数据源产生的数据注册为一个临时表,表名为 "fake"
# 后续的 Transform 或 Sink 可以通过这个名字引用这份数据
result_table_name = "fake"
# row.num: 指定生成数据的总行数,这里生成 16 行数据
row.num = 16
# schema: 定义数据的结构(字段名和类型)
schema = {
fields {
name = "string" # 定义一个名为 name 的字符串字段
age = "int" # 定义一个名为 age 的整型字段
}
}
}
}
transform {
# Sql Transform: 使用 SQL 语句对数据进行处理
Sql {
# plugin_input: 指定输入数据来源,这里引用了 Source 中定义的 "fake" 表
plugin_input = "fake"
# plugin_output: 指定处理后的结果表名,命名为 "fake_transformed"
# 下游的 Sink 将使用这个名字来获取处理后的数据
plugin_output = "fake_transformed"
# query: 执行的 SQL 查询语句
# 这里演示了选择 name 和 age 字段,并新增一个常量字段 new_field
query = "select name, age, 'new_field_val' as new_field from fake"
}
}
sink {
# Console Sink: 将数据输出打印到控制台(标准输出)
Console {
# plugin_input: 指定要输出的数据来源,这里引用了 Transform 输出的 "fake_transformed" 表
plugin_input = "fake_transformed"
}
}步骤 2: 运行任务
./bin/seatunnel.sh --config ./config/hello_world.conf -e local./bin/seatunnel.sh: 启动脚本,默认使用 Zeta 引擎。--config (或 -c): 指定配置文件的路径。这里我们指定了刚才创建的 hello_world.conf。-e local (或 -m local): 指定执行模式。local: 本地模式。SeaTunnel 会在当前进程中启动一个轻量级的 Zeta 引擎集群来运行任务,任务结束后集群关闭。适合开发和测试。cluster: 集群模式。任务会提交到已经运行的 SeaTunnel 集群中执行。适合生产环境。步骤 3: 查看结果与日志分析
看到 Job execution started 表示配置文件解析通过,任务已提交给引擎。
由于我们使用的是 Console Sink,数据会直接打印在日志中。你应能看到类似如下的输出:...
INFO ...ConsoleSinkWriter - subtaskIndex=0 rowIndex=1: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: CpiOd, 12345, new_field_val
INFO ...ConsoleSinkWriter - subtaskIndex=0 rowIndex=2: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: eQqTs, 67890, new_field_val
...subtaskIndex: 并行任务的编号。rowIndex: 当前处理的行号。SeaTunnelRow: 打印出的具体数据内容。
最后看到 Job Execution Status: FINISHED 表示任务执行成功结束。8. 常见问题排查 (Troubleshooting)
🔴 问题 1:
command not found: java 或 JAVA_HOME is not setjava -version 确认 Java 8 或 11 已安装。export JAVA_HOME=/path/to/your/java (建议写入 ~/.bashrc 或 ~/.zshrc)。🔴 问题 2:
Exception in thread "main" ... ClassNotFoundExceptionClassNotFoundException: org.apache.seatunnel.connectors.seatunnel.fake.source.FakeSourceFactory。sh bin/install-plugin.sh。connectors/seatunnel 目录下是否有对应的 jar 包(例如 connector-fake-*.jar)。🔴 问题 3:
Config file not valid 或 HOCONSyntaxErrorhello_world.conf 中的括号 {} 不匹配,或者关键字拼写错误。{ 和 } 都是成对出现的。🔴 问题 4: 任务卡住不动
plugin_config 里的内存设置。env 中错误地设置了 job.mode = "STREAMING"。9. 进阶学习资源
docs/en/connector-v2 目录,了解所有支持的数据源。config 目录下通常会有一些模板文件(如 v2.batch.config.template),可以作为参考。
话说上回 https://www.v2ex.com/t/1184169
现已完全开源,希望有兴趣的道友可以支持一下 issue
有能力的道友可以支持一下 PR
郑重声明,本游戏属于灵光一闪,并希望精雕细琢成型。并承诺永不发展氪金方向。
最终的期望就是:
愿你在万界中得一二知己,共证长生。
https://github.com/ChurchTao/Daoyou


(很喜欢 JoeJoeJoe 大佬的这块宝地,我还继续发这里了。)
最近的一个困扰和一个新的感悟。
一个困扰就是最近 Vibe coding 挺多了,想要 Vibe coding 也很多。
手上有两三个自己的开源项目,都在进行中(逐步都会放出来)
然后还有 3 个硬件的项目, 搞了个半半拉拉的(一个墨水屏的,还有两个可以自定义 dashboard 的带屏幕嵌入式项目),此前完全是嵌入式开发的门外汉,得益于 AI 和 vibe coding 的火速发展,这门槛一下降到脚底了
另外一个感悟是 AI 时代 程序员/工程师 可能 更 需要刻意练习的一个软技能:多任务并发处理事情的能力。
在 AI 时代之前,我们主要的时间分配,除了各种会议之外,主要时间还是在编码阶段。现在借助 Vibe Coding 我们大部分时间可能是在等待 AI 生成结果,然后接受修改,或者给出建议进入下一轮修改,更像一个 director 或者 manager 的角色。
(原本以为 AI 发展得更好,它处理问题的速度就会更快。事实发现,似乎也并不是这样。现在发展更好,反而思考链条就更长。当然,它处理最终问题的结果会更好,整体的处理效率应该是提高了,大部分情况下,一次就能好,省掉了改来改去的步骤。
如同异步 IO ,为了提高处理效率,CPU 不会同步地 wait 在耗时的 IO 上,这部分交给 AI ,"CPU" 继续异步处理其他的任务。把 CPU 塞到百分之七八十才是最高效的,那有这种 "CPU" 的人才也是比较有竞争力的.
为什么要这样,不能不卷吗?但坦率地讲,在现在这个环境下,不卷可能不太现实,资本家总是是要充分地压榨剩余价值的,不卷有的人卷,囚徒困境。
但是人脑跟 CPU 不一样,不会天生就会并行地处理任务的。况且,程序员也很讨厌被打断,上下文的切换也很耗时耗神。但是这是一个可以通过刻意练习来加强的行为,工作中,我见过个别下属和同事在处理这种并行的任务时做得很好的,他们通常会有这种习惯。如果去刻意地培养这种能力,会有更大发挥的空间。
我个人目前是很抵触卷的,但我 20 多岁的时候也很卷,但因此也获得了该有的回报,所以也我也很难建议别人卷或者躺平,没法说。知道自己想要什么,去追究什么就好了。
各位觉得呢?

是不是可以批量生产一堆年限高的账号?
四个能拿出手的开源项目,目前加起来一共 90 个 star:
高效优雅的 macOS 窗口切换器应用: DevSwitcher2
导火索是 Alt-Tab-macOS 的内存泄漏问题, 加上我使用窗口切换器软件中的预览缩略图很不爽:"低效难用占用高", 就有了这个项目。贴个图, 有兴趣可以尝试下:
macOS 中文输入时使用英文标点: MacEasySymbol
开源的力量不仅仅是代码开源,更是各种 good idea 的碰撞, 现在再看我第一个发布的版本, 真的会感慨这就是社区的力量
集中管理 AI agent 的配置工具: agtok
今年有段时间在不停地尝试各家中转站和国产模型, 来回切换 URL 和 token 时很麻烦, 尤其还有一台没有 GUI 的 linux, 自己写了一个支持 TUI 和 CLI 格式的配置工具, 更像个玩具, 贴个图:
灵感来自 IDEA 的 VSCode 插件: Java-Launcher
主要解决两个问题:
正在 IDEA 转 VSCode 系的可以试一下, 主要针对的 Spring boot 项目
欢迎 2 友们分享下自己的
以前卖 QQ、YY 号注册的,但是不会做网站,只是注册了域名。
001qqyy.com
001QQYY 专卖,001 是店名。
在中国网格( cnwg.cn )注册的,那个时候没有价格战,都是信息差,别家都是 50 左右,这家首年 39,现在平台很多为了拉新都是首年 1 元给 cn,或者一二十给 com
VMware ESXi 9.0.2.0 macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 9.0 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur/IEIT SYSTEMS (浪潮)、H3C (新华三)、Cisco (思科)、Fujitsu (富士通)、Hitachi (日立)、NEC (日电)、Huawei (华为)、xFusion (超聚变) OEM 定制版 请访问原文链接:https://sysin.org/blog/vmware-esxi-9-oem/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 vSphere 的两个核心组件是 ESXi 和 vCenter Server。ESXi 是用于创建并运行虚拟机和虚拟设备的虚拟化平台。vCenter Server 是一项服务,用于管理网络中连接的多个主机,并将主机资源池化。 该版本在官方原版基础上新增以下特性: 参看:macOS 26 Blank OVF - macOS Tahoe 虚拟化解决方案 ESXi 默认是支持创建 macOS 虚拟机的,但该功能仅限于 Apple Mac 硬件上启用。该版本解锁了对 macOS 虚拟化的支持,在任意非 Mac 硬件上可以直接运行 macOS 虚拟机。 ⚠️ macOS 虚拟机与 Mac 上的 macOS 体验有天壤之别,仅用于体验而已。开启 macOS 卓越性能的唯一平台是搭载 Apple M 芯片的 Mac。尽早加入 Apple 阵营,开启卓越体验吧。 直接新建虚拟机,操作系统选择 “Apple macOS 12 (64-bit)”,即可安装和正常启动: 虚拟化中的 macOS Tahoe: 附: 来自社区最新的 OEM BIOS/EFI64,现已更新支持 Windows Server 2025。 BIOS.440 & EFI64.ROM - Dell 2.7 OEM BIOS: NT 6.0 (Vista/Server 2008), NT 6.1 (7/Server 2008 R2), NT 6.2 (Server 2012), NT 6.3 (Server 2012 R2), NT 10.0 (Server 2016/Server 2019/Server 2022/Server 2025) Windows Server OVF 系列: 其他 OVF,如:Rocky Linux 10 x86_64 OVF (sysin) - VMware 虚拟机模板,Ubuntu 24.04 LTS x86_64 OVF (sysin) - VMware 虚拟机模板,更多请在本站搜索 “OVF”。 ESXi 9.0 同样废弃了对部分旧款 CPU 的支持,笔者根据相关文档判断以下 CPU 将不受 ESXi 9.0 支持: Intel AMD ESXi 8.0 同样废弃了对部分旧款 CPU 的支持,以下 CPU 将不受 ESXi 8.0 支持: vSphere 7.0 Update 2 及更高版本中 ESX 安装程序显示的如下警告消息已经明示: 修改启动参数,在官方不受支持的 CPU 的服务器上可以正常安装。 根据 VMware vSphere 7.0 Release Notes,以下 CPU 已经不受支持(无法安装或者升级 ESXi 7.0) Comparing the processors supported by vSphere 6.7, vSphere 7.0 no longer supports the following processors: 笔者在一台 2010 年发布的服务器上安装运行良好 (sysin):HP DL 380 G7,Intel® Xeon® CPU E5606 备注:本截图为 7.0 版本 ESXi 9.0 对存储容量的要求未有明显变更,以下 ESXi 8.0 的描述基本适用。 ⚠️ 在 ESXi 8.0 中建议放弃使用 USB/SD 卡作为系统存储介质(虽然 SD 卡和 USB 介质继续获得有限支持,详见 KB85685)。 从 ESXi 7.0 开始,对磁盘空间的要求有所变化: 通常我们在一块数百 GB 或者更大的本地磁盘上安装 ESXi,系统分区磁盘空间将占用 142GB 以上,整个系统分区(内核参数:systemMediaSize)需要 138GB 和 4GB 以上的空闲空间,其中 ESX-OSData volume 大约需要 120GB 的磁盘空间,对于磁盘空间紧张情况下可能有一定的浪费 (sysin)。修改后,系统安装后占用的磁盘空间不超过 16GB(特别是针对个人实验,无需浪费过多存储容量)。 图:vSphere 7 中的新分区架构,只有系统引导分区固定为 100 MB,其余分区是动态的,这意味着分区大小将根据启动媒体大小确定。 从 vSphere 7.0 Update 1c 开始,您可以使用 ESXi 安装程序引导选项 ESXi 面向数据中心虚拟化,在测试和学习时也常常将其运行于桌面 PC 之上。 据悉 ESXi 8.0 并不支持第 12 代 Intel 处理器,直接引导会出现 PSOD。本次通过加载内核参数可以有限支持第 12 代 Intel CPU,即可以正常引导和安装,也可以正常运行 (sysin),但是无法区分或识别两种核心,P 核的超线程是无法识别的,比如 i7-12650H 配备 6P + 4E 在桌面系统中显示为 16 核心,而在 ESXi 中仅识别为 10 核。现在有了更好的解决方案,绝大多数主流品牌机和主板都可以通过配置开启 P 核的超线程(非主流请慎选)。 已经广泛验证支持第 12 代及以上 Intel 处理器(目前 13、14 代同样支持),更多案例,期待您的反馈。 第 12 代英特尔酷睿桌面级处理器有 N 个性能核(P 核,Performance-core)和 N 个能效核(E 核,Efficient-core)组成,性能核和能效核的混合架构,是 12 代酷睿处理器最大的革新。该架构或俗称 PE 大小核。 第 12 代及以上 Intel CPU 已经成功安装 ESXi 后需要进一步配置,可联系笔者了解详情。 ⚠️:并不推荐此类 CPU,无法有效利用全部计算资源。 💡:仅标准版和集成驱动版提供此项特性,品牌服务器于此无关。 提供标准版和 Dell、HPE、Lenovo 等定制版映像 iso 文件,定制版集成了对应厂商的驱动,建议该厂商产品优先使用。 💡:各厂商定制版将逐步提供,部分厂商关注度太低,可能不再提供定制服务。 因新产品刚刚发布,将及时更新相关内容。 以下如未列出,欢迎提供机型和配置(CPU、RAID Controller、网卡)来询。 💡 提示: 因新产品刚刚发布,将及时更新相关内容。 以下如未列出,欢迎提供机型和配置(CPU、RAID Controller、网卡)来询。 💡 提示: 因新产品刚刚发布,将及时更新相关内容。 以下如未列出,欢迎提供机型和配置(CPU、RAID Controller、网卡)来询。 💡 提示: 如果已经有定制版的品牌,可以访问品牌官网查询官方兼容列表,本站定制版兼容性更加广泛。 欢迎提供机型和配置(CPU、RAID Controller、网卡)来询。 请提供以下四个信息: 请访问原文链接:https://sysin.org/blog/vmware-esxi-9-oem/ 查看。 VMware ESXi 9.0.2.0 macOS Unlocker & OEM BIOS 标准版和厂商定制版: 其他定制版:https://sysin.org/blog/vmware-esxi-9-oem/ 集成驱动版本,请访问: 官方原版,请访问: 上一个版本,请访问:
通用特性概览
直接运行 macOS Tahoe


VMware Dell 2.7 BIOS EFI64 ROM
支持不受官方支持的旧款 CPU
CPU_SUPPORT_WARNING: The CPUs in this host may not be supported in future ESXi releases. Please plan accordingly.
ESX-OSData 卷大小修改为 8GB


systemMediaSize 限制启动媒体上系统存储分区的大小。如果您的系统占用空间较小,不需要最大 128 GB 的系统存储大小,您可以将其限制为最小 32 GB。systemMediaSize 参数接受以下值:即使设置值为 min,相比之前的版本所需存储容量还是要大的多。
有限支持第 12 代及以上 Intel 处理器
提供标准版和厂商定制版映像
Dell (戴尔) 服务器兼容性
产品线 代表机型 官方兼容版本 定制版兼容性 CPU RAID controllers NIC Dell PowerEdge 11G Server R210, R310, R410, R415, R510, R515, R710, R715, R810, R815, R910 T310, T610, T710 6.0-6.0U3 有限支持 8.0,推荐 6.7U3 Intel Xeon 55xx 56xx 65xx 75xx series Intel Xeon E7-28xx E7-48xx E7-88xx series (sysin) AMD Opteron 43xx,42xx,41xx series AMD Opteron 63xx,62xx,61xx series PERC H200, PERC H700, PERC 6/i 皆不受支持 此系列机型不推荐,如有需求可来询。 部分可支持,此系列机型不推荐,如有需求可来询。 Dell PowerEdge 12G Server R220, R320, R420, R420xr, R520, R620, R720, R720xd, R820, R920 T20, T320, T420, T620 6.0-6.0U3, 6.5-6.5U3 有限支持 9.0,推荐 8.0 • Intel® Xeon® processor E5-2400 product family • Intel® Xeon® processor E5-2600 product family • Intel® Xeon® processor E5-4600 product family (sysin) • Intel® Xeon® processor E7-4800 v2 and E7-8800 v2 product families (up to 4) 特殊定制支持的 Internal controllers (sysin): PERC H710 PERC H710P 不支持 PERC H310 (6.5 U3) 不支持 PERC H810 (7.0 U3) Broadcom® 5720 quad-port 1GbE Base-T Broadcom 57840S quad-port 10GbE SFP+ Rack NDC Intel I350 quad-port 1GbE Base-T (sysin) Intel X520 dual-port 10Gb DA/SFP+ Server Adapter Intel X540 dual-port 10GbE Base-T with 2 x 1GbE (FCoE capability enabled on the 10GbE ports) 部分选配 NIC 可能不支持,具体可查询 Dell PowerEdge 13G Server R230, R330, R430, R530, R530xd, R630, R730, R730xd, R830, R930 T30, T130, T330, T430, T630 6.x All, 7.0-7.0U3 8.0-9.0 • Intel Xeon processor E3-1200 v5 • Intel® Xeon® processor E5-2600 v3 v4 product family • Intel® Xeon® processor E5-4600 v3 v4 product family • Intel Xeon E7-8800 v3 v4 and E7-4800 v3 v4 processors Internal controllers (sysin): PERC H330, PERC H730, PERC H730P External HBAs (RAID): PERC H830 不支持 PERC S130 (SW RAID) Broadcom® 5720 quad-port 1GbE Base-T Broadcom 57840S quad-port 10GbE SFP+ Rack NDC Intel I350 quad-port 1GbE Base-T (sysin) Intel X520 dual-port 10Gb DA/SFP+ Server Adapter Intel X540 dual-port 10GbE Base-T with 2 x 1GbE (FCoE capability enabled on the 10GbE ports) 部分选配 NIC 可能不支持,具体可查询 Dell PowerEdge 14G Server R240, R340, R440, R540, R640, R6415, R740, R740xd, R740xd2, R7415, R7425, R840, R940, R940xa T40, T140, T340, T440, T640 6.7-6.7U3, 7.0-7.0U3, 8.0-8.0U3 9.0 • Intel Xeon Scalable processors • 2nd Generation Intel® Xeon® Scalable processors (sysin) • AMD EPYC processors 同官方支持 同官方支持 Dell PowerEdge 15G Server R250, R350, R450, R550, R650, R650xs, R6515, R6525, R750, R750xa, R750xs, R7515, R7525 T150, T350, T550 6.7U3, 7.0U2-7.0U3, 8.0-8.0U3, 9.0 同官方支持 • 3rd Generation Intel Xeon Scalable processors (sysin) • 2nd or 3rd Generation AMD EPYC Processor 同官方支持 同官方支持 Dell PowerEdge 16G Server R360, R660, R660xs, R6615, R6625, R760, R760xa, R760xd2, R760xs, R7615, R7625, R860, R960 T360, T560 7.0U3, 8.0-8.0U3, 9.0 同官方支持 • 4th Generation Intel Xeon Scalable processors (sysin) • AMD EPYC 4th Generation 9004 Series 同官方支持 同官方支持 Dell PowerEdge 17G Server R370, R470, R570, R670, R6715, R6725, R770, R7715, R7725, R870, R970 T370, T570 (部分机型尚未发布,按惯例列出) 8.0U3, 9.0 同官方支持 • Intel Xeon 6 processors (sysin) • AMD EPYC 5th Generation 9005 Series 同官方支持 同官方支持 HPE (慧与) 服务器兼容性
产品线 机型 官方兼容版本 定制版兼容性 CPU RAID controllers NIC HP ProLiant Servers Gen8 ML10 v2, ML310e Gen8 v2, ML350e Gen8, ML350p Gen8 DL320e Gen8 v2, DL360e Gen8, DL380e Gen8, DL360p Gen8, DL380p Gen8, DL560 Gen8, DL580 Gen8 6.0-6.0U3, 6.5-6.5U3 8.0 系列 • Intel® Xeon® E5-2400 • Intel® Xeon® E5-2400 v2 • Intel® Xeon® E5-2600 v2 (sysin) • Intel® Xeon® E7-4800 v2 • Intel® Xeon® E7-8800 v2 ⚠️ 以下型号默认不受支持: Smart Array P420i, HP Smart Array P222, Smart Array P420, Smart Array P421, Smart Array P822 以上默认最高支持 7.0 (已有特殊定制版可以支持 8.0),以下默认同时支持 8.0 系列 支持的型号: HPE Smart Array P430i, P430, P431, P830i, P830 【B120i/B320i SATA RAID 不受支持】 HP 1Gb Ethernet 4-port 331i Adapter HP Ethernet 1Gb 4-port 366i Adapter HP Ethernet 1Gb 4-port 331FLR Adapter (sysin) HPE FlexFabric 10Gb 2P 534FLR-SFP+ Adapter HPE Ethernet 10Gb 2-port 561T Adapter HPE Ethernet 10Gb 2-port 557SFP+ Adapter 预置网卡可支持,选配网卡个别不支持,具体可查询 HPE ProLiant rack and tower servers Gen9 ML10 Gen9, ML30 Gen9, ML110 Gen9, ML150 Gen9, ML350 Gen9 DL20 Gen9, DL60 Gen9, DL80 Gen9, DL120 Gen9, DL160 Gen9, DL180 Gen9, DL360 Gen9, DL380 Gen9, DL560 Gen9, DL580 Gen9 6.5-6.5U3, 6.7-6.7U3, 7.0-7.0U3 8.0-9.0 • Intel Xeon E3-1200 v3 • Intel Xeon E3-1200 v5 Intel Xeon E5-2600 v3/v4 (sysin) • Intel Xeon E5-4600 v3/v4 • Intel Xeon E7-4800 v3/v4 • Intel Xeon E7-8800 v3/v4 • AMD Opteron 6300 Series HPE Smart Array H240, H240ar, P440, P440ar, P441, P840, P841, P830i, P830 【B140i 不受支持】 HPE Embedded Dual Port 361i Adapter HPE Embedded 1Gb Ethernet 4-port 331i Adapter (sysin) HPE FlexFabric 10Gb 2P 533FLR-T Adapter HPE FlexFabric 10Gb 2P 534FLR-SFP+ Adapter 预置网卡可支持,选配网卡个别不支持,具体可查询 HPE ProLiant rack and tower servers Gen10 • HPE ProLiant MicroServer • HPE ProLiant ML family • HPE ProLiant DL family 6.5-6.5U3, 6.7-6.7U3, 7.0-7.0U3, 8.0-8.0U3, 9.0 同官方支持 • Intel Xeon Scalable processor (sysin) • AMD EPYC 7000 Series Processor family 同官方支持 同官方支持 HPE ProLiant rack and tower servers Gen10 Plus • HPE ProLiant MicroServer • HPE ProLiant ML family • HPE ProLiant DL family 6.7U3, 7.0-7.0U3, 8.0-8.0U3, 9.0 同官方支持 • 2nd or 3rd Generation Intel Xeon Scalable processors (sysin) • 2nd/3rd Generation AMD EPYC 7002/7003 Series processors 同官方支持 同官方支持 HPE ProLiant rack and tower servers Gen11 • HPE ProLiant MicroServer • HPE ProLiant 10 series • HPE ProLiant 100 series • HPE ProLiant 300 series • HPE ProLiant 500 series 7.0U3, 8.0-8.0U3, 9.0 同官方支持 • 4th Generation Intel Xeon Scalable processors (sysin) • 4th Generation AMD EPYC 9004 Series processors 同官方支持 同官方支持 HPE ProLiant rack and tower servers Gen12 • HPE ProLiant MicroServer • HPE ProLiant ML server • HPE ProLiant DL server • HPE ProLiant RL server 8.0U3, 9.0 同官方支持 • Intel Xeon 6 processors (sysin) • 5th AMD EPYC 9005 Series processors 同官方支持 同官方支持 华为与超聚变服务器兼容性
产品线 代表机型 官方兼容版本 定制版兼容性 CPU RAID controllers NIC Huawei FusionServer V2 RH1288 V2, RH1288A V2, RH2285 V2, RH2285H V2, RH2288 V2, RH2288A V2, RH2288H V2, RH2485 V2 6.0-6.5 8.0 E5-2400 E5-2400 V2 E5-2600 E5-2600 V2 E5-4600 E5-4600 V2 LSI 产品支持(部分型号需定制) Intel E1G42ET (82576) 和 Silicom 网卡不受支持。 部分适用 C3 定制版。 Huawei/xFusion FusionServer V3 5288 V3, RH1288 V3, RH2288 V3, RH2288H V3, RH5885 V3(E7 V2+DDR3), RH5885 V3(E7 V3+DDR3), RH5885 V3(E7 V3+DDR4), RH5885 V3(E7 V4+DDR4), RH5885H V3(E7 V2+DDR3), RH5885H V3(E7 V3+DDR4), RH5885H V3(E7 V4+DDR4), RH8100 V3(E7 V2+DDR3), RH8100 V3(E7 V3+DDR4), RH8100 V3(E7 V4+DDR4) 6.0-6.5-6.7 9.0 E5-2600 V3 E5-2600 V4 E7-4800 V2 E7-8800 V2 E7-4800 V3 E7-8800 V3 E7-4800 V4 E7-8800 V4 PM8060 和 PM8068 不受支持。LSI 产品支持(部分型号需定制)。 Silicom 网卡不受支持。 部分适用 C3 定制版。 Huawei/xFusion FusionServer V5 1288H V5, 1288X V5, 2288 V5, 2288C V5, 2288H V5, 2288X V5, 2288X V5 VC, 2298 V5, 2488 V5, 2488H V5, 5288 V5, 5288X V5, 5288X V5 VC, 5885H V5, 8100 V5 6.5-6.7-7.0 9.0 Intel Xeon Scalable processors (Skylake) 2nd Generation Intel® Xeon® Scalable processors (Cascade lake) Broadcom、Avago 、LSI。 Silicom 网卡不受支持。海思 Hi1822 芯片不兼容。 部分适用 C3 定制版。 Huawei/xFusion FusionServer V6 1288H V6, 2288H V6-16DIMM, 2288H V6-32DIMM, 2488H V6, 5288 V6 7.0-8.0 9.0 3rd Generation Intel Xeon Scalable processors (Cooper Lake / Ice Lake) Broadcom、Avago 、LSI。 海思 Hi1822 芯片不兼容。 xFusion FusionServer V7 1158H V7, 1258H V7, 1288H V7, 2258 V7, 2288 V7, 2258H V7(4GPU), 2288H V7, 5288 V7, 2488H V7, 5288 V7, 5298 V7, 5885H V7 7.0U3-8.0-9.0 同官方 4th or 5th Generation Intel Xeon Scalable processors (Sapphire Rapids-SP/Emerald Rapids) AMD EPYC 4th Generation 9004 Series Broadcom、Avago 、LSI。 XC 网卡为超聚变产品。 xFusion FusionServer V8 1288H V8, 2288H V8, 2158 V8, 2258 V8 8.0U3-9.0 同官方 • Intel Xeon 6 processors (sysin) • 5th AMD EPYC 9005 Series processors 同官方 同官方 其他品牌服务器兼容性
常见问题解答 (FAQ)
下载地址
第三届 PolarDB 开发者大会 📍 1 月 20 日,上海 · 五角场凯悦酒店 作为 AI 时代下的云原生数据库领域开年技术盛宴,大会不仅聚焦“AI 就绪的云原生数据库”的前沿实践,呈现 30+ 场技术演讲;更是携手各社区伙伴,一起带来数场 AI 互动体验,用真实体验、互动来感知 AI 时代的数据库,感受数据+AI 的无限可能。 AgentScope Java:Agentic LLM 应用开发框架 AgentScope Java 是以 Agentic 为核心设计理念,面向 Java 开发者的 LLM 应用开发框架。包括核心层、Studio、RL、Memory,以及架构上全力推进 Serverless 化,实现毫秒级冷启动与混合部署,帮助开发者在应对高并发的同时,显著降低部署成本并提升效率。 AgentRun:一站式 Agentic AI 基础设施平台 函数计算 AgentRun 是以高代码为核心的一站式 Agentic AI 基础设施平台,秉持生态开放和灵活组装的理念,为企业级 Agent 应用提供从开发、部署到运维的全生命周期管理,让 Agentic AI 真正进入企业生产环境。 现场还有 《PolarDB AI 能力集》 《AI 原生应用架构白皮书》 等您来领取
