接續上文,本文詳細講解 MySQLFS 的讀寫實現、主鍵/索引目錄結構、符號鏈接實現 MIN/MAX/SUM/AVG、索引排序遍歷、全局狀態文件,展示將關係數據庫操作完全文件系統化的設計巧思。
/mnt/mysql/mydata/invoice/1/invoice_id /mnt/mysql/mydata/invoice/1/invoice_no /mnt/mysql/mydata/invoice/1/payee /mnt/mysql/mydata/invoice/2/invoice_id ...
/mnt/mysql/mydata/invoice/.table # 表結構 /mnt/mysql/mydata/invoice/1/.record # 第1行完整數據 /mnt/mysql/mydata/invoice/1/invoice_id # 仍保留單欄文件 /mnt/mysql/mydata/invoice/1/invoice_no /mnt/mysql/mydata/invoice/1/payee ...
隱藏文件(以 . 開頭)防止重複顯示,方便文本瀏覽器查看整行。
無需 SQL,直接讀取特殊符號鏈接文件即可獲得聚合值:
# 主鍵最大值 → 指向擁有最大主鍵的行目錄 /mnt/mysql/mydata/invoice/invoice_id/.max → /mnt/mysql/mydata/invoice/3/ # 欄位最大值 /mnt/mysql/mydata/invoice/payee/.max → 對應行目錄 # 支援函數:.min .max .sum .avg .count # 讀取文件內容即得結果,極簡高效
/mnt/mysql/mydata/.keys/
├── .primary_key/ → 符號鏈接指向 invoice_id/
├── invoice_id/
│ └── .type # 內容: "PRIMARY KEY"
├── payee/
│ └── .type # 內容: "KEY"
└── payee/asc/ # 升序索引遍歷
├── link_to_row_1
├── link_to_row_2
└── link_to_row_3
# PHP readdir() 直接讀取 asc/ 目錄即得升序行鏈接
# desc/ 目錄提供降序遍歷
| 文件路徑 | 含義 |
|---|---|
| /mountpoint/.version | MySQLFS 版本 |
| /mountpoint/.last_insert_id | 最後 INSERT 自增 ID |
| /mountpoint/.uptime | 服務器運行秒數 |
| /mountpoint/db/.raid | RAID 模式 (0/1) |
| /mountpoint/db/.type | 默認表引擎 |
| /mountpoint/db/.tables | 表列表 |
| /mountpoint/db/table/.created | 建表時間 |
| /mountpoint/db/table/.last_updated | 最後更新時間 |
| /mountpoint/db/table/.last_checked | 最後檢查時間 |
| /mountpoint/db/table/.count | 行數 |
echo 'value' > /mnt/mysql/db/table/pk/col 寫入mkdir 創建行、rmdir 刪除行include('/mnt/mysql/config/app/setting') 替代數十行連接代碼cat log.txt > /mnt/mysql/logs/app/msg 入庫