## StarRocks 与高效 Join:总结 StarRocks 通过优先处理规范化数据,并优化 Join *速度*,而非依赖反规范化来解决 OLAP 系统中 Join 缓慢的问题。本文深入探讨了 StarRocks 如何通过基于成本的优化器,专注于逻辑和分布式 Join 规划来实现这一目标。 该过程始于理解 Join 类型(内连接、外连接、半连接、反连接)以及优化所面临的挑战——选择合适的算法(偏好 Hash Join),确定最佳 Join 顺序(随着表数量增加呈指数级复杂),准确估计 Join 的有效性,以及考虑分布式系统中的数据分布。StarRocks 采用逻辑优化,例如转换低效的 Join 类型和下推谓词,以最大限度地减少处理的数据量。 对于分布式环境,StarRocks 利用 MPP 执行和各种 Join 策略(Shuffle、Broadcast、Bucket Shuffle、Colocate、Replicate),具体取决于数据分布和大小。它还利用“全局运行时过滤器”进一步减少 Join 执行期间的数据量。 最终,StarRocks 旨在最大限度地减少网络成本并最大化并行处理。**Demandbase、NAVER 和 Shopee** 的案例研究表明,通过利用 StarRocks 的高效 Join 功能,可以获得显著的性能提升(高达 10 倍)和成本降低,从而实现对复杂、多表数据集的实时分析。
## AI 黑客马拉松 & 文本冒险代理总结
作者受到利用认知架构原则增强 LLM 的想法驱动,参加了一个机械解释主题的 AI 黑客马拉松。目标是构建一个能够完成长远任务的代理,超越 LLM 通常的目光短浅。文本冒险游戏被选为理想的测试平台——复杂的文本世界,需要探索、解谜和记忆。
最初的实验使用了《Anchorhead》游戏与 Claude,首先使用简单的“聊天记录”框架,取得了有希望的早期进展。然而,由于长时间的交互,费用很快变得过高。试图通过有限上下文的“工作记忆”和语义草稿板来降低成本,实际上*阻碍*了性能,导致重复行为和进展缓慢。
作者随后探索了创建更小的自定义文本冒险游戏,观察到代理表现出对无关细节的执着等有趣行为。最终,《Anchorhead》的复杂性尽管笨重,但被证明更有价值。
未来的工作重点是提高代理性能,包括:特定领域的记忆(任务列表、地图)、自动化世界构建、手动地理工具以及情景记忆摘要,以从过去的运行中学习。该项目的代码是公开可用的。
## WebRacket:浏览器中的 Racket
WebRacket 是一个编译器,将 Racket 编程语言的一个子集翻译成 WebAssembly (wasm),从而使 Racket 代码可以直接在 Web 浏览器(和 Node.js)中运行。虽然完全支持 Racket 是最终目标,但目前的实现已经足够稳健,可以构建实用的 Web 应用程序,而无需 JavaScript。
主要特性包括一个 JavaScript 外函数接口 (FFI),提供对浏览器 API 的访问,例如 DOM、Canvas、MathJax、XTermJS 和 JSXGraph。该编译器利用标准的 Racket 扩展器,支持许多语法形式,但目前不支持模块和协程。
WebRacket 优先考虑与广泛支持的 WebAssembly 特性的兼容性,以实现广泛的浏览器支持(Chrome、Firefox、Safari)。开发重点是修复错误和支持模块,并计划添加复数和任意精度整数。
要开始使用,您需要 wasm-tools、Node.js、Racket 9.0 和 raco-static-web。示例包括 MathJax 编辑器、矩阵数字雨演示和太空侵略者游戏,展示了 WebRacket 的功能。