An open API service indexing awesome lists of open source software.

https://github.com/richenlin/miniodb

An ultra-lightweight, high-performance, horizontally scalable distributed object storage and OLAP query analysis system.
https://github.com/richenlin/miniodb

duckdb minio object-storage olap

Last synced: 29 days ago
JSON representation

An ultra-lightweight, high-performance, horizontally scalable distributed object storage and OLAP query analysis system.

Awesome Lists containing this project

README

          

# MinIODB - 基于MinIO、DuckDB和Redis的分布式OLAP系统

[![Go Version](https://img.shields.io/badge/Go-1.24+-blue.svg)](https://golang.org/)
[![Docker](https://img.shields.io/badge/Docker-Supported-blue.svg)]()
[![Kubernetes](https://img.shields.io/badge/Kubernetes-Ready-blue.svg)]()

## 项目简介

MinIODB是一个极致轻量化、高性能、可水平扩展的分布式对象存储与OLAP查询分析系统。采用存算分离架构,以MinIO作为分布式存储底座,DuckDB作为高性能OLAP查询引擎,Redis作为元数据中心,提供企业级的数据分析能力。

![Dashboard截图](docs/screenshot.png)

## 核心特性

- **🖥️ Dashboard控制台** - Web管理界面,支持实时监控、表管理、节点管理
- **🚀 灵活部署** - 支持单节点/分布式/All-in-One三种部署模式
- **⚡ 单节点模式** - 无需Redis依赖,仅需MinIO即可快速启动
- **📈 分布式扩展** - 支持水平扩展,通过增加节点线性提升处理能力
- **💾 轻量高效** - 资源占用少,适合资源受限环境
- **🛡️ 高可用** - 三层高可用体系(应用层/中间件层/存储层)
- **🔄 数据备份** - 热备+冷备完整备份体系,支持灾难恢复
- **🔐 权限体系** - 两级权限控制(功能权限+表级数据权限)
- **📊 表级管理** - 支持多表数据隔离和差异化配置

## 架构设计

```
+----------------+ +----------------+ +----------------+
| gRPC Client | | RESTful Client| | Browser |
+----------------+ +----------------+ +----------------+
| | |
v v v
+---------------------------------------------------------------+
| API Gateway / Query Node (Go) - :8081 |
| |
| - Request Parsing & Validation - Dashboard Server (新增) |
| - Query Coordination - SSE Real-time Events |
| - Result Aggregation - Static SPA (embedded) |
| - Metadata Manager |
+---------------------------------------------------------------+
^ | ^ | ^ |
| | | | | |
| v | v | v
+---------------------------------------------------------------+
| Connection Pool Manager |
| |
| Redis Pool | MinIO Pool | Dashboard Config|
| ├─ Standalone | ├─ Primary Pool | ├─ All-in-One |
| ├─ Sentinel | ├─ Backup Pool | └─ Standalone |
| ├─ Cluster | ├─ Health Check | |
| └─ Health Check | └─ Auto Failover | |
+---------------------------------------------------------------+
| |
v (Service Discovery) v (Query Planning)
+----------------+ +---------------------------------+
| Redis | | Worker Nodes (Go Service) |
| -------------- | |---------------------------------|
| - Service Reg. |<-----| - Heartbeat & Registration |
| - Data Index |----->| - DuckDB Instance (embedded) |
| - Hash Ring | | - Data Ingestion & Buffering |
| - Table Meta | | - Parquet File Generation |
| - Metadata Ver | | - Read/Write to MinIO |
| - Backup Index | | - Table-level Processing |
+----------------+ | - Connection Pool Client |
+---------------------------------+
^ |
| | (S3 API via Pool)
v v
+-------------------------+
| MinIO Cluster |
| (Distributed Object |
| Storage) |
| ├─ Primary Storage |
| ├─ Backup Storage |
| └─ TABLE/ID/YYYY-MM-DD/ |
+-------------------------+
```

**详细架构设计**:[docs/SOLUTION.md](docs/SOLUTION.md)

## 快速开始

### 前置要求

**单节点模式**(推荐开发测试):
- Go 1.24+
- MinIO Server
- 4GB+ 内存

**分布式模式**(推荐生产环境):
- Go 1.24+
- Redis 6.0+
- MinIO Cluster
- 8GB+ 内存

### 安装

```bash
git clone https://github.com/richenlin/minIODB.git
cd minIODB
go mod download
```

### 配置

```bash
cp config/config.yaml config/config.local.yaml
```

**单节点模式配置**:
```yaml
redis:
enabled: false # 关闭Redis,无需分布式协调

minio:
endpoint: "localhost:9000"
access_key: "minioadmin"
secret_key: "minioadmin"
bucket: "miniodb-data"
```

**分布式模式配置**:
```yaml
redis:
enabled: true
mode: "standalone" # 或 sentinel/cluster
addr: "localhost:6379"

minio:
endpoint: "minio-cluster:9000"
bucket: "miniodb-data"
```

### 启动服务

```bash
# 启动基础设施(Redis、MinIO)
./deploy/deploy.sh dev --install-deps

# 启动 MinIODB
go run cmd/main.go -c config/config.local.yaml
```

服务启动后:
- **gRPC端口**: :8080
- **REST API端口**: :8081
- **Swagger UI**: http://localhost:8081/api-docs/index.html
- **Prometheus指标**: http://localhost:8081/metrics

### 验证服务

```bash
# 健康检查
curl http://localhost:8081/v1/health

# 创建表
curl -X POST http://localhost:8081/v1/tables \
-H "Content-Type: application/json" \
-d '{"table_name": "users", "config": {"buffer_size": 1000}}'

# 写入数据
curl -X POST http://localhost:8081/v1/data \
-H "Content-Type: application/json" \
-d '{"table": "users", "id": "user-001", "timestamp": "2024-01-18T10:00:00Z", "payload": {"name": "张三"}}'

# 查询数据
curl -X POST http://localhost:8081/v1/query \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT * FROM users WHERE id = '\''user-001'\''"}'
```

## 文档

### 核心文档
- [架构设计文档](docs/SOLUTION.md) - 完整的系统架构和技术细节
- [部署指南](deploy/README.md) - Docker/Kubernetes/Ansible部署方式

### 模块文档
- [连接池管理](pkg/pool/README.md) - Redis和MinIO连接池设计
- [ID生成器](pkg/idgen/README.md) - UUID/Snowflake/自定义ID生成
- [日志系统](pkg/logger/README.md) - 结构化日志使用指南

## 许可证

本项目采用BSD-3-Clause许可证。详见[LICENSE](LICENSE)文件。

---

⭐ 如果这个项目对您有帮助,请给我们一个Star!