Skip to content

richenlin/minIODB

Repository files navigation

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

Go Version Docker Kubernetes

项目简介

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

Dashboard截图

核心特性

  • 🖥️ 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

快速开始

前置要求

单节点模式(推荐开发测试):

  • Go 1.24+
  • MinIO Server
  • 4GB+ 内存

分布式模式(推荐生产环境):

  • Go 1.24+
  • Redis 6.0+
  • MinIO Cluster
  • 8GB+ 内存

安装

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

配置

cp config/config.yaml config/config.local.yaml

单节点模式配置

redis:
  enabled: false  # 关闭Redis,无需分布式协调

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

分布式模式配置

redis:
  enabled: true
  mode: "standalone"  # 或 sentinel/cluster
  addr: "localhost:6379"

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

启动服务

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

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

服务启动后:

验证服务

# 健康检查
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'\''"}'

文档

核心文档

模块文档

许可证

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


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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors