Skip to content

Commit f13be21

Browse files
📝 更新文档和版本信息,提升内容一致性与实用性
- 将项目版本从1.0.2更新至1.0.3,确保依赖项的最新性。 - 删除了多个关于数据库和Python的文档,简化内容结构,提升文档的整洁性和可读性。 - 在Git、Terminal和YAML文档中进行了内容优化,增强了信息的连贯性和实用性。 - 新增SQL的基本概念,丰富了数据库相关内容,确保用户获取全面的信息。
1 parent fc255a8 commit f13be21

File tree

12 files changed

+1229
-775
lines changed

12 files changed

+1229
-775
lines changed

docs/docs/后端通识/SQL.md

Lines changed: 304 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,304 @@
1+
---
2+
sidebar_position: 8
3+
title: 数据库基础
4+
---
5+
6+
import Highlight from '@site/src/components/Highlight';
7+
8+
:::info
9+
了解不同数据库的特点和适用场景,而不必深入底层实现。重点关注:数据存储、向量检索、缓存管理。
10+
:::
11+
12+
## 快速入门SQL
13+
14+
SQL(结构化查询语言)是操作关系型数据库的标准语言。不同数据库的SQL语法90%相同,学会一种即可触类旁通。
15+
16+
**推荐学习资源**
17+
- <Highlight color="green">[SQLBolt](https://sqlbolt.com/) - 交互式SQL教程(1-2小时快速入门)</Highlight>
18+
- [W3Schools SQL](https://www.w3schools.com/sql/) - 中文入门教程
19+
- [LeetCode数据库题](https://leetcode.com/problemset/database/) - 实战练习
20+
21+
**常用SQL速查**
22+
```sql
23+
-- 查询
24+
SELECT * FROM table WHERE condition ORDER BY column LIMIT 10;
25+
26+
-- 插入
27+
INSERT INTO table (col1, col2) VALUES (val1, val2);
28+
29+
-- 更新
30+
UPDATE table SET col1 = val1 WHERE condition;
31+
32+
-- 删除
33+
DELETE FROM table WHERE condition;
34+
35+
-- 连接查询
36+
SELECT * FROM table1 JOIN table2 ON table1.id = table2.id;
37+
```
38+
39+
## 常用数据库选择指南
40+
41+
### 关系型数据库 - PostgreSQL
42+
43+
<Highlight color="green">**推荐用于:结构化数据存储、复杂查询、向量检索(pgvector)**</Highlight>
44+
45+
**核心特点**
46+
- 支持JSON、数组等丰富数据类型
47+
- **pgvector扩展**:向量存储和相似度搜索
48+
- 完整的ACID事务支持
49+
- 性能稳定,适合复杂查询
50+
51+
**快速上手**
52+
```sql
53+
-- 安装pgvector扩展进行向量检索
54+
CREATE EXTENSION vector;
55+
56+
-- 创建带向量字段的表
57+
CREATE TABLE embeddings (
58+
id serial PRIMARY KEY,
59+
text text,
60+
embedding vector(1536) -- OpenAI embedding维度
61+
);
62+
63+
-- 查询最相似的向量
64+
SELECT text FROM embeddings
65+
ORDER BY embedding <-> '[0.1,0.2,...]'::vector
66+
LIMIT 5;
67+
```
68+
69+
**参考资源**
70+
- [PostgreSQL官方文档](https://www.postgresql.org/docs/)
71+
- [pgvector GitHub](https://github.com/pgvector/pgvector)
72+
73+
---
74+
75+
### 文档数据库 - MongoDB
76+
77+
<Highlight color="blue">**推荐用于:非结构化数据、日志存储、快速原型开发**</Highlight>
78+
79+
**核心特点**
80+
- 存储JSON格式文档,灵活的schema
81+
- 水平扩展能力强
82+
- 适合存储对话历史、用户画像等动态数据
83+
84+
**典型应用场景**
85+
- 聊天机器人对话记录
86+
- 用户行为日志
87+
- 配置文件和元数据
88+
89+
**Python快速使用**
90+
```python
91+
from pymongo import MongoClient
92+
93+
client = MongoClient('mongodb://localhost:27017/')
94+
db = client['ai_app']
95+
96+
# 存储对话历史
97+
db.conversations.insert_one({
98+
'user_id': 'user123',
99+
'messages': [
100+
{'role': 'user', 'content': '你好'},
101+
{'role': 'assistant', 'content': '你好!有什么可以帮助你的吗?'}
102+
],
103+
'timestamp': '2024-01-01'
104+
})
105+
```
106+
107+
---
108+
109+
### 内存数据库 - Redis
110+
111+
<Highlight color="red">**推荐用于:缓存、会话管理、实时排行榜**</Highlight>
112+
113+
**核心特点**
114+
- 微秒级响应速度(内存存储)
115+
- 支持多种数据结构:String、List、Set、Hash、Sorted Set
116+
- 适合做缓存、消息队列、API限流
117+
118+
**常用数据类型**
119+
| 类型 | 说明 | 典型场景 |
120+
|------|------|-----------|
121+
| String | 键值对 | 缓存数据、Token存储 |
122+
| Hash | 字典 | 用户会话信息 |
123+
| List | 队列 | 消息队列、任务列表 |
124+
| Sorted Set | 有序集合 | 排行榜、延时队列 |
125+
126+
**Python示例**
127+
```python
128+
import redis
129+
130+
r = redis.Redis(host='localhost', port=6379)
131+
132+
# 缓存数据
133+
r.setex('cache:key123', 3600, '缓存内容') # 1小时过期
134+
135+
# 获取缓存
136+
cached = r.get('cache:key123')
137+
```
138+
139+
**持久化方式**
140+
- **RDB**:定期快照(默认)
141+
- **AOF**:记录每次写操作(更安全但稍慢)
142+
143+
---
144+
145+
## 向量数据库
146+
147+
<Highlight color="purple">**推荐用于:Embedding存储、语义搜索、相似度检索**</Highlight>
148+
149+
向量数据库是专门用于处理高维向量数据的数据库系统。
150+
151+
### 什么是向量数据库?
152+
153+
向量数据库专门用于存储和检索高维向量数据(如文本、图像的embedding),支持快速的相似度搜索。
154+
155+
**核心能力**
156+
- 存储高维向量(通常512-4096维)
157+
- 向量相似度搜索(余弦相似度、欧氏距离等)
158+
- 支持百万到亿级向量的快速检索
159+
160+
### 主流向量数据库对比
161+
162+
| 数据库 | 类型 | 特点 | 推荐场景 |
163+
|-------|------|------|---------|
164+
| **pgvector** | PostgreSQL扩展 | 成熟稳定、与SQL无缝集成 | 中小规模、需要事务支持 |
165+
| **Pinecone** | 云服务 | 托管服务、开箱即用 | 快速原型、不想自己运维 |
166+
| **Milvus** | 专用向量库 | 高性能、支持大规模 | 大规模生产环境 |
167+
| **Chroma** | 轻量级 | 易用、适合开发测试 | 本地开发、小型项目 |
168+
| **Qdrant** | 专用向量库 | Rust开发、性能好 | 需要高性能的场景 |
169+
170+
### 快速示例:使用pgvector
171+
172+
```python
173+
import psycopg2
174+
from openai import OpenAI
175+
176+
# 连接数据库
177+
conn = psycopg2.connect("dbname=mydb user=myuser")
178+
cur = conn.cursor()
179+
180+
# 获取文本的embedding
181+
client = OpenAI()
182+
text = "人工智能是什么?"
183+
response = client.embeddings.create(
184+
model="text-embedding-3-small",
185+
input=text
186+
)
187+
embedding = response.data[0].embedding
188+
189+
# 存储向量
190+
cur.execute(
191+
"INSERT INTO documents (content, embedding) VALUES (%s, %s)",
192+
(text, embedding)
193+
)
194+
195+
# 语义搜索:找到最相似的5条记录
196+
query_embedding = client.embeddings.create(
197+
model="text-embedding-3-small",
198+
input="AI的定义"
199+
).data[0].embedding
200+
201+
cur.execute("""
202+
SELECT content, embedding <-> %s::vector AS distance
203+
FROM documents
204+
ORDER BY distance
205+
LIMIT 5
206+
""", (query_embedding,))
207+
208+
results = cur.fetchall()
209+
for content, distance in results:
210+
print(f"{content} (相似度: {1-distance:.3f})")
211+
```
212+
213+
---
214+
215+
## 核心概念速查
216+
217+
### ACID vs BASE
218+
219+
**ACID**(关系型数据库):
220+
- **A**tomicity:原子性 - 事务全部成功或全部失败
221+
- **C**onsistency:一致性 - 数据符合约束规则
222+
- **I**solation:隔离性 - 并发事务互不干扰
223+
- **D**urability:持久性 - 提交后永久保存
224+
225+
**BASE**(NoSQL数据库):
226+
- **B**asically Available:基本可用
227+
- **S**oft-state:软状态(允许短暂不一致)
228+
- **E**ventually Consistent:最终一致性
229+
230+
### 事务隔离级别(从低到高)
231+
232+
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 性能 |
233+
|---------|-----|-----------|------|-----|
234+
| Read Uncommitted |||| 最快 |
235+
| Read Committed |||||
236+
| Repeatable Read(MySQL默认) |||||
237+
| Serializable |||||
238+
239+
:::tip 实践建议
240+
- 大部分场景使用**Read Committed**即可
241+
- 需要强一致性时使用**Repeatable Read**
242+
- 高并发场景可以接受**最终一致性**,选NoSQL
243+
:::
244+
245+
---
246+
247+
## 总结:如何选择数据库?
248+
249+
### 典型应用场景推荐
250+
251+
| 应用场景 | 推荐数据库 | 理由 |
252+
|---------|-----------|------|
253+
| **语义搜索** | PostgreSQL + pgvector | 结构化数据 + 向量检索一体化 |
254+
| **聊天应用** | MongoDB + Redis | 灵活schema存对话 + Redis缓存 |
255+
| **推荐系统** | Redis + PostgreSQL | Redis实时推荐 + PG存用户数据 |
256+
| **全文检索** | Elasticsearch/Milvus | 专业检索性能优 |
257+
| **内容管理** | PostgreSQL | 事务支持 + 复杂查询 |
258+
| **实时缓存** | Redis | 毫秒级响应速度 |
259+
260+
### 快速决策流程
261+
262+
```
263+
开始
264+
265+
需要向量搜索?
266+
├─ 是 → 数据量 < 100万?
267+
│ ├─ 是 → pgvector(推荐)
268+
│ └─ 否 → Milvus/Qdrant
269+
270+
└─ 否 → 数据结构化?
271+
├─ 是 → 需要事务?
272+
│ ├─ 是 → PostgreSQL
273+
│ └─ 否 → SQLite(小型)
274+
275+
└─ 否 → 需要缓存/高速读写?
276+
├─ 是 → Redis
277+
└─ 否 → MongoDB
278+
```
279+
280+
### 技能建议
281+
282+
根据项目需求,建议掌握:
283+
284+
1. <Highlight color="green">**优先掌握**:PostgreSQL(含pgvector)+ Redis</Highlight>
285+
2. **推荐了解**:MongoDB、向量数据库(Pinecone/Chroma)
286+
3. **了解即可**:MySQL、SQLite
287+
288+
:::info 学习路径
289+
- **2小时**:完成SQLBolt SQL教程,掌握基础语法
290+
- **半天**:动手搭建 PostgreSQL + pgvector
291+
- **1天**:实践一个完整的数据库应用
292+
- **长期**:在项目中积累经验,根据需求深入学习
293+
294+
你不需要成为数据库专家,但要能快速选择合适的工具并用起来。
295+
:::
296+
297+
### 推荐资源
298+
299+
- <Highlight color="green">[SQLBolt](https://sqlbolt.com/) - SQL快速入门</Highlight>
300+
- [PostgreSQL官方文档](https://www.postgresql.org/docs/)
301+
- [pgvector GitHub](https://github.com/pgvector/pgvector)
302+
- [Redis官方文档](https://redis.io/docs/)
303+
- [MongoDB University](https://university.mongodb.com/) - 免费课程
304+
- [Pinecone文档](https://docs.pinecone.io/) - 向量数据库入门

docs/docs/编程外的基础/Git.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ sidebar_position: 5
33
title: Git
44
---
55

6-
Git
7-
86
Git 是一个版本控制工具,既可以通过图形化的方式操作,也可以通过命令行来完成。
97

108
Git 版本管理分为四个板块:

docs/docs/编程外的基础/Terminal.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ sidebar_position: 4
33
title: Terminal
44
---
55

6-
Terminals
7-
8-
也称为命令行或控制台,使我们能够在计算机上完成和自动化任务,而无需图形用户界面。终端起源于 1950 年代到 1960 年代左右,从那时起就一直是所有操作系统的重要组成部分——从台式机到隐藏在云中的服务器,再到像 Raspberry PI Zero 这样的微型计算机,甚至手机。在大多数情况下,终端、命令行意味着同一件事。
6+
Terminals 也称为命令行或控制台,使我们能够在计算机上完成和自动化任务,而无需图形用户界面。终端起源于 1950 年代到 1960 年代左右,从那时起就一直是所有操作系统的重要组成部分——从台式机到隐藏在云中的服务器,再到像 Raspberry PI Zero 这样的微型计算机,甚至手机。在大多数情况下,终端、命令行意味着同一件事。
97

108
面试中命令行通常特指类Unix系统,如Linux、macOS、Ubuntu等,这些系统与生产环境保持一致。
119

docs/docs/编程外的基础/YAML.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ sidebar_position: 2
33
title: YAML
44
---
55

6-
YAML
7-
86
YAML 在 github/docker 等程序员工具被广泛用于定义配置文件,非常简单也很有必要学习。
97

108
YAML 的配置文件后缀为 .yml,如:abc.yml

docs/docs/编程外的基础/index.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ Git 是分布式版本控制系统,是团队协作和代码管理的必备工
1515

1616
Docker 是一种容器化技术,可以帮助你快速部署和运行应用程序并且易于迁移和扩展。
1717

18+
SQL(结构化查询语言)是关系型数据库的查询语言,是关系型数据库的必备技能。
19+
1820
<DocCardList />

0 commit comments

Comments
 (0)