The goal of this project is to create a high-performance, scalable, and versatile database system written in Go. This database aims to support both ACID compliance and clustering, offering robust features for modern applications. It is designed to handle column-oriented and row-oriented storage, providing flexibility for both transactional and analytical workloads.
-
ACID Compliance
- Ensures data integrity with support for transactions, locking mechanisms, and durability through Write-Ahead Logging (WAL).
-
Clustering
- Built-in support for distributed storage, replication, and sharding.
- Strong consistency protocols (Raft/Paxos) to synchronize data across nodes.
-
Dual Storage Models
- Column-Oriented Storage: Optimized for analytical queries, enabling high-speed aggregation and column-based operations.
- Row-Oriented Storage: Ideal for transactional workloads with rapid row-level access.
-
Indexing and Optimization
- Advanced indexing structures (B-Tree, LSM-Tree) for efficient data retrieval.
- Support for compression algorithms like Snappy or Zstandard to minimize storage footprint.
-
Concurrency and Performance
- Leverages Go’s goroutines for handling multiple operations simultaneously.
- Built-in caching and Bloom filters to accelerate query performance.
Go is chosen as the primary language due to its:
- Efficient concurrency model with goroutines.
- Simplicity and performance for building low-level, high-performance systems.
- Extensive support for networking and distributed systems.
Because capybaras are awesome! 🦫
-
Storage Engine
- Manages columnar and row-based data layouts.
- Handles on-disk and in-memory storage seamlessly.
-
Transaction Manager
- Implements isolation levels, locking, and commit/rollback functionality.
-
Distributed Consensus
- Uses Raft for leader election and data synchronization between nodes.
-
Query Engine
- Parses and executes queries, optimizing based on storage type.
-
APIs
- Provides REST and gRPC endpoints for interacting with the database.
- Go 1.23 or higher.
- Docker (optional, for clustering and testing).
TODO...