Skip to main content

数据库基础

info

了解不同数据库的特点和适用场景,而不必深入底层实现。重点关注:数据存储、向量检索、缓存管理。

快速入门SQL

SQL(结构化查询语言)是操作关系型数据库的标准语言。不同数据库的SQL语法90%相同,学会一种即可触类旁通。

推荐学习资源

常用SQL速查

-- 查询
SELECT * FROM table WHERE condition ORDER BY column LIMIT 10;

-- 插入
INSERT INTO table (col1, col2) VALUES (val1, val2);

-- 更新
UPDATE table SET col1 = val1 WHERE condition;

-- 删除
DELETE FROM table WHERE condition;

-- 连接查询
SELECT * FROM table1 JOIN table2 ON table1.id = table2.id;

常用数据库选择指南

关系型数据库 - PostgreSQL

推荐用于:结构化数据存储、复杂查询、向量检索(pgvector)

核心特点

  • 支持JSON、数组等丰富数据类型
  • pgvector扩展:向量存储和相似度搜索
  • 完整的ACID事务支持
  • 性能稳定,适合复杂查询

快速上手

-- 安装pgvector扩展进行向量检索
CREATE EXTENSION vector;

-- 创建带向量字段的表
CREATE TABLE embeddings (
id serial PRIMARY KEY,
text text,
embedding vector(1536) -- OpenAI embedding维度
);

-- 查询最相似的向量
SELECT text FROM embeddings
ORDER BY embedding <-> '[0.1,0.2,...]'::vector
LIMIT 5;

参考资源


文档数据库 - MongoDB

推荐用于:非结构化数据、日志存储、快速原型开发

核心特点

  • 存储JSON格式文档,灵活的schema
  • 水平扩展能力强
  • 适合存储对话历史、用户画像等动态数据

典型应用场景

  • 聊天机器人对话记录
  • 用户行为日志
  • 配置文件和元数据

Python快速使用

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['ai_app']

# 存储对话历史
db.conversations.insert_one({
'user_id': 'user123',
'messages': [
{'role': 'user', 'content': '你好'},
{'role': 'assistant', 'content': '你好!有什么可以帮助你的吗?'}
],
'timestamp': '2024-01-01'
})

内存数据库 - Redis

推荐用于:缓存、会话管理、实时排行榜

核心特点

  • 微秒级响应速度(内存存储)
  • 支持多种数据结构:String、List、Set、Hash、Sorted Set
  • 适合做缓存、消息队列、API限流

常用数据类型

类型说明典型场景
String键值对缓存数据、Token存储
Hash字典用户会话信息
List队列消息队列、任务列表
Sorted Set有序集合排行榜、延时队列

Python示例

import redis

r = redis.Redis(host='localhost', port=6379)

# 缓存数据
r.setex('cache:key123', 3600, '缓存内容') # 1小时过期

# 获取缓存
cached = r.get('cache:key123')

持久化方式

  • RDB:定期快照(默认)
  • AOF:记录每次写操作(更安全但稍慢)

向量数据库

推荐用于:Embedding存储、语义搜索、相似度检索

向量数据库是专门用于处理高维向量数据的数据库系统。

什么是向量数据库?

向量数据库专门用于存储和检索高维向量数据(如文本、图像的embedding),支持快速的相似度搜索。

核心能力

  • 存储高维向量(通常512-4096维)
  • 向量相似度搜索(余弦相似度、欧氏距离等)
  • 支持百万到亿级向量的快速检索

主流向量数据库对比

数据库类型特点推荐场景
pgvectorPostgreSQL扩展成熟稳定、与SQL无缝集成中小规模、需要事务支持
Pinecone云服务托管服务、开箱即用快速原型、不想自己运维
Milvus专用向量库高性能、支持大规模大规模生产环境
Chroma轻量级易用、适合开发测试本地开发、小型项目
Qdrant专用向量库Rust开发、性能好需要高性能的场景

快速示例:使用pgvector

import psycopg2
from openai import OpenAI

# 连接数据库
conn = psycopg2.connect("dbname=mydb user=myuser")
cur = conn.cursor()

# 获取文本的embedding
client = OpenAI()
text = "人工智能是什么?"
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
embedding = response.data[0].embedding

# 存储向量
cur.execute(
"INSERT INTO documents (content, embedding) VALUES (%s, %s)",
(text, embedding)
)

# 语义搜索:找到最相似的5条记录
query_embedding = client.embeddings.create(
model="text-embedding-3-small",
input="AI的定义"
).data[0].embedding

cur.execute("""
SELECT content, embedding <-> %s::vector AS distance
FROM documents
ORDER BY distance
LIMIT 5
""", (query_embedding,))

results = cur.fetchall()
for content, distance in results:
print(f"{content} (相似度: {1-distance:.3f})")

核心概念速查

ACID vs BASE

ACID(关系型数据库):

  • Atomicity:原子性 - 事务全部成功或全部失败
  • Consistency:一致性 - 数据符合约束规则
  • Isolation:隔离性 - 并发事务互不干扰
  • Durability:持久性 - 提交后永久保存

BASE(NoSQL数据库):

  • Basically Available:基本可用
  • Soft-state:软状态(允许短暂不一致)
  • Eventually Consistent:最终一致性

事务隔离级别(从低到高)

隔离级别脏读不可重复读幻读性能
Read Uncommitted最快
Read Committed
Repeatable Read(MySQL默认)
Serializable
实践建议
  • 大部分场景使用Read Committed即可
  • 需要强一致性时使用Repeatable Read
  • 高并发场景可以接受最终一致性,选NoSQL

总结:如何选择数据库?

典型应用场景推荐

应用场景推荐数据库理由
语义搜索PostgreSQL + pgvector结构化数据 + 向量检索一体化
聊天应用MongoDB + Redis灵活schema存对话 + Redis缓存
推荐系统Redis + PostgreSQLRedis实时推荐 + PG存用户数据
全文检索Elasticsearch/Milvus专业检索性能优
内容管理PostgreSQL事务支持 + 复杂查询
实时缓存Redis毫秒级响应速度

快速决策流程

开始

需要向量搜索?
├─ 是 → 数据量 < 100万?
│ ├─ 是 → pgvector(推荐)
│ └─ 否 → Milvus/Qdrant

└─ 否 → 数据结构化?
├─ 是 → 需要事务?
│ ├─ 是 → PostgreSQL
│ └─ 否 → SQLite(小型)

└─ 否 → 需要缓存/高速读写?
├─ 是 → Redis
└─ 否 → MongoDB

技能建议

根据项目需求,建议掌握:

  1. 优先掌握:PostgreSQL(含pgvector)+ Redis
  2. 推荐了解:MongoDB、向量数据库(Pinecone/Chroma)
  3. 了解即可:MySQL、SQLite
学习路径
  • 2小时:完成SQLBolt SQL教程,掌握基础语法
  • 半天:动手搭建 PostgreSQL + pgvector
  • 1天:实践一个完整的数据库应用
  • 长期:在项目中积累经验,根据需求深入学习

你不需要成为数据库专家,但要能快速选择合适的工具并用起来。

推荐资源