# Mhuixs
**Repository Path**: hujiyo/Mhuixs
## Basic Information
- **Project Name**: Mhuixs
- **Description**: 目标是使用C/C++构建一个灵活的高性能数据库软件
- **Primary Language**: C++
- **License**: Apache-2.0
- **Default Branch**: dev
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 9
- **Forks**: 0
- **Created**: 2024-11-30
- **Last Updated**: 2025-08-07
## Categories & Tags
**Categories**: database-service
**Tags**: None
## README
# Mhuixs 数据库
[](https://deepwiki.com/hujiyo/Mhuixs)
## 1. 介绍
Mhuixs 是一个基于内存的数据库,致力于为用户提供高效、灵活的数据管理能力。
本项目结合了关系型与非关系型数据库的优势,目标是实现国产化、易于集成、支持多样化数据结构,并具备简洁的语言特性。
**当前状态**: 客户端 muixclt 已基本完成,支持完整的 NAQL 语法解析和网络通信功能。
## 2. 目标 & 特色
基于内存的高速数据库在未来预估具有广阔的应用前景。Mhuixs 虽然定位为轻量级软件,但目标具备以下特点:
- 同时支持关系型表数据管理和非关系型键值对池数据管理,功能全面。
- 基于内存,使用创建索引、哈希表等方法定位数据对象指针
- 支持多种数据结构,满足不同场景需求。
- 提供简洁且安全的权限分级管理,保障数据安全。
- 语法设计简明,便于理解和使用,适合 AI 及开发者快速上手。
- 特殊数据压缩调控策略,在内存和处理性能之间取得平衡
- 支持 MCP 协议,全面兼容AI agent。
## 3. 当前总览
项目文件目录结构如下:
- `module`:核心数据结构实现(表、键库、列表、位图、流等)。
- `lib`:基础库与工具集(类型定义、内存池、加密、会话等)。
- `hub`:服务端主控模块与执行引擎。
- `muixclt`:**客户端命令行工具(已完成)**,包含完整的 NAQL 解析器和网络通信功能。
- `share`:共享模块。
### 开发进度
- ✅ **muixclt 客户端**: 已完成基本功能,支持 NAQL 语法解析、网络通信、变量管理等基础功能
- 🚧 **server 服务端**: 开发中
## 4. 客户端 muixclt
客户端 muixclt 说明文档(点击展开)
# Mhuixs 数据库客户端
## 核心特性
muixclt 是一个完整的 NAQL 解释器,采用厚客户端模式,具备:
- **NAQL 词法分析器**: 1926行代码,支持完整的 NAQL 语法解析
- **MUIX 包协议**: 自定义二进制协议,提供可靠的数据传输
- **HUJI 命令协议**: 高效的命令序列化和传输机制
- **本地控制器**: 支持 IF/WHILE/FOR 等控制语句的本地执行
- **变量系统**: 客户端变量管理和宏替换功能
## 构建和运行
```bash
# 构建
cd Mhuixs/muixclt && make
# 运行
./muixclt # 交互模式
./muixclt -f script.naql # 批处理模式
./muixclt -s IP -p PORT # 连接指定服务器
```
**系统要求**: Linux, GCC 4.9+, OpenSSL, Readline
### TCP/TLS支持说明
muixclt客户端现在支持通过编译时宏 `start_tls` 来控制是否使用TLS加密连接。默认情况下,客户端使用明文TCP连接。
#### 编译模式
##### TCP模式(默认)
```bash
make # 编译TCP版本
make info # 查看编译信息
make run # 运行TCP版本
make test # 测试TCP连接
```
##### TLS模式
```bash
make tls # 编译TLS版本
make run-tls # 运行TLS版本
make test-tls # 测试TLS连接
```
##### 通过环境变量控制
```bash
make TLS=1 # 通过环境变量启用TLS
make TLS=1 run # 编译并运行TLS版本
```
##### 查看编译信息
```bash
make info
```
输出示例:
```
编译信息:
CC: gcc
CFLAGS: -Wall -Wextra -std=c99 -O2 -g
LDFLAGS: -lreadline
BUILD_MODE: TCP
SOURCES: muixclt.c pkg.c lexer.c variable.c flow_controller.c logo.c netlink.c controller.c merr.c stdstr.c funseq.c
```
#### 依赖安装
##### 基础依赖(TCP模式)
```bash
# Ubuntu/Debian
make install-deps
# CentOS/RHEL
make install-deps-rhel
```
##### TLS依赖(TLS模式)
```bash
# Ubuntu/Debian
make install-deps-tls
# CentOS/RHEL
make install-deps-tls-rhel
```
#### 运行时区别
##### TCP模式
- 连接提示:`正在连接到 127.0.0.1:18482 (TCP模式)...`
- 成功提示:`✓ 已成功连接到 Mhuixs 服务器 (TCP明文)`
- 数据传输:明文传输,性能较高
##### TLS模式
- 连接提示:`正在连接到 127.0.0.1:18482 (TLS模式)...`
- 成功提示:`✓ 已成功连接到 Mhuixs 服务器 (TLS加密)`
- 数据传输:加密传输,安全性高
#### 调试和发布版本
##### 调试版本
```bash
make debug # TCP调试版本
make debug-tls # TLS调试版本
```
##### 发布版本
```bash
make release # TCP发布版本
make release-tls # TLS发布版本
```
### 注意事项
1. **服务器兼容性**:确保服务器支持对应的连接模式
2. **证书配置**:TLS模式需要正确的证书配置
3. **性能考虑**:TLS模式会有额外的加密开销
4. **依赖管理**:TLS模式需要安装OpenSSL开发库
### 帮助信息
运行 `make help` 查看所有可用的编译选项和使用方法。 #################
## 协议架构
### MUIX 包协议 (pkg.h)
用于客户端与服务器间的可靠数据传输:
```
包结构: [MUIX(4字节)] + [长度(4字节)] + [$(1字节)] + [用户数据]
- 魔数: 'M''U''I''X'
- 长度: 大端字节序,表示用户数据长度
- 结束符: '$'
- 最大包大小: 4KB
```
核心功能:
- `create_packet()`: 创建数据包
- `serialize_packet()`: 序列化为网络传输格式
- `deserialize_packet()`: 反序列化接收数据
- `find_packet_boundary()`: 流式数据中定位完整包
### HUJI 命令协议 (muixclt.c)
NAQL 语句转换为二进制命令格式:
```
命令格式: [HUJI(4字节)] + [编号(4字节)] + [参数流]
参数流: [参数数目(1字节)] + [@] + [参数1长度] + [@] + [参数1] + [@] + ...
```
**命令编号体系**:
- 1-50: 基础语法 (GET, HOOK, DESC 等)
- 51-70: 事务控制 (MULTI, EXEC, ASYNC)
- 71-90: 控制语句 (IF, WHILE, FOR - 本地处理)
- 101-150: TABLE 操作 (FIELD, ADD, SET 等)
- 151-200: KVALOT 操作 (EXISTS, SET, GET 等)
- 201-280: STREAM/LIST 操作
- 281-330: BITMAP 操作
- 361-370: 变量管理 (本地处理)
**本地处理**: 控制语句和变量操作在客户端本地执行,不发送给服务器。
## NAQL 语法示例
```sql
# 表操作
HOOK TABLE users;
FIELD ADD id i4 PKEY;
FIELD ADD name str NOTNULL;
ADD 1 'Alice' 25;
GET WHERE id == 1;
# 键值操作
HOOK KVALOT cache;
SET user:1 'Alice';
GET user:1;
# 控制语句 (本地执行)
$counter = 0;
FOR i 1 10 1;
ADD $i 'user$i';
$counter = $counter + 1;
END;
```
## 交互命令
```
\q, \quit 退出
\h, \help 帮助
\c, \connect 连接服务器
\s, \status 显示状态
\v, \verbose 切换详细模式
```
## 调试功能
```bash
./muixclt -d # 调试模式,显示协议数据包内容
./muixclt -v # 详细模式,显示网络通信信息
```
调试模式下可查看:
- NAQL 语句的词法分析结果
- 生成的 HUJI 协议数据包
- 网络传输的 MUIX 包格式
#### 注意 : readme由chatGPT生成,可能会有错误,欢迎指正。实际以项目代码为准。
## 5. 参与与交流
欢迎对数据库、AI数据库方向感兴趣的朋友加入,一起完成 Mhuixs!
- Email:Mhuxis@outlook.com | Mhuxis.db@gmail.com | Mhuxis.db@outlook.com
- WeChat:wx17601516389
## 6.重要日期
- 项目开始:2024.10.17
- muixclt 客户端完成:2024.12.20
- 本次README更新时间:2024.12.20
## 7.NAQL草案 >~<
NAQL:NAture-language Query Language
旨在设计一种最接近口语的、最简单、给AI可以直接现场学会的数据查询语言。
未来我们会出一版专门提供给AI看的查询语言 " 学习资料 "。
[👉 NAQL基础语法文档](Mhuixs/share/NAQL.txt)
**NAQL 语法特点**:
- 接近自然语言的语法设计
- 简洁明了的命令结构
- 支持复杂的数据查询和操作
- 专为 AI 优化的语法规则
基础语法是lexer直接解释和转化的,lexer之前还需要有个环节将不定形式的语法转化为标准语法
## 8.致谢 && 依赖
0. 致敬开源社区
```
感谢开源社区,特别是上述第三方库的作者们。正是他们的无私奉献和优秀工作,
让Mhuixs能够站在巨人的肩膀上发展。我在这里祝你们心想事成、事业有成、阖家幸福、幸福安康。
————HuJiYo 2025
Thanks to the open-source community, especially the authors of the aforementioned
third-party libraries. It is their selfless dedication and excellent work that have
enabled Mhuixs to develop by standing on the shoulders of giants. Here, I wish you
all the best in your endeavors, success in your careers, happiness for your families,
and health and well-being.
————HuJiYo 2025
```
1. 感谢Claude、GPT、Qwen、Deepseek、DouBao系列模型(~QvQ~)。
2. 感谢坚持不放弃的自己(doge)!