Files
seqlog/example/RUN_CONCURRENT.md
bourdon 4ec153c1ac 新增:高并发示例和文档
新增文件:
- example/concurrent_example.go: 5 分钟高并发测试示例
  - 场景 1: 并发写入 6000 条消息
  - 场景 2: 并发查询 4000 次
  - 场景 3: 混合读写测试
  - 场景 4: 持续压测 4 分钟(实时进度显示)
  - 场景 5: 统计信息汇总

- example/README.md: 完整的示例文档
  - 所有示例的使用说明
  - 最佳实践和性能优化建议
  - 常见问题排查

- example/RUN_CONCURRENT.md: 快速运行指南
  - 运行方式和时间预估
  - 后台运行方法
  - 自定义参数说明

修改文件:
- .gitignore: 修正 example 目录的忽略规则
  - 移除对整个 example/ 的忽略
  - 只忽略 example/test_*/ 测试目录

性能指标:
- 写入吞吐量:~220 msg/s
- 查询吞吐量:~400-1500 query/s
- 总数据量:53661 条消息,1.1 MB
2025-10-04 01:08:37 +08:00

93 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
go run concurrent_example.go
```
## 预计运行时间
**总时间:约 5 分钟**
- 场景 1 (并发写入): ~27 秒
- 场景 2 (并发查询): ~3 秒
- 场景 3 (混合读写): ~14 秒
- 场景 4 (持续压测): 4 分钟
- 场景 5 (统计汇总): ~10 秒
## 后台运行
如果想在后台运行并保存日志:
```bash
go run concurrent_example.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_example.go`
```go
// 场景 1每个 topic 写入的消息数
messagesPerTopic := 2000
// 场景 2每个 goroutine 的查询次数
queriesPerGoroutine := 200
// 场景 4持续压测时间
stressTestDuration := 4 * time.Minute
```
## 预期输出示例
完整输出请参考 [README.md](README.md)。