返回首页
最新
GO-LSM:构建一个日志结构合并树引擎
引言:
我一直对数据库的内部机制充满好奇,因此决定用Go语言构建自己的日志结构合并树(LSM-Tree)引擎,以理解写优化存储背后的“魔法”。
Go-LSM是一个持久化的键值存储引擎,管理从易失性内存到不可变磁盘存储的数据全生命周期。
技术亮点:
1. 持久性层(WAL)
为了确保零数据丢失,我实现了一个仅追加的预写日志(Write-Ahead Log)。
```
• 自定义二进制协议:[类型][键长度][值长度][键][值]
• 使用File.Sync()强制内核刷新到物理硬件
• 确保系统崩溃时的绝对持久性
```
2. 跳表内存表(SkipList MemTable)
我在内存层使用了跳表,而不是标准树结构。
```
• 提供O(log n)的搜索和插入,无需红黑树的重新平衡复杂性
• 保持键的字典序排序,以便最终的SSTable刷新
• 实现高效的内存到磁盘的转换
```
3. 基于SSTable尾部索引
我的SSTable在磁盘上使用尾部优先读取策略进行二进制搜索:
```
• 跳转到文件的最后8个字节以找到索引块指针
• 通过直接读取索引避免全文件扫描
• 在排序键上执行二进制搜索,实现O(log n)的磁盘查找
```
4. 维护层:合并
构建了一个K路合并的合并引擎,以处理性能优化:
```
• 处理多个SSTable层并将其合并为单个优化文件
• 通过减少每个查询需检查的文件数量来处理“读取放大”问题
• 处理“墓碑”以完成删除并回收磁盘空间
```
5. 工具与调试
自定义二进制解析器将原始二进制文件转换为人类可读的表格:
```
• lsm-dump:查看排序后的SSTable内容
• lsm-wal-dump:检查未刷新预写日志条目
• 允许深入检查内部存储层
```
关键工程经验:
从标准应用开发转向系统编程需要我在内存和I/O方面进行根本性的思维转变:
```
• 字节序逻辑:处理大端与小端转换以实现跨平台兼容性
• 文件偏移管理:手动管理字节偏移和文件指针定位
• 并发与线程安全:实现线程安全的内存表刷新机制
• 二进制协议设计:创建高效、紧凑的数据编码以确保持久性
```
代码库:
[https://github.com/Jyotishmoy12/LSM-Tree-in-Golang](https://github.com/Jyotishmoy12/LSM-Tree-in-Golang)
20年的代码生成工作最终达到了这里。YAML 1.2规范包含211个语法产生式。我将它们从Haskell参考实现转换为s表达式,使用Common Lisp编写了一个投影器,并在18种语言中生成了符合规范的解析器。所有解析器都通过了308/308的YAML测试套件测试。添加一种新语言的目标规范大约为300行。投影器在几秒钟内完成其余工作。
一个小时之前,我收到了以下消息:“API错误:达到速率限制”,这是在5x Max订阅的claude代码中出现的。<p>我并没有大量使用这个模型,但还是接受了这个提示。我等了10分钟,再次询问关于如何进行网站本地化任务的建议。这并不是一些复杂的代码,只是想了解在现有基础设施下应该采取什么路径。然而,仍然出现同样的错误信息。我检查了claude的状态,查看了HN,并启动了支持机器人,复习了API的速率限制。但一切看起来都正常,似乎没有超过限制。我又等了30分钟,尝试再次请求。错误信息依然存在,根据文档,它应该告诉我需要等待多长时间,但并没有。<p>还有其他人遇到这个问题吗?我在欧洲瑞士,使用的是Linux系统。
嗨,HN,
我们开发了一个 FROST (RFC-9591) 阈值 Schnorr 签名实现,作为 libsecp256k1 的扩展模块。
我们的目标不是创建另一个框架,而是想看看当 FROST 在一个最小化的、生产级的 C 加密库中被实现时会是什么样子。
亮点:
- 基于 bitcoin-core/secp256k1 的分支
- 兼容 C89
- 无外部加密依赖
- 兼容 RFC 测试向量
- 维护上游合并
主要适用于嵌入式或对性能敏感的系统,在这些系统中,添加完整的加密栈并不理想。
代码:
[https://github.com/bancaditalia/secp256k1-frost](https://github.com/bancaditalia/secp256k1-frost)
欢迎提问或提出批评意见。
嘿,HN!我在一家游戏公司工作,整天盯着代码看,晚上不想再写东西了。
所以我使用Claude和Cursor构建了这个——架构、设计、基础设施、CI/CD。我只是负责指导和审核,花了几个周末的时间。
这是我个人经常在Google上搜索的一些工具集合:
JSON格式化器、图片调整大小工具、时间戳/时区转换器、UUID生成器、二维码生成器,以及大约30个其他工具。
很高兴回答有关AI工作流程或其他任何问题。