准备可扩展类型系统工作,更合理的JOIN查询优化算法,并行查询
This commit is contained in:
1 parent
9758439b82
commit
274b7fcdcc
75 files changed
+3828
-1789
No files matched your search
@@ -0,0 +1,52 @@
|
||||
# 架构与组件
|
||||
|
||||
ChuSQL 采用客户端 / 服务端架构。数据库文件仅由 `chusql-server` 直接访问,其他组件通过网络接口与数据库服务通信。
|
||||
|
||||
## 主要组件
|
||||
|
||||
| 组件 | 作用 |
|
||||
| --- | --- |
|
||||
| `chusql-server` | 数据库服务,负责 SQL 执行、权限检查、事务与数据访问 |
|
||||
| `chusql-web` | Web 管理端,通过数据库服务访问数据 |
|
||||
| `csql` | 命令行客户端,通过数据库服务执行 SQL |
|
||||
| `chusql-core/engine` | SQL 解析、语义检查、优化与执行 |
|
||||
| `chusql-core/storage` | 页面、索引、日志与持久化存储 |
|
||||
|
||||
## 数据流
|
||||
|
||||
典型访问路径为:
|
||||
|
||||
```text
|
||||
Web / CLI / 其他客户端
|
||||
↓
|
||||
TCP
|
||||
↓
|
||||
chusql-server
|
||||
↓
|
||||
SQL 引擎与存储层
|
||||
↓
|
||||
磁盘
|
||||
```
|
||||
|
||||
所有 SQL 和权限检查均由数据库服务统一处理。Web 和 CLI 不直接访问数据目录,因此多个客户端可以同时连接同一数据库服务。
|
||||
|
||||
## 数据目录
|
||||
|
||||
数据保存在 `[storage] data_dir` 指定的位置,主要包含:
|
||||
|
||||
| 目录 | 内容 |
|
||||
| --- | --- |
|
||||
| `system/` | 系统数据库,包括账号和权限等系统信息 |
|
||||
| `databases/<数据库名>/` | 用户创建的数据库 |
|
||||
|
||||
安装完成后只有系统数据库,不自动创建业务数据库。业务数据库需通过 `CREATE DATABASE` 创建。
|
||||
|
||||
## 数据库服务
|
||||
|
||||
`chusql-server` 默认监听 `127.0.0.1:7777`,客户端建立连接后完成登录、数据库选择和 SQL 执行。
|
||||
|
||||
每条连接拥有独立会话状态,例如当前数据库选择不会影响其他连接。
|
||||
|
||||
系统数据库及部分管理操作仅允许管理员访问。
|
||||
|
||||
服务监听地址、端口和请求限制可在 `chusql.toml` 的 `[server]` 分区中配置。
|
||||
@@ -0,0 +1,127 @@
|
||||
# 命令与选项
|
||||
|
||||
ChuSQL 的主要用户命令如下:
|
||||
|
||||
| 命令 | 作用 |
|
||||
| --- | --- |
|
||||
| `chusql-server` | 启动数据库服务 |
|
||||
| `chusql-web` | 启动 Web 管理端 |
|
||||
| `csql` | 启动命令行客户端 |
|
||||
| `csql-web` | 按配置启动 Web 管理端 |
|
||||
|
||||
各组件默认使用同一份 `chusql.toml`。需要临时使用其他配置时,可通过 `--config FILE` 指定。
|
||||
|
||||
## csql
|
||||
|
||||
基本用法:
|
||||
|
||||
```sh
|
||||
csql [options]
|
||||
```
|
||||
|
||||
常用选项:
|
||||
|
||||
| 选项 | 说明 |
|
||||
| --- | --- |
|
||||
| `-u, --user USER` | 指定登录账号 |
|
||||
| `-d, --database DB` | 登录后选择数据库 |
|
||||
| `-f, --format FORMAT` | 输出格式:`table`、`json` 或 `csv` |
|
||||
| `-e, --execute SQL` | 执行一条 SQL 后退出 |
|
||||
| `--history FILE` | 指定历史记录文件 |
|
||||
| `--config FILE` | 指定配置文件 |
|
||||
| `-h, --help` | 显示帮助 |
|
||||
|
||||
示例:
|
||||
|
||||
```sh
|
||||
csql -d sales -e "SELECT * FROM orders LIMIT 5"
|
||||
csql -f json -e "SELECT count(*) FROM orders"
|
||||
```
|
||||
|
||||
### 交互模式
|
||||
|
||||
SQL 语句以分号结束,可跨多行输入。
|
||||
|
||||
常用元命令:
|
||||
|
||||
| 命令 | 作用 |
|
||||
| --- | --- |
|
||||
| `\q` | 退出 |
|
||||
| `\?` | 查看帮助 |
|
||||
| `\l` | 列出数据库 |
|
||||
| `\dt` | 列出当前数据库中的表 |
|
||||
| `\d <表>` | 查看表结构 |
|
||||
| `\c <库>` | 切换数据库 |
|
||||
| `\f <格式>` | 修改输出格式 |
|
||||
| `\dr` | 查看角色与授权信息(管理员) |
|
||||
|
||||
## 账号与权限
|
||||
|
||||
默认管理员账号为 `root`。普通账号创建后默认不拥有数据访问权限,需要管理员通过角色进行授权。
|
||||
|
||||
常用账号命令:
|
||||
|
||||
```sql
|
||||
CREATE USER alice IDENTIFIED BY 'password';
|
||||
ALTER USER alice IDENTIFIED BY 'new-password';
|
||||
DROP USER alice;
|
||||
```
|
||||
|
||||
常用角色和授权命令:
|
||||
|
||||
```sql
|
||||
CREATE ROLE analyst;
|
||||
GRANT SELECT ON orders TO analyst;
|
||||
GRANT analyst TO alice;
|
||||
REVOKE SELECT ON orders FROM analyst;
|
||||
REVOKE analyst FROM alice;
|
||||
DROP ROLE analyst;
|
||||
```
|
||||
|
||||
当前表级权限包括:`SELECT`、`INSERT`、`UPDATE`、`DELETE` 和 `ALL`。
|
||||
|
||||
管理员拥有完整权限;数据库、表、索引等结构管理操作仅允许管理员执行。
|
||||
|
||||
系统数据库 `system` 仅允许管理员访问。
|
||||
|
||||
## chusql-web
|
||||
|
||||
基本用法:
|
||||
|
||||
```sh
|
||||
chusql-web [options]
|
||||
```
|
||||
|
||||
常用选项:
|
||||
|
||||
| 选项 | 说明 |
|
||||
| --- | --- |
|
||||
| `--host H` | 监听地址 |
|
||||
| `--port N` | 监听端口 |
|
||||
| `--static DIR` | 静态资源目录 |
|
||||
| `--user NAME` | 管理员账号名 |
|
||||
| `--config FILE` | 指定配置文件 |
|
||||
| `-h, --help` | 显示帮助 |
|
||||
|
||||
其余请求大小、会话、登录限制、分页等参数通常通过 `chusql.toml` 配置即可。
|
||||
|
||||
## chusql-server
|
||||
|
||||
基本用法:
|
||||
|
||||
```sh
|
||||
chusql-server [options]
|
||||
```
|
||||
|
||||
常用选项:
|
||||
|
||||
| 选项 | 说明 |
|
||||
| --- | --- |
|
||||
| `--host H` | 数据库服务监听地址 |
|
||||
| `--port N` | 数据库服务监听端口 |
|
||||
| `--max-message N` | 单条请求大小上限 |
|
||||
| `--max-rows N` | 单次查询返回行数上限 |
|
||||
| `--config FILE` | 指定配置文件 |
|
||||
| `-h, --help` | 显示帮助 |
|
||||
|
||||
`chusql-server` 是数据目录的唯一直接访问者。Web、CLI 及其他客户端均通过数据库服务访问数据。
|
||||
@@ -0,0 +1,76 @@
|
||||
# 配置选项
|
||||
|
||||
ChuSQL 使用统一配置文件 `chusql.toml`。默认位置:
|
||||
|
||||
| 平台 | 路径 |
|
||||
| --- | --- |
|
||||
| Windows | `%APPDATA%\ChuSQL\chusql.toml` |
|
||||
| Linux / macOS | `$XDG_CONFIG_HOME/ChuSQL/chusql.toml`;未设置时为 `~/.config/ChuSQL/chusql.toml` |
|
||||
|
||||
`chusql-server`、`chusql-web` 和 `csql` 均可通过 `--config <path>` 临时指定其他配置文件。配置优先级为:**命令行参数 > 配置文件 > 内置默认值**。
|
||||
|
||||
## 存储配置
|
||||
|
||||
| 配置项 | 默认值 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `[page] size` | `4096` | 数据页大小(字节) |
|
||||
| `[btree] order` | `4` | B+ 树阶数 |
|
||||
| `[buffer] pool_size` | `1024` | 缓冲池页数 |
|
||||
| `[storage] data_dir` | 平台默认数据目录 | 数据文件保存位置 |
|
||||
| `[log] level` | `info` | 日志级别 |
|
||||
|
||||
数据目录仅由 `chusql-server` 访问。生产环境建议使用绝对路径。
|
||||
|
||||
## Web 配置
|
||||
|
||||
| 配置项 | 默认值 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `host` | `127.0.0.1` | Web 服务监听地址 |
|
||||
| `port` | `7778` | Web 服务端口 |
|
||||
| `static_dir` | `static` | 静态资源目录 |
|
||||
| `user` | `root` | 管理员账号名 |
|
||||
| `cookie_secure` | `false` | HTTPS 部署时应启用 |
|
||||
| `body_limit` | `65536` | 请求体大小上限(字节) |
|
||||
| `session_idle` | `28800` | 会话空闲超时(秒) |
|
||||
| `session_max` | `86400` | 会话最大存活时间(秒) |
|
||||
| `login_max_attempts` | `5` | 登录失败限制阈值 |
|
||||
| `login_window` | `300` | 登录限制统计窗口(秒) |
|
||||
| `rows_per_page` | `25` | 默认分页大小 |
|
||||
| `max_page_size` | `500` | 最大分页大小 |
|
||||
| `max_rows` | `1000` | 单次查询最大返回行数 |
|
||||
| `max_sql_length` | `20000` | SQL 最大字符数 |
|
||||
| `seed` | `false` | 空库时是否写入演示数据 |
|
||||
| `password_min_length` | `12` | 普通账号最短口令长度 |
|
||||
| `password_classes` | `2` | 口令至少包含的字符类别数 |
|
||||
|
||||
## Server 配置
|
||||
|
||||
| 配置项 | 默认值 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `host` | `127.0.0.1` | 数据库服务监听地址 |
|
||||
| `port` | `7777` | 数据库服务端口 |
|
||||
| `max_message` | `1048576` | 单条请求最大大小(字节) |
|
||||
| `max_rows` | `1000` | 单次查询最大返回行数 |
|
||||
|
||||
修改 Server 相关配置后需要重启 `chusql-server`。
|
||||
|
||||
## 账号与安全
|
||||
|
||||
账号口令不保存在配置文件中,而保存在系统数据库中。管理员口令在安装或系统引导时设置,之后可通过 SQL 或 Web 管理界面修改。
|
||||
|
||||
系统目录未完成初始化时,`chusql-server` 将拒绝启动并提示运行 `csql-bootstrap`。
|
||||
|
||||
对外部署时建议:
|
||||
|
||||
- 数据库服务仅监听受控网络接口;
|
||||
- Web 服务通过 HTTPS 或反向代理提供;
|
||||
- HTTPS 环境启用 `cookie_secure`。
|
||||
|
||||
## 修改配置
|
||||
|
||||
配置可通过以下方式修改:
|
||||
|
||||
1. 直接编辑 `chusql.toml`;
|
||||
2. 通过 Web 设置页面修改。
|
||||
|
||||
大多数配置在相关服务下次启动时生效。
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
# 安装与卸载
|
||||
|
||||
发行包已经包含编译后的程序,普通用户安装时无需安装 GHC 或 Rust 工具链。
|
||||
|
||||
## 在线安装
|
||||
|
||||
Linux / macOS:
|
||||
|
||||
```sh
|
||||
curl -fsSL https://raw.githubusercontent.com/TheBadRoger/ChuSQL/main/scripts/install.sh | sh -s -- --component web
|
||||
```
|
||||
|
||||
Windows PowerShell:
|
||||
|
||||
```powershell
|
||||
irm https://raw.githubusercontent.com/TheBadRoger/ChuSQL/main/scripts/install.ps1 -OutFile "$env:TEMP\install.ps1"
|
||||
& "$env:TEMP\install.ps1" -Component web
|
||||
```
|
||||
|
||||
## 安装方式
|
||||
|
||||
ChuSQL 支持三种安装方式:
|
||||
|
||||
| 方式 | 适用场景 |
|
||||
| --- | --- |
|
||||
| 在线安装 | 有网络,希望安装发行版本 |
|
||||
| 包内安装 | 已下载发行包,或处于离线环境 |
|
||||
| 源码安装 | 当前平台没有发行包,或需要自行修改源码 |
|
||||
|
||||
安装时可以选择 Web 管理端、命令行客户端,或同时安装两者。数据库服务及核心组件会按需安装。
|
||||
|
||||
安装过程中必须为管理员账号设置口令。口令不会以明文写入配置文件。
|
||||
|
||||
完成系统目录初始化后,安装程序默认会启动 `chusql-server`;如不希望自动启动,可使用 `--no-start`(Windows 为 `-NoStart`)。
|
||||
|
||||
## 包内安装
|
||||
|
||||
解压发行包后,在包根目录执行:
|
||||
|
||||
```sh
|
||||
./install.sh --component web
|
||||
```
|
||||
|
||||
Windows:
|
||||
|
||||
```powershell
|
||||
.\install.ps1 -Component web
|
||||
```
|
||||
|
||||
## 常用安装选项
|
||||
|
||||
| Linux / macOS | Windows | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `--component web\|cli\|both` | `-Component` | 选择安装组件 |
|
||||
| `--install-dir DIR` | `-InstallDir` | 指定安装目录 |
|
||||
| `--data-dir DIR` | `-DataDir` | 指定数据目录 |
|
||||
| `--user NAME` | `-RootUser` | 指定管理员账号名 |
|
||||
| `--no-start` | `-NoStart` | 安装后不自动启动服务 |
|
||||
| `--version TAG` | `-Version` | 指定发行版本 |
|
||||
| `--list-versions` | `-ListVersions` | 列出可安装版本 |
|
||||
| `--from-source` | — | 从源码构建并安装 |
|
||||
|
||||
自动化安装时建议通过环境变量提供管理员口令,避免口令出现在 shell 历史中。
|
||||
|
||||
## 从源码安装
|
||||
|
||||
源码安装需要 `git`、`cargo`、`stack` 和 `ghc`;部分 Linux 环境还需要 zlib 开发包。
|
||||
|
||||
```sh
|
||||
./install.sh --component web --from-source
|
||||
```
|
||||
|
||||
源码构建完成后的配置、初始化和启动流程与发行包安装一致。
|
||||
|
||||
## 安装完成后
|
||||
|
||||
默认安装包含以下主要内容:
|
||||
|
||||
- `chusql-server`:数据库服务;
|
||||
- `csql`:命令行客户端;
|
||||
- `chusql-web`:Web 管理端;
|
||||
- `csql-bootstrap`:系统目录初始化工具;
|
||||
- `chusql.toml`:全局配置文件;
|
||||
- 数据目录与日志目录。
|
||||
|
||||
常用命令:
|
||||
|
||||
```sh
|
||||
chusql-server
|
||||
csql
|
||||
csql-web
|
||||
```
|
||||
|
||||
管理员使用安装时设置的口令登录。
|
||||
|
||||
## 卸载
|
||||
|
||||
Linux / macOS:
|
||||
|
||||
```sh
|
||||
./uninstall.sh --yes
|
||||
```
|
||||
|
||||
Windows:
|
||||
|
||||
```powershell
|
||||
.\uninstall.ps1 -Yes
|
||||
```
|
||||
|
||||
如需保留数据,可使用 `--keep-data`(Windows 为 `-KeepData`);如需保留配置,可使用 `--keep-config`(Windows 为 `-KeepConfig`)。
|
||||
Reference in new issue
Block a user