SelectDB search() 实战:一条 SQL 搞定 AI 日志的搜索与分析

一次实时数据链路丢数排查:从 MQTT 队列积压到 SQL 统计开销 本文通过一次实时数据链路压测,排查了从MQTT到ClickHouse的端到端数据丢失问题。核心方法是为每条消息添加序号,建立独立观察点(MQTT订阅端、Kafka消费者),结合转发服务阶段统计与线程栈分析,定位到下游处理速度不足源于Druid SQL合并统计的高开销。优化措施包括关闭SQL合并、扩容代理队列、增强生产侧失败处理,并验证15分钟内实现全链路对账一致,显著缓解积压与丢包。关键收获:数据可对账、明确各阶段“成功”定义、关注客户端队列状态。 阅读详情

SelectDB 基于 Apache Doris 内核,通过内置 search() 函数在一个引擎内融合全文检索与 SQL 分析。本文含完整配置代码、15 种查询算子详解、倒排索引建表模板,以及可复用的优化 checklist。

关键词:SelectDB · Apache Doris · search() · 全文检索 · 倒排索引 · ES 迁移 · BM25 · 日志分析


背景:为什么需要 search()?

AI 时代日志量巨大。一次推理请求从 prompt 输入到 token 输出,会在十几个环节产生日志。日处理千万级请求的推理服务,日志规模轻松达到数十 TB。

传统做法是两套系统:Elasticsearch 负责搜索,ClickHouse 负责分析。问题很明显:

  • 两份数据,存储成本翻倍
  • 中间多一条数据同步链路,实时性差、一致性难保证
  • 运维要同时管 ES 和 OLAP 两套集群,复杂度高

SelectDB search() 的目标很简单:在 SQL 里做全文检索,让搜索和分析用同一份数据、同一条 SQL 完成。


快速上手:第一个 search() 查询

-- 搜索最近 1 小时内所有 GPU OOM 错误日志
SELECT request_id, model_name, error_msg, latency_ms
FROM inference_logs
WHERE search('level:ERROR AND error_msg:"CUDA out of memory" AND model_name:gpt*')
  AND log_time > NOW() - INTERVAL 1 HOUR
ORDER BY latency_ms DESC
LIMIT 100;

语法兼容 ES query_string,熟悉 Elasticsearch 的用户几乎零学习成本。

search() 两种模式:

-- 模式 1:query_string(默认),简洁直观
WHERE search('level:ERROR AND error_msg:"connection refused"')

-- 模式 2:Lucene,支持 MUST/SHOULD/MUST_NOT 语义
WHERE search(
  'level:ERROR AND msg:"timeout" OR msg:"connection refused"',
  '{"mode":"lucene", "default_operator":"and"}'
)

建表模板:日志表 + 倒排索引

CREATE TABLE inference_logs (
    log_time          DATETIME,
    request_id        VARCHAR(64),
    model_name        VARCHAR(32),
    level             VARCHAR(16),
    error_msg         TEXT,
    context           TEXT,
    prompt_tokens     INT,
    completion_tokens INT,
    latency_ms        INT,
    -- 倒排索引定义
    INDEX idx_level(level) USING INVERTED,
    INDEX idx_error(error_msg) USING INVERTED PROPERTIES(
        "parser" = "unicode",
        "support_phrase" = "true"      -- 支持短语搜索
    ),
    INDEX idx_context(context) USING INVERTED PROPERTIES(
        "parser" = "unicode",
        "support_phrase" = "true"
    ),
    INDEX idx_model(model_name) USING INVERTED
) ENGINE = OLAP
DUPLICATE KEY(log_time)
PROPERTIES (
    "inverted_index_storage_format" = "V3",   -- V3 格式,ZSTD 压缩
    "compression" = "ZSTD"
);

关键配置说明:

  • USING INVERTED:为目标字段创建倒排索引,search() 依赖倒排索引加速
  • support_phrase = "true":启用短语搜索能力,支持 "CUDA out of memory" 这种带引号的精确短语匹配
  • parser = "unicode":中英文混合分词——ES 需要额外安装 IK 分词器,SelectDB 原生支持
  • inverted_index_storage_format = "V3":V3 存储格式支持 ZSTD 字典压缩,索引体积比 ES 减少约 20%

注意:SelectDB 的倒排索引加减均不需要重写数据文件。可以先导入数据再按需添加索引,也可以随时删除冗余索引——整个过程无需停服、无需重新建表。


15 种查询算子速查表

search() 内核内置 15 种查询算子,可任意嵌套组合:

算子语法示例用途
TERMlevel:ERROR精确词匹配
PHRASEerror_msg:"CUDA out of memory"短语匹配
PREFIXmodel_name:gpt*前缀通配
WILDCARDerror_type:timeout*通配符匹配
REGEXPerror_msg:/CUDA.*error/正则匹配
RANGElatency:[500 TO *]数值范围
NOTNOT module:healthcheck排除
INhost:IN(gpu-01 gpu-02)多值匹配
NESTEDNESTED(steps, status:error)嵌套 JSON 数组内搜索
MUST / SHOULD / MUST_NOTLucene 模式布尔逻辑组合
BM25 打分score()相关性排序

典型组合:多条件定位故障

-- 5 种算子组合:TERM + PHRASE + RANGE + NOT + IN
WHERE search('
  level:ERROR 
  AND error_msg:"connection refused" 
  AND latency:[500 TO *] 
  AND NOT module:healthcheck 
  AND host:IN(gpu-node-01 gpu-node-02 gpu-node-03)
')

五种算子编译成一棵查询树,逐行推进求值,支持 AND 短路优化。

BM25 打分排序

SELECT request_id, error_msg, score() AS score
FROM inference_logs
WHERE search('error_msg:"memory allocation failed" OR error_msg:"CUDA error"')
ORDER BY score DESC
LIMIT 20;

score() 列直接暴露 BM25 相关性评分(IDF 加权 + 文档长度归一化),配合存储层 TopN 打分优化,无需全量结果上传到上层排序。

嵌套 JSON 搜索

-- steps 是一个 VARIANT 类型数组,NESTED 算子可穿透检索
WHERE search('NESTED(steps, status:error AND tool:code_exec)')

无需将 JSON 拆分成多张表,无需额外的 ETL 管道。

与 SQL 分析混用

-- search + JOIN:定位 OOM 错误,关联模型配置
SELECT l.request_id, l.error_msg, m.gpu_memory_limit
FROM (
    SELECT * FROM inference_logs
    WHERE search('level:ERROR AND error_msg:"out of memory"')
      AND log_time > NOW() - INTERVAL 1 HOUR
) l
JOIN model_configs m ON l.model_name = m.model_name;

-- search + 窗口函数:追踪错误趋势
SELECT 
    model_name,
    DATE_TRUNC('hour', log_time) AS hour,
    COUNT(*) AS error_count,
    LAG(COUNT(*)) OVER (
        PARTITION BY model_name ORDER BY DATE_TRUNC('hour', log_time)
    ) AS prev_hour_errors
FROM inference_logs
WHERE search('level:ERROR')
  AND log_time > NOW() - INTERVAL 24 HOUR
GROUP BY model_name, DATE_TRUNC('hour', log_time);

核心价值:search() 是一个普通 WHERE 谓词,直接参与 JOIN、聚合、窗口函数、子查询。


search() vs 多个 MATCH:为什么更快?

以一个同时过滤 4 个字段的日志查询为例:

-- 传统 MATCH:每个条件独立求值,各自生成 bitmap
WHERE level MATCH_ANY 'ERROR'
  AND module MATCH_ANY 'inference'
  AND error_msg MATCH_PHRASE 'CUDA out of memory'
  AND context MATCH_ANY 'gpu'

-- search():编译成查询树,统一求值
WHERE search('level:ERROR AND module:inference AND error_msg:"CUDA out of memory" AND context:gpu')

MATCH 的执行路径:

MATCH_ANY 'ERROR'       → bitmap A(可能百万级)
MATCH_ANY 'inference'   → bitmap B
MATCH_PHRASE 'CUDA...'  → bitmap C
MATCH_ANY 'gpu'         → bitmap D
最终 = A ∩ B ∩ C ∩ D     ← 4 次交集运算 + 4 次 IndexReader 加载

search() 的执行路径:

  • 逐行推进,AND 短路:第一个条件匹配行 #100 → 第二个条件直接跳到 #100 检查,不匹配则跳过,无需物化中间 bitmap
  • 共享 IndexReader:多字段复用已打开的 reader 实例,无重复加载开销
  • DSL 级别缓存:以整个 DSL 字符串为缓存 key,命中率更高

结论:条件越多、数据分布越倾斜,search() 的性能优势越明显。


从 Elasticsearch 迁移指南

第一步:建表 + 索引映射

ES MappingSelectDB 列定义
"type": "text"TEXT + INDEX ... USING INVERTED
"type": "keyword"VARCHAR + INDEX ... USING INVERTED
"type": "long"BIGINT
"type": "date"DATETIME

第二步:查询改写

- GET /logs/_search
- { "query": { "query_string": { "query": "level:ERROR AND error_msg:\"timeout\"" } } }

+ SELECT * FROM logs
+ WHERE search('level:ERROR AND error_msg:"timeout"')

大部分查询仅需将 REST API 改成 SQL WHERE,DSL 语法不变。

第三步:迁移收益

维度Elasticsearch + ClickHouseSelectDB search()
存储成本倒排 + 正排 + 副本,膨胀 2-3 倍倒排 + 列存独立压缩,整体降 50%
运维复杂度两套集群 + 同步链路一套集群
查询延迟分钟级(需跨系统搬运数据)秒级(同一引擎内完成)
语法学习成本需掌握 ES DSL + SQL只需 SQL

可复用优化 Checklist

  • 建表时打开 V3 倒排索引格式:"inverted_index_storage_format" = "V3",减少约 20% 索引体积
  • 对高频搜索字段加倒排索引:level、error_msg、context、model_name 等
  • 短语匹配字段设置 support_phrase = "true":对涉及 "..." 精确匹配的字段必须开启
  • 使用 search() 替代多个 MATCH 谓词:条件数 ≥ 3 时性能优势明显
  • 对 JSON 嵌套字段使用 VARIANT 类型 + NESTED 算子:无需拆表、无需 ETL
  • 利用 BM25 打分 + score() 排序:替代手工相关性排序逻辑
  • parser = "unicode" 处理中英文混合分词:无需额外安装分词器
  • 迁移 ES 查询时仅改 REST API → SQL WHERE:DSL 语法完全兼容
  • 按需增删索引,无需停服:先导数据,后续针对性加索引

关于 Apache Doris:Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询,广泛应用于报表分析、Ad-hoc 查询、统一数仓等场景。SelectDB 是 Apache Doris 的商业化公司,提供企业级支持和云服务。欢迎加入 Doris 社区 交流更多实践。

Agent Memory 工程实践 :用 Go + PostgreSQL 构建可证明、可撤销的长期记忆 状态对外含义必需证据revoked删除事务已提交;新权威复核排除旧代主库 Epoch 与删除请求在线存储和派生载体完成清理每个 carrier 的 purge receipt备份、日志、导出和模型服务等已到期或完成适用清理保留策略与外部系统记录“24 小时”只能是经验证的产品目标,不能泛化成法律或物理擦除保证。API 应返回请求 ID、当前状态、已覆盖与未覆盖范围,而非一个含混的success。删除事件到达后,标记相关工作集失效。 阅读详情

相关推荐

处理图数据, 安装“Pytorch“ + 图神经网络开源框架“PyG “+ “ogb“使用

"OGB" OSError: [WinError 127] 找不到指定的程序。1.[遇到这类问题往往跟torch安装的工具包(如torch-sparse,torch-scatter,torch-cluster)版本没对应上有关](https://blog.youkuaiyun.com/weixin_42358688/article/details/117433691)2.[OGB使用环境安装与依赖](https://ogb.stanford.edu/docs/home/)Data Loaders3.[torch-geo

Fuguir™的博客 3698

从两套系统到一条 SQL:SelectDB search() 搞定日志的搜索与分析

传统的日志分析方案,往往是一条数据同步链路连接着两个世界:Elasticsearch 负责搜索,OLAP 引擎负责分析。两套系统各自独立部署,存储冗余、运维复杂、版本升级相互牵制,数据一致性存在隐患。而 SelectDBsearch()的出现,让这一切变得简单起来。同一份数据,倒排索引负责筛选,MPP 引擎负责计算,搜索与分析在同一个引擎内无缝融合。search()集成了 15 种查询算子、BM25 相关性打分、嵌套数组搜索、多字段跨字段检索等原本需要搜索引擎才能提供的丰富功能。

SelectDB 601

CentOS7下Graylog3.0高效日志管理:从零搭建到实战应用

本文详细介绍了在CentOS7操作系统上从零开始搭建Graylog3.0日志管理平台的完整过程。内容涵盖Java环境准备、MongoDB与Elasticsearch依赖安装、Graylog Server核心配置,并实战演示了通过Graylog Sidecar集中管理日志采集器以及配置邮件告警功能,为中小型团队提供了一个比ELK更轻量、易维护的一体化日志解决方案。

weixin_29207149的博客 84

SQL并行执行的机制解析与计划调控实践

并行执行是大数据量场景的核心提速手段,但用错代价极高。本文从问题边界讲起,梳理并行度的确定层级、优化器生成并行计划的逻辑、数据再分布与通信代价、倾斜成因与识别方法,覆盖表设计、索引策略、并行DML、RAC调度与参数取舍,配合三个真实失败案例与诊断步骤,给出一套可落地的并行治理流程与误区清单。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 592

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

51单片机基础知识

前言 周末闲着无聊,以后定时更新一期关于51单片机的学习案例,以供大家平时参考使用。至于单片机,你可以理解为人的大脑,而人各项身体器官的运作需要意识给到大脑,然后大脑再驱动我们的中枢神经进行相应的动作,这里的意识可以理解为我们要写的程序,而人的器官相当于各种输出设备,例如我们以后要学的LED、电机、各种传感器等等。学好单片机能让你找到一份相对不错的工作,当然越可观的东西也是要付出相应努力的。 一、51单片机是什么? 通常我们一说到 51 单片机,指的都是兼容IntelMCS-51体系架构的一系列单片机,而

qq_43537819的博客 6903

Flink SQL 连接器实战:MySQL Source、Flink CDC 与 JDBC Sink 全解析

提供有界流读取,适合批处理和维表场景,简单直接但无法感知变更。MySQL CDC提供无界流读取,通过「全量快照 + binlog 增量」的方式实现实时捕获,是实时数仓的核心入口,但需要 MySQL 侧正确配置 binlog 和权限。JDBC Sink负责结果回写,关键在于区分仅插入流和更新流,更新流必须依赖主键完成 upsert。掌握这三者的差异,本质上就是掌握了 Flink 中「有界与无界」「追加与更新」这两组最基本的语义。

2401_83857914的博客 421

Mac版 Android Studio自带模拟器无法联网解决方案

前言 作为一枚安卓开发者,免不了使用模拟器来开发调试(毕竟它比手机方便太多)。但是因为适配需要,我们会更多的使用真机开发调试,那么当模拟器遇到这样那样的问题,我们往往会无从下手,其中最烦的就是网络问题。 我最近图方便,又重新用起了模拟器,但是发现联网失败,用模拟器内置的浏览器也打不开网页,于是百度上一通找,毫无效果,各种说用cmd命令行设置模拟器dns的都没用,显示没有什么dns文件啥的,后来...

陈万洲的专栏 1万+

云数仓向PostgreSQL生态延伸的技术动因与工程代价

Snowflake以2.5亿美元收购Crunchy Data,把云数仓的触角伸向PostgreSQL生态。本文从负载补齐、元数据标准化与AI应用低延迟读写三个切面拆解收购动机,逐层分析列存与行存的能力边界、存算分离下引入事务负载的提交延迟预算、逻辑复制的接缝风险、元数据统一与混合负载隔离冲突,并给出迁移落地的分阶段验收清单与七个典型误区,最后提供评估厂商PostgreSQL能力的六项观察指标。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 393

ppt保存时嵌入字体,但找不到字体使用的位置的解决办法

摘要 当PPT提示无法保存嵌入字体时,可通过VBA代码快速定位使用该字体的文本。具体步骤如下: 按ALT+F11打开VBA编辑器,新建模块并粘贴提供的代码; 运行代码后输入目标字体名称(如“方正兰亭黑简体”); 程序将列出所有使用该字体的幻灯片编号及对应文本内容; 修改这些文本的字体即可解决保存问题。该方法高效精准,适用于排查PPT字体嵌入失败的情况。(150字)

智慧空间实验室 1396

流体动力学仿真软件:CFX_(10).案例实践:复杂流场分析

在“Phases”选项卡中,定义参与仿真的不同相。例如,如果您要分析气液两相流,可以定义“Air”和“Water”两个相。

kkchenjj的博客 1683

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 393

高熵合金AlCoCrFeNi/金刚石摩擦案例代码

本文介绍金刚石与高熵合金AlCoCrFeNi摩擦的案例。 在之前的文章中,介绍过使用fix indent命令实现虚拟球的摩擦,本文介绍使用金刚石实体球实现高熵合金摩擦的方法。 主要的模拟过程如下: (1)基体建模 建使用原子替换法获得高熵合金初始模型,升温到3000K驰豫后,冷却至300K,获得平衡组织。 (2)摩擦球建模 在高熵合金平衡组织的模型中添加金刚石摩擦球,使用change_box命令扩大box尺寸,添加金刚石摩擦球,并设置混合力场。 (3)摩擦过程 摩擦球下压一定深度后,沿y方向进行摩擦,摩擦

lammps_jiayou的博客 2896

XSS 过滤器 vs SQL 注入防护:自动化测试平台中的

通过分析 AutoTest Platform 的源码可以看出,在实际开发中合理运用字符转义、参数化查询和白名单策略能够有效减少 Web 安全风险。对于非科班出身或刚刚入门的技术人员来说,理解这些安全措施的具体实现方式是非常重要的一步。建议读者可以尝试以下几个方向深入学习:1. 学习 Jsoup 库及 Whitelist API 的用法,并尝试自定义一套适用于自身项目的 HTML 清理规则;

后台模板 225

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

智能问数(Text2SQL)的两大方案及实施成本

现在流行挂个 RAG 知识库,把表结构、字段名、业务术语全向量化存起来,每次查询时现去检索相关片段喂给大模型。只做一件事,把口语化的自然语言转成有规则的自然语言,也就是“规范文本”。然后规则引擎根据预先配置好的业务词典和映射规则,把规范文本编译成 100% 准确的 SQL。核心工作量在配置业务词典,把用户爱说的“华北区”“在途订单”这些词,跟数据库表和字段对上。关键是,规则是写死的、确定的。SQL 怎么生成、逻辑怎么组合,全都写在规则里。出了问题,查规则、改词典、补映射,改完就知道对不对,没有不确定性。

Raqsoft 151

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

sqlsugar入门

sqlsugar入门

bjzhang75的博客 213

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写

SonnetDB 5.0 正式发布,系统介绍相对 4.0 的 SQL、事务、精确类型、九模型 MCP、.NET 接入、查询优化、可靠性修复与升级步骤。

麦壳饼 354

PostgreSQL 日报| pg_basebackup 提速至 23Gbps(11 月 5 日)

这一案例展示了按需、可弹性扩展的数据库供给如何满足 AI 辅助开发场景的需求,也说明 Neon 在多智能体与多用户并…Neon 的实际使用数据显示,AI agent 在选择工具时,即便内部逻辑建议使用 CLI,仍会优先选择 MCP server。然而,批评人士指出,该倡议同样服务于 OpenAI 自身的商业利益,意在将公司议程嵌入重大选举周期前的政治生态。用户可将其与平台上 70 余个其他模型配合使用,直接调用 Lakehouse 中的现有数据,构建受治理的 AI 应用与智能体。每个哈希条目存储两个有…

IvorySQL的博客 232

4-1 PostgreSQL 索引体系总览:B-tree|GIN|GiST|BRIN|SP-GIST

很多新手拿到 PG 就无脑加 B-tree,遇到 JSONB、空间、时序数据直接踩坑。PG 不是只有 B-tree,5 种主流索引各司其职,**没有万能索引,匹配查询模式才是核心**。本文带你看懂每一类索引的原理、适用场景、优缺点、SQL 示例,最后重点讲清楚:索引不是越多越好。

zhangjw34的专栏 346

PostgreSQL 日报|子表 CHECK 约束恢复标记错误(11 月 2 日)

另外两个补丁 v5-0002 和 v5-0003 针对 PG18 中的同类问题,但涉及一个权衡:pg_dump 在恢复时可能将子表继承的 CHECK 约束的 pg_constraint.conislo…Rune 专注于 AI 驱动的物流解决方案,此次收购标志着 Salesforce 在国防领域的野心进一步扩大,也是其借助并购提升 AI 竞争力整体战略的重要一步。与此同时,市场对 AI 行业高额支出可持续性的担忧持续升温,资本压力与投资者的审慎情绪正为这家全球知名 AI 公司的前景蒙上阴影。

IvorySQL的博客 194

Day33 XD安全学习笔记--JavaEE应用&SQL 预编译&Filter过滤器&Listener监听器&访问控制

本文介绍了SQL预编译与Filter过滤器、Listener监听器的应用。SQL预编译有效防止注入攻击,相比拼接写法更安全。Filter用于拦截请求与响应,实现权限控制、敏感词过滤等功能,具备初始化、过滤、销毁生命周期;如XssFilter拦截非法参数,AdminFilter通过Cookie验证权限。Listener监听域对象的创建、销毁及属性变化,如Session的创建与销毁,实现系统状态管理。三者协同提升Web应用的安全性与可维护性。

一支蜉蝣的博客 195

SQL Pagination and Limiting Results using Oracle 21c

本文基于Oracle 21c在八域中台万亿级交易数据场景下,系统探讨分页与结果限制的优化实践。针对深翻页性能、OFFSET漂移、高并发一致性等痛点,对比分析OFFSET/FETCH与键集分页(keyset/seek)的适用性,提出分区裁剪、复合键锚点、UTC时区统一、多币种归一化处理等关键策略。结合自检验证,实现稳定、快速、用户友好的分页体验,为高并发、大容量国际业务系统提供可落地的技术方案。

Geovin Du Dream Park 299

PostgreSQL 日报|PG 19 发布公告草稿(11 月 8 日)

AgensGraph 2.18 基于 PostgreSQL 18.6 构建,在继续支持 openCypher 的同时,新增了对 ISO GQL 标准(ISO/IEC 39075)的扩展支持,引入了 LET、FOR、FILTER、NEXT、FINISH、INSERT 等子句以及图子查询功能。描述为"让用户向查询规划器提供自己的指导"并不准确,该扩展的设计初衷是计划稳定性,而非提示(hint)机制,应避免给人"给 Postgres 提示"的印象。在循环中途分配失败,该指针将指向一个部分初始化的对象。

IvorySQL的博客 176

SQL中的students是表名还是文本?关键字、标识符、常量与注释规则

表名加单引号为何变成文本?区分SQL中的标识符与常量,再看分号、引号和注释边界如何影响mysql客户端执行。 #MySQL #关键字 #标识符 #常量 #SQL注释 #SQL

tydldd的专栏 142

16-SqlSugar多库ConfigId与按实体选连接

通过 ConfigId 注册多库连接,结合实体特性标记库类型,实现按实体自动选择数据库。启动时扫描实体并警告未声明库的类型,运行时通过 GetConnectionScope 按逻辑名获取连接,确保连接生命周期与请求绑定。避免业务代码硬编码连接串,提升可维护性与安全性,但需注意跨库写操作无本地事务,应合理设计数据一致性策略。

CAthlete的博客 265
上一篇: Apache Doris 实战:AI Observe Stack 搭建 AI Agent 可观测性系统
下一篇: Apache Doris 实战:SelectDB 技术研发型企业认证背后的核心技术能力
SelectDB技术团队
博客等级 码龄4年 2119粉丝 483原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SelectDB技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值