1作者: Jyotishmoy大约 1 个月前原帖
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)
4作者: johnagrillo62大约 1 个月前原帖
20年的代码生成工作最终达到了这里。YAML 1.2规范包含211个语法产生式。我将它们从Haskell参考实现转换为s表达式,使用Common Lisp编写了一个投影器,并在18种语言中生成了符合规范的解析器。所有解析器都通过了308/308的YAML测试套件测试。添加一种新语言的目标规范大约为300行。投影器在几秒钟内完成其余工作。
3作者: busssard大约 1 个月前原帖
一个小时之前,我收到了以下消息:“API错误:达到速率限制”,这是在5x Max订阅的claude代码中出现的。<p>我并没有大量使用这个模型,但还是接受了这个提示。我等了10分钟,再次询问关于如何进行网站本地化任务的建议。这并不是一些复杂的代码,只是想了解在现有基础设施下应该采取什么路径。然而,仍然出现同样的错误信息。我检查了claude的状态,查看了HN,并启动了支持机器人,复习了API的速率限制。但一切看起来都正常,似乎没有超过限制。我又等了30分钟,尝试再次请求。错误信息依然存在,根据文档,它应该告诉我需要等待多长时间,但并没有。<p>还有其他人遇到这个问题吗?我在欧洲瑞士,使用的是Linux系统。
1作者: mnardelli大约 1 个月前原帖
嗨,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) 欢迎提问或提出批评意见。
1作者: harrykoreanlee大约 1 个月前原帖
嘿,HN!我在一家游戏公司工作,整天盯着代码看,晚上不想再写东西了。 所以我使用Claude和Cursor构建了这个——架构、设计、基础设施、CI/CD。我只是负责指导和审核,花了几个周末的时间。 这是我个人经常在Google上搜索的一些工具集合: JSON格式化器、图片调整大小工具、时间戳/时区转换器、UUID生成器、二维码生成器,以及大约30个其他工具。 很高兴回答有关AI工作流程或其他任何问题。