Go to file
程广 989ce58da5 feat(storage): 为内存引擎添加缓冲区长度配置
- 在 Config 结构中添加 MemLen 字段,用于配置内存缓冲区长度
- 在命令行参数中添加 --mem-len 选项,用于指定内存缓冲区长度
- 修改 MemoryEngine 结构,添加 buffLen 字段以支持自定义缓冲区长度
- 更新 NewMemoryEngine 函数,允许传入内存缓冲区长度参数
- 在创建 CircularBuffer 时使用指定的缓冲区长度
- 更新相关测试文件,使用新的内存
2025-06-13 14:01:11 +08:00
cmd/server feat(storage): 为内存引擎添加缓冲区长度配置 2025-06-13 14:01:11 +08:00
docs "docs: 更新任务文档并添加项目路线图" 2025-06-11 23:55:39 +08:00
pkg feat(storage): 为内存引擎添加缓冲区长度配置 2025-06-13 14:01:11 +08:00
.gitignore first gen 2025-06-10 21:38:06 +08:00
Makefile fix code 2025-06-11 00:07:20 +08:00
README.md feat(storage): 添加 BoltDB 持久化支持 2025-06-11 23:40:55 +08:00
go.mod feat(storage): 添加 BoltDB 存储引擎 2025-06-11 23:30:28 +08:00
go.sum feat(storage): 添加 BoltDB 存储引擎 2025-06-11 23:30:28 +08:00

README.md

GoTiDB - 时序数据库

GoTiDB 是一个用 Go 语言编写的轻量级时序数据库,专门用于存储和查询时间序列数据。它支持高效的数据写入、查询和实时数据推送功能。

特性

  • 高性能内存存储引擎
  • WAL预写日志持久化
  • REST API 接口
  • WebSocket 实时数据推送
  • NATS 消息系统集成
  • Prometheus 指标监控
  • 支持自定义标签的数据点
  • 环形缓冲区数据结构
  • 支持多种查询类型(最新值、所有值、持续时间)

安装

确保你已经安装了 Go 1.16 或更高版本。

git clone git.pyer.club/kingecg/gotidb
cd gotidb
go mod download

构建

go build -o gotidb cmd/server/main.go

运行

./gotidb [options]

可用选项

  • -rest-addr: REST API 服务地址(默认:":8080"
  • -ws-addr: WebSocket 服务地址(默认:":8081"
  • -metrics-addr: 指标服务地址(默认:":8082"
  • -quic-addr: QUIC 服务地址(默认:":8083"
  • -nats-url: NATS 服务器地址(默认:"nats://localhost:4222"
  • -persistence: 持久化类型none, wal, boltdb默认"none"
  • -persistence-dir: 持久化目录(默认:"./data"
  • -sync-every: 每写入多少条数据同步一次默认100
  • -config: 配置文件路径(默认:"config.yaml"

持久化选项

GoTiDB 支持多种持久化方式:

  1. 内存存储(无持久化):数据仅保存在内存中,服务重启后数据丢失。

    • 配置:-persistence=none
  2. WAL 日志持久化使用预写日志Write-Ahead Log进行持久化支持数据恢复。

    • 配置:-persistence=wal -persistence-dir=./data -sync-every=100
  3. BoltDB 持久化:使用 BoltDB 进行持久化,提供更高的可靠性和查询性能。

    • 配置:-persistence=boltdb -persistence-dir=./data
    • 配置文件中可设置:boltdb_filename(数据库文件名)和 boltdb_bucket_size(数据分桶大小)

API 使用

REST API

写入数据

curl -X POST http://localhost:8080/api/v1/write \
  -H "Content-Type: application/json" \
  -d '{
    "device_id": "device1",
    "metric_code": "temperature",
    "labels": {
      "location": "room1"
    },
    "value": 25.5
  }'

批量写入数据

curl -X POST http://localhost:8080/api/v1/batch_write \
  -H "Content-Type: application/json" \
  -d '{
    "points": [
      {
        "device_id": "device1",
        "metric_code": "temperature",
        "labels": {
          "location": "room1"
        },
        "value": 25.5
      },
      {
        "device_id": "device2",
        "metric_code": "humidity",
        "labels": {
          "location": "room2"
        },
        "value": 60
      }
    ]
  }'

查询数据

curl -X POST http://localhost:8080/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{
    "device_id": "device1",
    "metric_code": "temperature",
    "labels": {
      "location": "room1"
    },
    "query_type": "latest"
  }'

WebSocket API

连接 WebSocket 服务:

const ws = new WebSocket('ws://localhost:8081/ws');

// 订阅数据点
ws.send(JSON.stringify({
  device_id: "device1",
  metric_code: "temperature",
  labels: {
    location: "room1"
  }
}));

// 接收数据更新
ws.onmessage = function(event) {
  const data = JSON.parse(event.data);
  console.log('Received update:', data);
};

监控

访问 http://localhost:8082/metrics 查看 Prometheus 指标。

可用指标:

  • gotidb_write_total: 写入操作总数
  • gotidb_query_total: 查询操作总数
  • gotidb_write_latency_seconds: 写入操作延迟
  • gotidb_query_latency_seconds: 查询操作延迟
  • gotidb_active_connections: 活跃连接数
  • gotidb_data_points_count: 数据点数量
  • gotidb_persistence_latency_seconds: 持久化操作延迟
  • gotidb_persistence_errors_total: 持久化错误总数
  • gotidb_messaging_latency_seconds: 消息操作延迟
  • gotidb_messaging_errors_total: 消息错误总数
  • gotidb_websocket_connections: WebSocket 连接数

许可证

MIT License