# leveldb-example **Repository Path**: zllylgw/leveldb-example ## Basic Information - **Project Name**: leveldb-example - **Description**: 这是一个使用 Go 语言操作 LevelDB 的示例项目,展示了 LevelDB 的基本操作功能和高级应用场景。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-14 - **Last Updated**: 2026-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LevelDB 示例项目 这是一个使用 Go 语言操作 LevelDB 的示例项目,展示了 LevelDB 的基本操作功能和高级应用场景。 ## 功能特性 ### 基本操作示例 (main.go) - ✅ 打开/关闭数据库 - ✅ 写入键值对数据 - ✅ 读取数据 - ✅ 迭代所有数据 - ✅ 范围查询 - ✅ 删除数据 - ✅ 验证删除操作 ### 时间戳示例 (timestamp_example.go) - ✅ 自动生成带时间戳的key - ✅ 正序遍历数据 - ✅ 倒序遍历数据 - ✅ 按时间范围检索数据 - ✅ 时间戳解析和展示 ### 时间戳HTTP示例 (timestamp_http_example.go) - ✅ 自动生成带时间戳的key - ✅ HTTP API接口 - ✅ 分页查询(支持排序) - ✅ 时间范围查询(支持分页) - ✅ 数据统计 - ✅ 健康检查 - ✅ 修改数据 - ✅ 删除数据 - ✅ 清空数据库 - ✅ 只保留最新的指定条数记录 ### LevelDB服务 (leveldb_service.go) - ✅ 支持多个LevelDB数据库实例 - ✅ 统一的HTTP API接口 - ✅ 完整的CRUD操作支持 - ✅ 分页查询和时间范围查询 - ✅ 数据统计和健康检查 - ✅ 线程安全的数据库管理 - ✅ 数据库列表管理 ## 环境要求 - Go 1.24.1 或更高版本 - 网络连接(用于下载依赖) ## 安装和运行 ### 1. 克隆或下载项目 ```bash git clone <项目地址> cd leveldb ``` ### 2. 下载依赖 ```bash go mod tidy ``` ### 3. 运行基本操作示例 ```bash go run main.go ``` ### 4. 运行时间戳示例 ```bash go run timestamp_example.go ``` ### 5. 运行时间戳HTTP示例 ```bash go run timestamp_http_example.go ``` ### 6. 运行LevelDB服务(支持多数据库) ```bash go run service_main.go leveldb_service.go ``` ## 代码结构 ``` leveldb/ ├── go.mod # Go 模块依赖文件 ├── main.go # 基本操作示例代码 ├── timestamp_example.go # 时间戳高级示例代码 ├── timestamp_http_example.go # 时间戳HTTP示例代码 ├── leveldb_service.go # LevelDB服务代码(支持多数据库) ├── service_main.go # LevelDB服务主入口 ├── README.md # 项目说明文档 ├── leveldb-data/ # 基本示例数据库目录(运行后自动创建) ├── leveldb-timestamp-data/ # 时间戳示例数据库目录(运行后自动创建) ├── leveldb-timestamp-http-data/ # 时间戳HTTP示例数据库目录(运行后自动创建) ├── leveldb-default-data/ # LevelDB服务默认数据库目录(运行后自动创建) ├── leveldb-test-data/ # LevelDB服务测试数据库目录(运行后自动创建) └── leveldb-prod-data/ # LevelDB服务生产数据库目录(运行后自动创建) ``` ## 示例功能详解 ### 1. 基本操作示例 #### 1.1 数据库初始化 ```go db, err := leveldb.OpenFile("./leveldb-data", nil) if err != nil { log.Fatalf("无法打开数据库: %v", err) } defer db.Close() ``` #### 1.2 写入数据 ```go key1 := []byte("name") value1 := []byte("张三") err = db.Put(key1, value1, nil) ``` #### 1.3 读取数据 ```go value, err := db.Get(key1, nil) if err != nil { log.Fatalf("读取数据失败: %v", err) } ``` #### 1.4 迭代所有数据 ```go iter := db.NewIterator(nil, nil) for iter.Next() { key := iter.Key() value := iter.Value() fmt.Printf("key=%s, value=%s\n", key, value) } iter.Release() ``` #### 1.5 范围查询 ```go rangeIter := db.NewIterator(&util.Range{Start: []byte("a"), Limit: []byte("z")}, nil) ``` #### 1.6 删除数据 ```go err = db.Delete(key3, nil) ``` #### 1.7 验证删除 ```go value, err = db.Get(key3, nil) if err == leveldb.ErrNotFound { fmt.Println("验证: key='city' 已被删除") } ``` ### 2. 时间戳示例 #### 2.1 生成时间戳key ```go func generateTimestampKey() []byte { timestamp := time.Now().Unix() nanosecond := time.Now().Nanosecond() key := fmt.Sprintf("%d_%d", timestamp, nanosecond) return []byte(key) } ``` #### 2.2 正序遍历 ```go func iterateAscending(db *leveldb.DB) { iter := db.NewIterator(nil, nil) for iter.Next() { key := iter.Key() value := iter.Value() timestamp, err := extractTimestamp(key) if err != nil { continue } timeStr := time.Unix(timestamp, 0).Format("2006-01-02 15:04:05") fmt.Printf("key=%s (time=%s), value=%s\n", key, timeStr, value) } iter.Release() } ``` #### 2.3 倒序遍历 ```go func iterateDescending(db *leveldb.DB) { // 收集所有数据 // 按时间戳倒序排序 // 输出结果 } ``` #### 2.4 时间范围检索 ```go func rangeQuery(db *leveldb.DB, startTime, endTime int64) { startKey := fmt.Sprintf("%d_0", startTime) endKey := fmt.Sprintf("%d_999999999", endTime) iter := db.NewIterator(&util.Range{Start: []byte(startKey), Limit: []byte(endKey)}, nil) // 处理范围内的数据 } ``` ### 3. 时间戳HTTP示例 #### 3.1 API接口列表 | 方法 | 路径 | 功能 | 参数 | |------|------|------|------| | POST | /api/write | 写入数据 | `{"value": "数据值"}` | | POST | /api/update | 修改数据 | `{"key": "键", "value": "新值"}` | | GET | /api/query | 综合查询 | page, page_size, sort(asc/desc), start_time(可选), end_time(可选) | | DELETE | /api/delete | 删除数据 | key (查询参数) | | DELETE | /api/clear | 清空数据库 | 无 | | POST | /api/keep-latest | 只保留最新的指定条数记录 | `{"count": 保留数量}` | | GET | /api/stats | 数据统计 | 无 | | GET | /api/health | 健康检查 | 无 | #### 3.2 示例请求 **写入数据:** ```bash curl -X POST http://localhost:8080/api/write -H 'Content-Type: application/json' -d '{"value":"测试数据"}' ``` **修改数据:** ```bash curl -X POST http://localhost:8080/api/update -H 'Content-Type: application/json' -d '{"key":"1700000000_0","value":"更新后的数据"}' ``` **删除数据:** ```bash curl -X DELETE 'http://localhost:8080/api/delete?key=1700000000_0' ``` **清空数据库:** ```bash curl -X DELETE http://localhost:8080/api/clear ``` **只保留最新的10条记录:** ```bash curl -X POST http://localhost:8080/api/keep-latest -H 'Content-Type: application/json' -d '{"count":10}' ``` **分页查询:** ```bash curl 'http://localhost:8080/api/query?page=1&page_size=10&sort=desc' ``` **时间范围查询:** ```bash curl 'http://localhost:8080/api/query?start_time=1700000000&end_time=1800000000&page=1&page_size=10' ``` **数据统计:** ```bash curl http://localhost:8080/api/stats ``` **健康检查:** ```bash curl http://localhost:8080/api/health ``` ### 4. LevelDB服务 #### 4.1 服务特性 - **多数据库支持**:管理多个LevelDB数据库实例 - **统一API**:所有数据库使用相同的API接口 - **线程安全**:使用`sync.RWMutex`保证并发安全 - **数据库隔离**:每个数据库有独立的存储目录 - **动态路由**:通过URL路径参数指定操作的数据库 #### 4.2 API接口列表 | 方法 | 路径 | 功能 | 参数 | |------|------|------|------| | GET | /api/databases | 列出所有数据库 | 无 | | POST | /api/databases/add | 添加新数据库 | `{"name": "数据库名称"}` | | DELETE | /api/{db} | 删除指定数据库 | 无 | | POST | /api/{db}/write | 写入数据到指定数据库 | `{"value": "数据值"}` | | POST | /api/{db}/update | 修改指定数据库中的数据 | `{"key": "键", "value": "新值"}` | | GET | /api/{db}/query | 从指定数据库查询数据 | page, page_size, sort(asc/desc), start_time(可选), end_time(可选) | | DELETE | /api/{db}/delete | 删除指定数据库中的数据 | key (查询参数) | | DELETE | /api/{db}/clear | 清空指定数据库 | 无 | | POST | /api/{db}/keep-latest | 只保留指定数据库中最新的指定条数记录 | `{"count": 保留数量}` | | GET | /api/{db}/stats | 获取指定数据库的统计信息 | 无 | | GET | /api/{db}/health | 检查指定数据库的健康状态 | 无 | #### 4.3 示例请求 **列出所有数据库:** ```bash curl http://localhost:8081/api/databases ``` **添加新数据库:** ```bash curl -X POST http://localhost:8081/api/databases/add -H 'Content-Type: application/json' -d '{"name":"newdb"}' ``` **删除指定数据库:** ```bash curl -X DELETE http://localhost:8081/api/newdb ``` **向默认数据库写入数据:** ```bash curl -X POST http://localhost:8081/api/default/write -H 'Content-Type: application/json' -d '{"value":"默认数据库测试数据"}' ``` **向测试数据库写入数据:** ```bash curl -X POST http://localhost:8081/api/test/write -H 'Content-Type: application/json' -d '{"value":"测试数据库测试数据"}' ``` **向生产数据库写入数据:** ```bash curl -X POST http://localhost:8081/api/prod/write -H 'Content-Type: application/json' -d '{"value":"生产数据库测试数据"}' ``` **从默认数据库查询数据:** ```bash curl 'http://localhost:8081/api/default/query?page=1&page_size=10&sort=desc' ``` **从测试数据库查询数据:** ```bash curl 'http://localhost:8081/api/test/query?page=1&page_size=10&sort=desc' ``` **从生产数据库查询数据:** ```bash curl 'http://localhost:8081/api/prod/query?page=1&page_size=10&sort=desc' ``` **修改默认数据库中的数据:** ```bash curl -X POST http://localhost:8081/api/default/update -H 'Content-Type: application/json' -d '{"key":"1700000000_0","value":"更新后的数据"}' ``` **删除默认数据库中的数据:** ```bash curl -X DELETE 'http://localhost:8081/api/default/delete?key=1700000000_0' ``` **清空默认数据库:** ```bash curl -X DELETE http://localhost:8081/api/default/clear ``` **只保留默认数据库中最新的5条记录:** ```bash curl -X POST http://localhost:8081/api/default/keep-latest -H 'Content-Type: application/json' -d '{"count":5}' ``` **获取默认数据库的统计信息:** ```bash curl http://localhost:8081/api/default/stats ``` **检查默认数据库的健康状态:** ```bash curl http://localhost:8081/api/default/health ``` #### 4.4 运行输出示例 ``` LevelDB服务启动成功! 服务监听在 http://localhost:8081 注册的数据库: - default (路径: leveldb-default-data) - test (路径: leveldb-test-data) - prod (路径: leveldb-prod-data) API 端点: GET /api/databases - 列出所有数据库 POST /api/databases/add - 添加新数据库 DELETE /api/{db} - 删除指定数据库 POST /api/{db}/write - 写入数据到指定数据库 POST /api/{db}/update - 修改指定数据库中的数据 GET /api/{db}/query - 从指定数据库查询数据 DELETE /api/{db}/delete - 删除指定数据库中的数据 DELETE /api/{db}/clear - 清空指定数据库 POST /api/{db}/keep-latest - 只保留指定数据库中最新的指定条数记录 GET /api/{db}/stats - 获取指定数据库的统计信息 GET /api/{db}/health - 检查指定数据库的健康状态 示例请求: 1. 列出所有数据库: curl http://localhost:8081/api/databases 2. 添加新数据库: curl -X POST http://localhost:8081/api/databases/add -H 'Content-Type: application/json' -d '{"name":"newdb"}' 3. 删除指定数据库: curl -X DELETE http://localhost:8081/api/newdb 4. 向默认数据库写入数据: curl -X POST http://localhost:8081/api/default/write -H 'Content-Type: application/json' -d '{"value":"默认数据库测试数据"}' 5. 从默认数据库查询数据: curl 'http://localhost:8081/api/default/query?page=1&page_size=10&sort=desc' 6. 获取默认数据库的统计信息: curl http://localhost:8081/api/default/stats 7. 检查默认数据库的健康状态: curl http://localhost:8081/api/default/health ``` ## 注意事项 1. **数据目录**: - 基本示例使用 `leveldb-data` 目录 - 时间戳示例使用 `leveldb-timestamp-data` 目录 - 时间戳HTTP示例使用 `leveldb-timestamp-http-data` 目录 - LevelDB服务默认数据库使用 `leveldb-default-data` 目录 - LevelDB服务测试数据库使用 `leveldb-test-data` 目录 - LevelDB服务生产数据库使用 `leveldb-prod-data` 目录 2. **依赖管理**:使用 Go Modules 管理依赖 3. **错误处理**:示例中使用了 `log.Fatalf` 直接退出程序,实际项目中应根据需要进行更优雅的错误处理 4. **资源释放**: - 使用 `defer db.Close()` 确保数据库连接正确关闭 - 使用 `iter.Release()` 释放迭代器资源,避免内存泄漏 5. **时间戳示例**: - 写入数据时会等待1秒,确保时间戳不同 - 生成的key格式为 `timestamp_nanosecond`,确保唯一性 6. **HTTP示例**: - 默认监听在 8080 端口 - 提供了完整的RESTful API接口 7. **LevelDB服务**: - 默认监听在 8081 端口 - 支持多个数据库实例 - 数据库名称通过URL路径参数指定 - 服务启动时自动创建默认、测试和生产三个数据库 8. **端口冲突**: - 如果8080或8081端口被占用,可以修改代码中的端口号 - 可以使用 `netstat -ano | findstr :8080` 查看端口占用情况 ## 扩展建议 - **批量操作**:对于大量数据的写入,可以使用 `leveldb.Batch` 提高性能 - **自定义选项**:可以通过 `leveldb.Options` 自定义数据库配置,如缓存大小、压缩选项等 - **并发操作**:LevelDB 支持并发读取,但写入操作需要串行化 - **备份和恢复**:可以使用 `leveldb/iterator` 包实现数据备份和恢复功能 - **监控和统计**:可以添加监控功能,统计数据库操作的性能指标 - **认证和授权**:在生产环境中,应该为HTTP API添加认证和授权机制 - **日志记录**:添加详细的日志记录,便于问题排查 - **CORS支持**:在需要跨域访问的场景下,添加CORS支持 - **数据库管理**: - 为LevelDB服务添加动态数据库创建和删除接口 - 实现数据库备份和恢复功能 - 添加数据库大小限制和自动清理机制 - **服务管理**: - 添加服务启动脚本和系统服务配置 - 实现服务健康检查和自动重启机制 - 添加性能监控和告警功能 ## 相关资源 - [LevelDB 官方文档](https://github.com/google/leveldb) - [goleveldb GitHub 仓库](https://github.com/syndtr/goleveldb) - [Go 语言官方文档](https://golang.org/doc/) - [leveldb-viewer GitHub 仓库](https://github.com/tecbot/leveldb-viewer) ## 许可证 本项目为学习示例,仅供参考使用。 ## 数据库可视化工具 可以使用 `leveldb-viewer` 工具可视化查看 LevelDB 数据库内容。 ### 安装 1. 从 [leveldb-viewer releases](https://github.com/tecbot/leveldb-viewer/releases) 下载最新版本的 `leveldb-viewer.exe` 2. 将 `leveldb-viewer.exe` 放到与数据库目录同级的位置 ### 运行 ``` # 查看基本示例数据库 leveldb-viewer.exe -db F:\workspace\go\leveldb\leveldb-data # 查看时间戳示例数据库 leveldb-viewer.exe -db F:\workspace\go\leveldb\leveldb-timestamp-data # 查看时间戳HTTP示例数据库 leveldb-viewer.exe -db F:\workspace\go\leveldb\leveldb-timestamp-http-data ```