https://github.com/inlopen/nexusbase
NexusBase: A High-Performance Time Series Database
https://github.com/inlopen/nexusbase
time-series-database tsdb
Last synced: 5 months ago
JSON representation
NexusBase: A High-Performance Time Series Database
- Host: GitHub
- URL: https://github.com/inlopen/nexusbase
- Owner: INLOpen
- License: apache-2.0
- Created: 2025-06-22T17:55:20.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-11-29T16:40:36.000Z (7 months ago)
- Last Synced: 2025-11-30T15:54:28.397Z (7 months ago)
- Topics: time-series-database, tsdb
- Language: Go
- Homepage:
- Size: 1.75 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# NexusBase: A High-Performance Time Series Database
**Version 0.0.1**
**⚠️ คำเตือน: โปรเจกต์นี้กำลังอยู่ขั้นตอนการพัฒนา และยังไม่พร้อมสำหรับการใช้งานในระดับ Production ⚠️**
---
**NexusBase** คือโปรเจกต์ฐานข้อมูลอนุกรมเวลา (Time Series Database - TSDB) ประสิทธิภาพสูงที่สร้างขึ้นด้วยภาษา Go โดยถูกออกแบบมาเพื่อรองรับปริมาณการเขียนข้อมูลจำนวนมาก (High Write Throughput) และการค้นคืนข้อมูลที่มีประสิทธิภาพ โดยมีหัวใจหลักคือสถาปัตยกรรมแบบ Log-Structured Merge-tree (LSM-tree)
## ภาพรวมสถาปัตยกรรม (Architecture Overview)
วงจรชีวิตของข้อมูลใน NexusBase เริ่มต้นจากการรับคำขอ, ผ่านเส้นทางการเขียน (Write Path) ที่รวดเร็ว, จัดเก็บลงดิสก์อย่างมีแบบแผน, และถูกค้นคืนผ่านเส้นทางการอ่าน (Read Path) ที่มีประสิทธิภาพ
```
[Client] -> gRPC Server -> [Write Path] -> [Read Path] -> [Client]
| ^
| |
V |
+--------------+ |
| WAL | |
+--------------+ |
| |
V |
+--------------+ +-------------------+
| Memtable |-->| Immutable |
| (In-Memory) | | Memtables (Queue) |
+--------------+ +-------------------+
| |
| (Flush) |
V |
+--------------+ |
| SSTable (L0) | |
+--------------+ |
| |
V (Compaction) |
+----------------------------------------------------------+
| SSTables (L1, L2, ...) on Disk (Managed by LevelsManager)|
+----------------------------------------------------------+
```
## คุณสมบัติหลัก (Features)
* **High-Performance Ingestion:** เส้นทางการเขียนข้อมูลที่ถูกปรับให้มีประสิทธิภาพสูงสุดโดยใช้ Write-Ahead Log (WAL) และ Memtable ในหน่วยความจำ
* **LSM-Tree Architecture:** จัดการข้อมูลบนดิสก์อย่างมีประสิทธิภาพด้วย SSTables และกระบวนการ Compaction แบบแบ่งระดับ (Level-based)
* **Advanced Querying:** รองรับการค้นหาข้อมูลตามช่วงเวลา, การทำ Downsampling, และฟังก์ชันการรวมข้อมูล (Aggregation)
* **Efficient Tag Indexing:** ค้นหา Series ได้อย่างรวดเร็วโดยใช้ Roaring Bitmaps สำหรับการทำดัชนีแบบกลับด้าน (Inverted Index)
* **Durability and Recovery:** มีกลไก WAL สำหรับการกู้คืนข้อมูล และฟีเจอร์ Snapshot & Restore สำหรับการสำรองข้อมูล
* **Real-time Subscriptions:** สามารถติดตามการเปลี่ยนแปลงของข้อมูลแบบ Real-time ผ่าน gRPC streams
## การเริ่มต้นใช้งาน (Getting Started)
### ข้อกำหนดเบื้องต้น
* Go Toolchain (เวอร์ชัน 1.23 หรือสูงกว่า)
* ระบบปฏิบัติการที่รองรับ POSIX (เช่น Linux, macOS)
### การติดตั้ง
1. **โคลน Repository:**
```bash
git clone https://github.com/INLOpen/nexusbase.git
cd nexusbase
```
2. **คอมไพล์โปรแกรม:**
```bash
# คอมไพล์เซิร์ฟเวอร์หลัก
go build -o tsdb-server ./cmd/server
# คอมไพล์เครื่องมือสำหรับกู้คืนข้อมูล
go build -o restore-util ./cmd/restore-util
```
### การรันเซิร์ฟเวอร์
1. กำหนดค่าเซิร์ฟเวอร์โดยแก้ไขไฟล์ `cmd/server/config.yaml`
2. เริ่มการทำงานของเซิร์ฟเวอร์:
```bash
./tsdb-server -config /path/to/your/config.yaml
```
### เลือก Engine (Engine Mode)
NexusBase มีสองการใช้งานของ engine ในโค้ด: the legacy `StorageEngine` (เรียกว่า "engine") และ lightweight `Engine2` (เรียกว่า "engine2").
ค่าคอนฟิกใหม่ `engine.mode` ควบคุมว่าส่วนใดของ engine จะถูกสตาร์ทเมื่อรันเซิร์ฟเวอร์:
- `engine` : รัน `StorageEngine` แบบดั้งเดิม (LSM-based).
- `engine2` (recommended default): รัน `Engine2` แบบ lightweight ซึ่งในเวอร์ชันนี้ถูกตั้งให้เป็นค่าเริ่มต้นของระบบ — ใช้เมื่อคุณต้องการให้ Engine2 ทำหน้าที่เป็น storage engine หลัก
- `both`: รัน `StorageEngine` แบบดั้งเดิมเป็น engine หลัก และยังสตาร์ท `Engine2` (เชื่อมต่อกับ `HookManager` ของ engine หลัก) เพื่อความเข้ากันได้หรือการย้ายข้อมูลแบบคู่ขนาน
ตัวอย่างการตั้งค่าใน `configs/config-test-leader.yaml`:
```yaml
engine:
mode: both
data_dir: "./data-leader"
# ... (อื่นๆ)
```
และตัวอย่าง follower ที่ใช้ `engine2`:
```yaml
engine:
mode: engine2
data_dir: "./data-follower"
# ... (อื่นๆ)
```
แนะนำ: ถ้าคุณต้องการทดสอบฟังก์ชันใหม่หรือรันในสภาพแวดล้อมเบาๆ ให้ใช้ `engine2`. ถ้าต้องการใช้งาน LSM เต็มรูปแบบใน production ให้ใช้ `engine`.
## Documentation
WIP
## การมีส่วนร่วม (Contributing)
เรายินดีต้อนรับทุกการมีส่วนร่วม! โปรดอ่าน [แนวทางการมีส่วนร่วม (CONTRIBUTING.md)](CONTRIBUTING.md) สำหรับรายละเอียดเกี่ยวกับขั้นตอนการส่งโค้ด, การรายงานข้อผิดพลาด, และการเสนอคุณสมบัติใหม่
## ข้อจำกัดความรับผิดชอบ (Disclaimer)
แม้ว่าจะมีการนำฟีเจอร์หลักๆ ของ TSDB มาใช้งาน แต่ยังขาดการทดสอบที่ครอบคลุม, การเสริมความแข็งแกร่ง (Hardening), และเครื่องมือที่จำเป็นสำหรับสภาพแวดล้อมระดับ Production โปรดใช้งานด้วยความระมัดระวัง