共 112 篇文章
向量数据库检索原理:从 Embedding 到最近邻搜索
在 AI 时代,向量数据库是 RAG(检索增强生成)系统的核心基础设施。但它究竟是如何工作的?为什么能实现"语义搜索"而非传统的关键词匹配?本文用通俗的方式解释其背后的原理。
基于 Elasticsearch 标签的推荐系统设计
背景
在内容平台中,如何让用户快速找到感兴趣的知识是一个核心问题。基于标签的推荐是一种简单而有效的方案——通过分析用户的兴趣标签,与知识内容的标签进行匹配,实现个性化的内容推荐。Elasticsearch 凭借强大的倒排索引和灵活的查询能力,成为构建标签推荐系统的理想选择。本文将介绍一种基于 Elasticsearch 标签的推荐系统设计方案,涵盖标签匹配、用户画像构建、以及推荐算法的实现。
Go 并发进阶:WaitGroup vs ErrGroup 详解
Go 语言提供了丰富的并发原语,本文详细介绍 sync.WaitGroup 和 golang.org/x/sync/errgroup 的区别和使用场景。
简介
Go 的并发模型以 goroutine 和 channel 为核心,但在实际项目中,我们经常需要协调多个 goroutine 的执行。这就涉及到两组常用的工具:
- sync.WaitGroup:Go 标准库,简单同步
- errgroup:Go 扩展库,功能更强大
基于 LangChain 的结构化输出实践
在 AI 应用开发中,让大模型稳定地输出我们想要的格式是一个常见需求。本文介绍如何使用 LangChain 的 Golang 版本 langchaingo 实现 Prompt Template,并结合主流 LLM 的 JSON Mode 实现可靠的结构化输出。
什么是 Prompt Template
Prompt Template 是将提示词模板化的技术,通过占位符动态注入变量,让同一套提示词可以处理不同输入。类似于 Web 开发中的模板引擎。
另辟蹊径的 MySQL 慢查询优化
做业务开发的同学,大概都有过被 MySQL 慢查询折磨的经历——明明索引建了、数据量也不大,接口却总是超时。常规的加索引、加缓存套路固然有效,但有时候换个思路反而能四两拨千斤。本文整理了项目中几个真实慢查询案例的优化思路,部分方案稍显「偏门」,但亲测有效。
MySQL vs Elasticsearch:使用场景深度解析
在做系统设计时,数据库选型是一个关键决策。MySQL 和 Elasticsearch 是两种不同定位的存储方案,今天结合实际项目经验,系统性地对比一下它们的适用场景。
MySQL 和 Elasticsearch 的定位差异
| 特性 | MySQL | Elasticsearch |
|---|---|---|
| 定位 | 关系型数据库 | 分布式搜索和分析引擎 |
| 数据结构 | 行存储,B+树索引 | 倒排索引,文档型 |
| 擅长 | 事务、关联查询、结构化数据 | 全文搜索、聚合分析、海量数据 |
| 数据模型 | Table(表) | Index(索引),Document(文档) |
MySQL 死锁:根源剖析与线上治理实战
在分布式高并发的后端架构中,数据库死锁(Deadlock)就像一个幽灵。尽管 InnoDB 引擎具备全自动的自救回滚机制,但频繁出现的死锁报错(错误码 1213)不仅会吞噬系统吞吐量,更是代码健壮性不足的显性信号。本文去掉生活化的类比,直接从资源竞争的结构本质出发,层层递进地拆解 MySQL 死锁的底层逻辑。
gRPC HTTP Transcoding 注解详解
背景问题
gRPC 以其高效的二进制序列化(Protocol Buffers)和强大的流式通信能力,已成为微服务间通信的主流选择。但在实际项目中,我们常常面临一个尴尬的局面:
- 内部服务用 gRPC 通信,高性能
- 对外开放 API 需要提供 HTTP/RESTful 接口,方便前端和其他语言调用
- 维护两套服务成本太高
有没有一种方式,可以让 同一个 gRPC 服务同时支持 gRPC 协议和 HTTP/RESTful 调用?
这就是 gRPC HTTP Transcoding 要解决的问题。
DDD 分层架构的依赖关系
DDD(领域驱动设计)架构中,Infrastructure 层可以依赖 Domain 层吗?
答案是:可以,而且在现代 DDD 架构实践中,Infrastructure 依赖 Domain 是推荐的做法。
但这需要区分两种不同的分层架构模型来理解。
深入理解 Redis 事务与原子性
Redis 事务是一组命令的集合,通过 MULTI 和 EXEC 命令来执行。事务中的所有命令都会序列化,按顺序串行执行,不会被其他命令插入。本文深入解析 Redis 事务的特性和原子性问题。
Laravel Redis::throttle 限流组件解析
在调用第三方 API 时,经常会遇到 QPS 限制。如果请求频率超过限制,API 会返回错误。此时我们需要限流 + 重试机制来保护下游服务。
本文详细介绍 Laravel 中 Redis::throttle 的实现原理。需要注意的是:Laravel 的实现实际上是固定窗口计数器,而非标准的令牌桶算法。
本周阅读清单 20191130
Uber 的 Go 指导规范
https://github.com/uber-go/guide/blob/master/style.md使用 JWT 保证服务间通信的安全
https://abekthink.github.io/backend/json-web-token/MySQL 查询对大小写不敏感
https://www.jianshu.com/p/408daf82ac71服务流量限制(漏桶、令牌桶)
https://chai2010.cn/advanced-go-programming-book/ch5-web/ch5-06-ratelimit.html为什么推荐 InnoDB 引擎使用自增主键?
https://blog.csdn.net/zheng0518/article/details/76302167MySQL 唯一性索引与 NULL 字段
https://yemengying.com/2017/05/18/mysql-unique-key-null/
本周阅读清单 20190808
PHP 正则 preg_match 匹配长度限制
https://learnku.com/articles/7193/php-regular-preg-match-matching-length-limit深悉正则(pcre)最大回溯/递归限制
http://www.laruence.com/2010/06/08/1579.htmlRedis 的内存优化
https://cachecloud.github.io/2017/02/16/Redis内存优化Content-Disposition 的 filename 与 filename 区别*
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-DispositionRedis Scan 命令原理
https://segmentfault.com/a/1190000018218584Redis 字典的遍历 dictScan 算法
http://www.langdebuqing.com/redis%20notebook/redis源码解读:字典的遍历dictScan.html