feat: v0.2.0 AriaEngine 自研存储引擎
- 新增 AriaEngine: LSM-Tree 页面式存储引擎,19 个模块,~3500 行 TS - page/: Slotted Page 格式 (header/slot/tuple/format) + CRC32 - buffer/: Buffer Pool (LRU 缓存 + 驱逐策略) - index/: LSM-Tree (MemTable 红黑树 + SSTable + Bloom Filter + Merge Iterator) - wal/: WAL 日志 (二进制格式) + Checkpoint 管理 - transaction/: MVCC 版本链 + 快照隔离 - store/: IndexedDB / Memory 双后端抽象 - compression/: LZ4 页面压缩 - 完整持久化: Schema 自动保存、SSTable 元数据管理、WAL 恢复 - 事务感知 CRUD: insert/update/delete 在事务中缓冲到 snapshot - mode: 'aria' 激活自研引擎 - 新增 7 个测试文件,测试数 318 → 524,套件 20 → 27 - aria-page.test.ts (32 tests): Page 格式单元测试 - aria-index.test.ts (26 tests): Bloom Filter + MemTable - aria-sstable.test.ts (9 tests): SSTable Builder + Reader - aria-buffer.test.ts (25 tests): LRU + Eviction + Buffer Pool - aria-wal-mvcc.test.ts (22 tests): WAL 编解码 + MVCC 事务 - aria-compress.test.ts (11 tests): LZ4 + Merge Iterator - aria.test.ts (80 tests): AriaEngine 集成 + 边界测试 - Bug 修复: LRUList size 跟踪、WAL 缓冲区越界、ColumnEncoding 导入 - 全面更新 README.md + site/ 站点文件 (index/docs/demo)
This commit is contained in:
+65
-29
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>🧪 在线演示 — MetonaSqlark v0.1.14</title>
|
||||
<title>🧪 在线演示 — MetonaSqlark v0.2.0</title>
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%236366f1'/><text x='16' y='22' text-anchor='middle' font-size='20' fill='white'>◈</text></svg>">
|
||||
<style>
|
||||
:root {
|
||||
@@ -83,27 +83,28 @@
|
||||
<a href="docs.html">文档</a>
|
||||
<a href="demo.html" class="nav-active">演示</a>
|
||||
</nav>
|
||||
<div class="status"><span class="dot"></span> Memory 模式 — v0.1.14</div>
|
||||
<div class="status"><span class="dot"></span> Memory 模式 — v0.2.0</div>
|
||||
</header>
|
||||
|
||||
<div class="main">
|
||||
<div class="editor-panel">
|
||||
<div class="editor-area">
|
||||
<textarea id="sql-input" placeholder="输入 SQL 语句... SELECT * FROM users; INSERT INTO users VALUES ('4', 'Diana', 'diana@test.com', 28); SELECT u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id;">-- 🚀 MetonaSqlark v0.1.14 在线演示
|
||||
-- 已预置 users / orders / products 表数据
|
||||
|
||||
-- 查看所有数据
|
||||
SELECT * FROM users;
|
||||
|
||||
-- 条件查询 + 排序
|
||||
SELECT name, age FROM users WHERE age > 25 ORDER BY age DESC;
|
||||
|
||||
-- JOIN 多表关联
|
||||
SELECT u.name, o.product, o.amount
|
||||
FROM users u INNER JOIN orders o ON u.id = o.user_id;
|
||||
|
||||
-- 聚合统计
|
||||
SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;</textarea>
|
||||
<textarea id="sql-input" placeholder="输入 SQL 语句... SELECT * FROM users; INSERT INTO users VALUES ('4', 'Diana', 'diana@test.com', 28); SELECT u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id;">-- 🚀 MetonaSqlark v0.2.0 在线演示
|
||||
-- 已预置 users / orders / products 表数据
|
||||
-- 新特性: AriaEngine · LSM-Tree · WAL · MVCC
|
||||
|
||||
-- 查看所有数据
|
||||
SELECT * FROM users;
|
||||
|
||||
-- 条件查询 + 排序
|
||||
SELECT name, age FROM users WHERE age > 25 ORDER BY age DESC;
|
||||
|
||||
-- JOIN 多表关联
|
||||
SELECT u.name, o.product, o.amount
|
||||
FROM users u INNER JOIN orders o ON u.id = o.user_id;
|
||||
|
||||
-- 聚合统计
|
||||
SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;</textarea>
|
||||
<div class="toolbar">
|
||||
<button class="btn btn-run" onclick="runQuery()">▶ 执行 (Ctrl+Enter)</button>
|
||||
<button class="btn btn-clear" onclick="clearResults()">🗑 清空</button>
|
||||
@@ -116,8 +117,9 @@ SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;</textarea>
|
||||
<button class="btn btn-preset" onclick="loadPreset('subquery')">🔍 子查询</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('tx')">🔒 事务</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('scalar')">🎯 标量子查询</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('cascade')">🔗 级联</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('adv')">🧪 高级</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('cascade')">🔗 级联</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('adv')">🧪 高级</button>
|
||||
<button class="btn btn-preset" onclick="loadPreset('aria')" style="color:#ec4899;border-color:#ec4899;">🌲 Aria</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -465,9 +467,43 @@ ORDER BY o.amount DESC
|
||||
LIMIT 5 OFFSET 0;
|
||||
|
||||
-- NOT LIKE 模糊排除
|
||||
SELECT * FROM users
|
||||
WHERE name NOT LIKE 'A%' AND age > 20;`
|
||||
};
|
||||
SELECT * FROM users
|
||||
WHERE name NOT LIKE 'A%' AND age > 20;`,
|
||||
aria: `-- 🌲 AriaEngine 演示 (v0.2.0)
|
||||
-- AriaEngine: LSM-Tree 自研存储引擎
|
||||
-- 支持 WAL 崩溃恢复 + MVCC 快照隔离
|
||||
|
||||
-- 基础 CRUD 完全兼容
|
||||
CREATE TABLE IF NOT EXISTS tasks (
|
||||
id STRING PRIMARY KEY,
|
||||
title STRING NOT NULL,
|
||||
done BOOLEAN DEFAULT false
|
||||
);
|
||||
|
||||
-- 插入数据
|
||||
INSERT INTO tasks VALUES ('t1', 'Implement AriaEngine', false);
|
||||
INSERT INTO tasks VALUES ('t2', 'Write tests', false);
|
||||
INSERT INTO tasks VALUES ('t3', 'Update docs', true);
|
||||
|
||||
-- 查询
|
||||
SELECT * FROM tasks ORDER BY title;
|
||||
|
||||
-- 聚合统计
|
||||
SELECT done, COUNT(*) as cnt FROM tasks GROUP BY done;
|
||||
|
||||
-- AriaEngine 特性:
|
||||
-- • LSM-Tree: MemTable (红黑树) → SSTable 多级索引
|
||||
-- • WAL: Write-Ahead Log 保证崩溃恢复
|
||||
-- • MVCC: 版本链 + 快照隔离
|
||||
-- • Buffer Pool: LRU 页面缓存 (256页 ~ 1MB)
|
||||
-- • Bloom Filter: FNV-1a + Murmur 双哈希
|
||||
-- • Slotted Page: 4KB 页面 + Tuple 二进制编码
|
||||
|
||||
-- 生产环境: mode: 'aria' 激活自研引擎
|
||||
-- const db = await MetonaSqlark.create({
|
||||
-- name: 'my-app', mode: 'aria'
|
||||
-- });`,
|
||||
};
|
||||
|
||||
function loadPreset(name) {
|
||||
if (presets[name]) {
|
||||
@@ -484,13 +520,13 @@ document.addEventListener('keydown', e => {
|
||||
}
|
||||
});
|
||||
|
||||
// Boot
|
||||
initDB().then(() => {
|
||||
console.log('✅ MetonaSqlark v0.1.14 demo ready');
|
||||
setTimeout(runQuery, 300);
|
||||
}).catch(err => {
|
||||
renderError('初始化失败: ' + err.message);
|
||||
});
|
||||
// Boot
|
||||
initDB().then(() => {
|
||||
console.log('✅ MetonaSqlark v0.2.0 demo ready');
|
||||
setTimeout(runQuery, 300);
|
||||
}).catch(err => {
|
||||
renderError('初始化失败: ' + err.message);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user