实测谷歌Gemini与Qwen数据库内核开发
本期播客
Gemini CLI 对比 Qwen3 Coder 谁更强?
为什么不用Cursor? Claude? 我不是专业程序员, 不需要每天干编程的事, 只是偶尔用一下的话, 简单部署、功能有一班班即可.
所以我选择 Qwen3 Coder 或 Gemini CLI .
这两个工具都可以很好的在 macOS 或 Linux 命令行中完成AI 编程任务.
gemini cli 刚刚出来的时候, 当时模型的AI能力一般般, 只能说还是玩具级别吧.
后来Qwen3 Coder出来了, 和gemini cli开源项目高度相似, 所以用起来没什么适应成本, 很快就可以上手, 只是背后的模型换成了qwen3 coder专门的编程模型. 我在下面的镜像中进行了安装和体验. 使用Qwen3 Coder来编写 pgvector 8bit 量化的 tinyintvec 向量类型.
《大学生数据库实践课: Docker 镜像》
体验过程中感觉 Qwen3 Coder 还有巨大的改进空间. 但是看在 Qwen3 Coder 每天提供2000次免费请求的份上, 忍了.
于是乎又回过头来想看看在同样的 “编写 pgvector 8bit 量化的 tinyintvec 向量类型” 任务下, gemini cli 的表现如何?
https://google-gemini.github.io/gemini-cli/
依旧使用以上容器, 安装gemini cli
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
npm install -g @google/gemini-cli@latest
给 gemini 添加 deepwiki mcp
gemini mcp add deepwiki https://mcp.deepwiki.com/mcp --scope user --transport http
启动 gemini
gemini
然后下面是我的 prompt , 甚至这次我直接跳过了让 gemini 参考 pgvector tinyint 分支, 而是让它直接开干.
> 我正在使用 `pgvector/pgvector` 下面进行开发, deepwiki 是编程助手, 可以按需生成代码、检查代码、解答各种代码问题. 请按需调用 deepwiki mcp 工具来了解这个项目.
参考 @pgvector/src/halfvec.c @pgvector/src/halfvec.h @pgvector/src/halfutils.c @pgvector/src/halfutils.h @pgvector/sql/vector.sql
在 @pgvector/ 代码库的 tinyint_vector 分支中实现 tinyintvec 类型.
要求如下:
使用 8 bit 存储向量的每个维度值, 取值区间 -128 到 127 ;
实现 hnsw 和 ivfflat 索引, 支持 tinyintvec_l2_ops, tinyintvec_l1_ops, tinyintvec_ip_ops, tinyintvec_cosine_ops, 以及对应的操作符 ; (给 tinyintvec 字段创建索引时, 要跳过 NULL 向量值, 不能报错.)
注意 tinyintvec_cosine_ops 因为要 normal 化, 记得遇到 NULL 值时要处理除0问题.
修改对应的 @pgvector/Makefile , @pgvector/sql/vector.sql ;
记得在 @pgvector/sql/vector.sql 要创建 tinyintvec 对应的 ivfflat 和 hnsw 的 support 函数.
新增的SQL代码必须放到 @pgvector/sql/vector.sql 末尾.
回归测试采用 @tinyintvec.sql
注意, 如果回归测试过程中遇到数据库崩溃重启的问题, 说明你新增的代码有问题, 一定要解决问题直到回归测试全部正常.
注意, 回归测试中符合预期的 ERROR 不需要处理, 确认 pgvector/test/sql/tinyintvec.sql 输出都符合预期(该使用索引的必须使用索引, 索引的结果必须和全表扫描的结果一致)后, 将其结果写入 pgvector/test/expected/tinyintvec.out
数据库已安装好, pg_config 也已经在 PATH 变量中功能, 直接使用 USE_PGXS=1 make clean && USE_PGXS=1 make distclean && USE_PGXS=1 make && USE_PGXS=1 make installcheck 就可以进行测试 .
Tips: 退出后如何继续之前的会话?
/resume session_id
结果到底如何呢?
Gemini 2.5 Pro 和 Qwen3 Coder 谁的编程能力更强?
Gemini 2.5 Pro 和 Qwen3 Coder 模型在c语言、数据库内核、PostgreSQL、向量数据库领域编程方面谁更强?
最近在用AI给 pgvector 添加 tinyintvec 向量类型.
Qwen3 Coder 在体验方面更强, 例如展示了任务规划, 开发进度, 剩余上下文coder-model (92% context left)等.
✦ Now I'll create a todo list to track the implementation of the tinyintvec type:
╭──────────────────────────────────────────────────────────────────────────────╮
│ ✓ TodoWrite Create todos │
│ │
│ ○ Create tinyintvec.h header file with the Tinyintvec struct definition │
│ ○ Create tinyintvec.c implementation file with input/output functions │
│ ○ Add distance functions for tinyintvec (L2, L1, IP, cosine) │
│ ○ Modify Makefile to include tinyintvec in compilation │
│ ○ Update vector.h to include tinyintvec references │
│ ○ Create HNSW support functions for tinyintvec │
│ ○ Create IVFFlat support functions for tinyintvec │
│ ○ Add tinyintvec to the SQL extension file │
│ ○ Create test file test/sql/tinyintvec.sql │
│ ○ Run regression tests and fix any issues │
╰──────────────────────────────────────────────────────────────────────────────╯
✦ Let me start by creating the header file for tinyintvec:
╭──────────────────────────────────────────────────────────────────────────────╮
│ ✓ TodoWrite Update todos │
│ │
│ ◐ Create tinyintvec.h header file with the Tinyintvec struct definition │
│ ○ Create tinyintvec.c implementation file with input/output functions │
│ ○ Add distance functions for tinyintvec (L2, L1, IP, cosine) │
│ ○ Modify Makefile to include tinyintvec in compilation │
│ ○ Update vector.h to include tinyintvec references │
│ ○ Create HNSW support functions for tinyintvec │
│ ○ Create IVFFlat support functions for tinyintvec │
│ ○ Add tinyintvec to the SQL extension file │
│ ○ Create test file test/sql/tinyintvec.sql │
│ ○ Run regression tests and fix any issues │
╰──────────────────────────────────────────────────────────────────────────────╯
✦ Let me first examine the existing vector.h file to understand the pattern:
Gemini 目前支持 2.5 和 3(preview) 模型, 支持自动更换模型, 支持死循环检测(如果遇到脑回路卡壳的问题, 会询问你是否要终止当前循环)等.
先说一下, 截至目前, 都没有交付满意的代码.
下面是 AI 给出的两者的对比.
在 C 语言、数据库内核(如 PostgreSQL)以及向量数据库这类底层、硬核且对逻辑严密性要求极高的编程领域,Gemini 2.5 Pro 和 Qwen3-Coder (480B旗舰版) 展现出了截然不同的优势。
以下是针对你提到的四个细分领域的深度对比分析:
1. C 语言与底层编程 (Low-level Programming)
Gemini 2.5 Pro (优势:逻辑推理与内存安全):
Gemini 2.5 引入了“集成推理架构”(Integrated Reasoning),在处理 C 语言的指针操作、内存分配和死锁分析时,表现得更像一个经验丰富的架构师。它在编写涉及并发(pthreads)和系统调用(System Calls)的代码时,逻辑瑕疵更少。Qwen3-Coder (优势:代码完备性与工程经验):
Qwen3 基于 7.5T tokens 的海量数据训练,其中代码占比极高。它在 C 语言的常用库函数封装、Makefile 编写以及标准 C 代码生成上非常流畅。
结论: 如果是写简单的 C 逻辑,Qwen3 更快;如果是处理复杂的内存泄露排查或高并发逻辑,Gemini 2.5 Pro 胜出。
2. 数据库内核开发 (Database Kernel)
数据库内核涉及复杂的 B-Tree 索引逻辑、WAL(预写日志)以及 Buffer Pool 管理。
Gemini 2.5 Pro (核心优势:超长上下文):
内核开发最痛苦的是理解模块间的耦合。Gemini 拥有 100 万(甚至 200 万) 的上下文窗口,你可以把整个数据库的小型子系统(如整个存储引擎的头文件和核心源码)全部喂给它。它能理解跨文件的调用链,这在分析内核 Bug 时是降维打击。Qwen3-Coder (核心优势:算法实现):
Qwen3 在执行具体的算法实现(如实现一个特定的排序算法或哈希索引优化)时,由于经过了大量的强化学习(RL),生成的代码往往在单文件层面非常稳健。
结论: 在理解复杂代码库架构方面,Gemini 2.5 Pro 完胜;在编写具体算法模块时,两者旗鼓相当。
3. PostgreSQL 深度定制
PostgreSQL 拥有非常独特的扩展架构(Extensions)和宏定义。
Qwen3-Coder: 在处理“标准”的 PostgreSQL 编程(如存储过程、复杂的 SQL 优化、基础的 C 扩展模板)上,Qwen3 的响应速度和准确率极高,尤其对中文开发者友好,中文注释和文档理解更透彻。 Gemini 2.5 Pro: 它更擅长解决“为什么这个 Hook 没生效”这种深层次的排查问题。由于其训练数据更新到了 2025 年初,它对 PostgreSQL 近期版本的新特性理解更深刻。
结论: 基础开发用 Qwen3;解决疑难杂症或开发深度 Hooks 插件用 Gemini 2.5 Pro。
4. 向量数据库 (Vector Databases)
这是一个结合了 AI 算法与高性能存储的新兴领域,涉及 SIMD 指令集优化、HNSW 算法等。
Gemini 2.5 Pro: 它是原生多模态模型,对向量、张量运算的数学背景理解极强。在处理向量索引的数学推导(如余弦相似度的硬件加速优化)时,其推理能力更胜一筹。 Qwen3-Coder: Qwen 系列模型本身就是大模型生态的一环,它对于主流向量数据库(如 Milvus, Pinecone, pgvector)的 API 和集成方案非常熟悉。
综合对比表
| 超长代码库理解 | ||
| 逻辑严密性 (C语言) | ||
| API 调用与集成 | ||
| 数学与底层算法 | ||
| 处理 Typos/错别字 |
最终建议
如果你是在 IDE 插件(如 Cursor, VS Code)中进行日常开发,追求快速生成 SQL 或 C 函数,Qwen3-Coder 的性价比和流畅度更高。 如果你是在重构旧内核代码、排查深层段错误 (Segment Fault) 或需要 AI 读懂整个 PostgreSQL 源码目录,请务必使用 Gemini 2.5 Pro。