引言
小伙伴们,大家好,数睿通 2.0 迎来了 12 月份的更新,本次更新添加了全新模块:AI 助手,并且在数据库兼容性、稳定性、数据血缘能力以及任务执行性能等方面进行了修复与优化,同时在后台 BI 可视化模块提供了 BI 大屏的接口案例,帮助大家能够更好的去了解和配置 BI 大屏,下面我们来一起看一下吧。
AI 助手
模块定位:
- 面向通用场景的会话式助手,支持解释、知识问答与常规交互;右侧浮动入口随时调起,不改变既有页面结构。
模型与能力:
- 采用通用型模型,并结合业务语料进行适度微调。
- 在知识问答场景中,回答倾向于直接与精炼,减少不必要的赘述。
- 面对复杂问题保留必要的推理与分步说明,以兼顾可读性与可操作性。
适用场景:
- 快速提问与获取解释(如概念解释、步骤说明)。
- 长对话回溯与逐步阅读,便于复制片段或总结记录。
- 希望以流式输出降低等待感、提升连续性阅读体验的场景。
操作流程:
- 打开入口后选择或创建会话,支持搜索、重命名、删除与分页浏览。
- 在输入框中键入消息并回车发送;
Shift + Enter换行。 - 流式回复期间可随时点击“停止”;需要清理上下文时使用“清空消息”。
历史消息:
- 当消息较多时,上拉到列表顶部会显示“加载更早的消息”,分页按需加载以降低渲染与内存压力。
呈现与可读性:
- 支持 Markdown 与代码高亮;表格、图片、链接等常见富文本可直接展示。
- 时间显示策略:用户消息均显示时间;AI 流式消息在完成后显示时间,避免干扰阅读。
交互与体验:
- 智能滚动:接近底部自动跟随,用户上拉则暂停自动跟随;流式期间保持底部以保证连续可读性。
- 分页与截断:按页保留消息,兼顾性能与可用性;减少长对话下的重绘成本。
技术实现:
- 前端:Vue 3 + Element Plus + Vite;SSE(EventSource)实现流式输出;Markdown-it + highlight.js 完成 Markdown/代码渲染。
- 性能控制:requestAnimationFrame、MutationObserver、ResizeObserver 协同布局与滚动更新,尽量减少抖动与不必要重绘。
- 后端:提供流式推送、停止与清空接口、分页查询;采用鉴权令牌保障基础合规;多语言能力由模型原生支持。AI 框架采用 langchain4j,利于后续扩展,跨平台兼容性强。
SQLServer 下 INSERT INTO SELECT 仅插入最大行数问题
现象:在 SQLServer 中执行 INSERT INTO t SELECT * FROM src 场景时,仅插入到连接/会话所设置的最大行数;MySQL 不受影响。
原因分析:
- SQLServer 的
SET ROWCOUNT会影响 DML 语句(包括 INSERT/UPDATE/DELETE),若会话存在非零的ROWCOUNT设置,则语句在达到该行数后提前停止。 - 部分工具链或先前逻辑可能在同一连接上设置了行数限制,导致后续 DML 被无意限制。
处理方案:
- SQLServer 场景下不设置会话级最大行数(不使用
SET ROWCOUNT非零值)。 - 如需控制导入规模,采用分页批处理(
OFFSET … FETCH NEXT …或TOP n循环),避免通过会话限制控制行数,并配合合理的事务边界与失败重试策略。
示例(思路片段):
-- 解除会话行数限制
SET ROWCOUNT 0;
-- 分批插入(示意,实际由任务驱动器循环执行)
INSERT INTO target(col1, col2, ...)
SELECT col1, col2, ...
FROM source
ORDER BY id
OFFSET @offset ROWS FETCH NEXT @batchSize ROWS ONLY;
验证码图形绘制以规避服务器字体缺失
背景:某些服务器环境缺少特定字体文件,使用 Font.createFont 或依赖系统字体时可能产生异常,导致验证码生成失败。
方案:
- 使用
BufferedImage + Graphics2D进行图形绘制,统一走内置通用字体家族(如SansSerif),避免对系统字体的强依赖。 - 启用抗锯齿与随机扰动线条/噪点,保持识别难度与清晰度平衡。
- 字体不可用时落入安全回退路径,不影响验证码生成链路。
要点:
- 通过
RenderingHints开启抗锯齿,采用固定宽度字符集或受控字符集减少布局不确定性。 - 避免在服务端加载自定义字体文件。
数据血缘 SQL 解析优化
目标:在复杂 SQL 下(CTE、嵌套子查询、派生表、复杂 JOIN、UNION/UNION ALL)稳定构建字段级血缘映射。
改进点:
- 解析器增强:补充对 CTE(
WITH)、子查询别名解析与多层投影展开的支持。 - 别名映射:规范化
SELECT expr AS alias的表达式归因,忽略不影响血缘的函数包装(如简单CAST/COALESCE)。 - 列追踪:对聚合与窗口函数进行特殊处理,明确来源列集合与派生列标注。
- 容错:在语法无法完全解析时提供降级策略(例如按照片段抽取与启发式匹配),避免整体失败。
效果:复杂 SQL 的血缘关系更完整、稳定,支持更多生产场景的血缘可视化与校验。
定时任务断连稳定性与重试
问题:定时任务在网络波动或服务重启场景下可能断连,导致任务执行失败或停滞。
方案:
- 增加连接重试:采用指数退避(示例范围:100ms → 10s),最大重试次数与总时长受控。
效果:连接抖动下任务更易恢复,整体稳定性提升。
BI 大屏测试接口
内容:提供用于 BI 大屏联调的测试数据接口,覆盖常见图表的数据结构示例,便于参考接口配置方式与返回格式,帮助更好地使用 BI 大屏。
要点:
- 示例返回统一采用 dataset 结构(dimensions + source,或图表特定字段)。
- 涵盖表格、柱状图、折线图、饼图、雷达图、热力图、散点图、漏斗图、桑基图、Treemap 等常见图表的数据格式示例。
- 适用于快速联调与演示,无需依赖真实业务数据。
数据接入任务卡死优化:自定义线程池替代 ForkJoinPool 公共池
背景:使用 ForkJoinPool.commonPool() 的场景中,若存在同步阻塞或任务互相等待,容易出现公共池饥饿与卡住。
方案:
- 引入自定义
ThreadPoolExecutor(区分 IO 密集与 CPU 密集场景),配置核心/最大线程数、队列与拒绝策略。 - 使用命名线程工厂与监控指标,便于排查与容量评估。
- 在
CompletableFuture等并发工具中显式传入自定义执行器,避免隐式落入公共池。
示例(Java 配置思路):
ExecutorService ioExecutor = new ThreadPoolExecutor(
8, // core
32, // max
60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000),
new ThreadFactory() {
private final AtomicInteger idx = new AtomicInteger(1);
@Override public Thread newThread(Runnable r) {
Thread t = new Thread(r, "io-exec-" + idx.getAndIncrement());
t.setDaemon(true);
return t;
}
},
new ThreadPoolExecutor.CallerRunsPolicy() // 高峰期降级,保障任务不丢
);
CompletableFuture.supplyAsync(() -> loadChunk(), ioExecutor)
.thenApplyAsync(this::transform, ioExecutor)
.thenAcceptAsync(this::persist, ioExecutor);
总结
本次与上述修复/优化相关的产品能力汇总:
- AI 助手:通用会话助手上线;支持流式输出与智能滚动,历史消息顶部加载,停止与清空消息等;后端采用 langchain4j 便于后续扩展。
- 数据库兼容性:SQLServer 导入禁用会话行数限制(
ROWCOUNT);大批量导入建议分页批处理。 - 运维与稳定性:定时任务新增连接重试;验证码改用图形绘制避免字体缺失报错。
- 数据工程:复杂 SQL 的血缘解析增强(CTE/子查询/别名/窗口函数等),提升完整性与稳健性。
- BI:提供测试数据接口,覆盖常见图表类型,便于联调与演示。
结语
以上便是本次更新的主要内容了,这些改进都来源于用户的实际需求和反馈。我们希望通过持续的产品优化,为企业提供更加实用、稳定的数据中台解决方案。
目前源码,部署指南,讲解视频等相关资料是付费加入知识星球获取的,加入星球通过填写商用授权表可获取商用授权资格,对于目前实现的功能来说,价格可以说是非常便宜了,再次感谢大家的关注与支持。源码可用于二开商用,但不可直接或经过修改后公开销售源码,数睿通 2.0 数据中台版权归天津数睿通科技有限公司所有,违规者将追究其法律责任!
感兴趣的朋友请关注公众号 螺旋编程极客 加入星球,我们一起成长,一起进步。