Files
seqlog/example/RUN_CONCURRENT.md
bourdon 3d82a6845e 重构:将示例文件组织到子目录
修复 Go 规范问题:一个目录不能有多个 package main

文件结构调整:
- example/concurrent_example.go → example/concurrent/main.go
- example/index_example.go → example/index/main.go
- example/topic_processor_example.go → example/topic_processor/main.go

修复 API 适配:
- index/main.go: 更新为新的查询 API(移除 startIdx/endIdx 参数)
- webapp/main.go: 使用 processor.Query 方法替代 RecordQuery
  - 移除 queryCache,直接使用 processor
  - 更新查询调用,移除状态参数

文档更新:
- example/README.md: 更新所有示例的运行路径
- example/RUN_CONCURRENT.md: 更新运行命令

所有示例编译测试通过 
2025-10-04 01:27:56 +08:00

94 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 运行高并发示例
## 快速开始
```bash
cd example/concurrent
go run main.go
```
## 预计运行时间
**总时间:约 5 分钟**
- 场景 1 (并发写入): ~27 秒
- 场景 2 (并发查询): ~3 秒
- 场景 3 (混合读写): ~14 秒
- 场景 4 (持续压测): 4 分钟
- 场景 5 (统计汇总): ~10 秒
## 后台运行
如果想在后台运行并保存日志:
```bash
cd example/concurrent
go run main.go > output.log 2>&1 &
echo $! > pid.txt
# 查看实时输出
tail -f output.log
# 停止程序
kill $(cat pid.txt)
rm pid.txt
```
## 查看进度
程序在场景 4持续压测阶段会每 10 秒显示一次进度:
```
[进度] 已运行 10 秒 - 写入: 1951 条, 查询: 1920 次
[进度] 已运行 20 秒 - 写入: 3902 条, 查询: 3840 次
...
```
## 性能指标
根据测试结果,您应该会看到:
- **写入吞吐量**: ~220-240 msg/s
- **查询吞吐量**: ~400-1500 query/s取决于数据量
- **并发处理**: 3 个 topic 同时写入和查询
## 故障排查
### 问题:程序卡住不动
如果程序在某个阶段卡住:
1. 检查磁盘空间是否充足
2. 检查是否有其他进程占用文件
3. 尝试清理测试目录:`rm -rf test_concurrent`
### 问题:查询出现 EOF 错误
这是正常现象!当 tailer 正在处理文件时,查询可能会读取到不完整的记录。程序会自动处理这些错误。
### 问题:性能比预期低
可能的原因:
- 磁盘性能较慢(特别是在虚拟机或网络存储上)
- 系统负载较高
- 索引批量同步设置(可以通过修改 `index.go` 中的 `DefaultSyncBatch` 调整)
## 自定义测试
如果想调整测试参数,编辑 `concurrent/main.go`
```go
// 场景 1每个 topic 写入的消息数
messagesPerTopic := 2000
// 场景 2每个 goroutine 的查询次数
queriesPerGoroutine := 200
// 场景 4持续压测时间
stressTestDuration := 4 * time.Minute
```
## 预期输出示例
完整输出请参考 [README.md](README.md)。