Clojure 高性能编程与递归函数实现
1. 限流与缓冲
在处理数据时,限流是一个重要的问题。令牌桶(Token bucket)和漏桶(Leaky bucket)算法在限流方面非常有用。细粒度的限流需要对数据项进行缓冲,以维持统一的速率。缓冲会消耗内存,并且通常需要对数据进行排序,队列、管道和持久存储通常能很好地满足这一需求。但由于系统限制,缓冲和排队可能会受到背压的影响。
2. 预计算与缓存
在数据处理过程中,常常会遇到一些通用的计算步骤,后续会有多种不同的处理步骤。对于高延迟的通用计算,将其计算一次并以摘要形式存储是很有意义的,后续步骤可以直接使用摘要数据,从而降低整体延迟。这也被称为半计算数据的分段处理,是优化非平凡数据处理的常用技术。
Clojure 对缓存有不错的支持。内置的 clojure.core/memoize 函数可以对计算结果进行基本的缓存,但在使用特定缓存策略和可插拔后端方面缺乏灵活性。Clojure 贡献库 core.memoize 通过提供多种配置选项弥补了这一不足。 core.memoize 的功能也可以作为一个独立的缓存库使用,其通用部分被提取为一个名为 core.cache 的 Clojure 贡献库, core.memoize 就是基于它实现的。
对于分布式缓存,开源的 memcached 项目是一个流行的内存分布式键值/对象存储,可作为 Web 应用的缓存服务器。它通过对键进行哈希来确定存储值的服务器,并且没有开箱即用的复
超级会员免费看
订阅专栏 解锁全文
42

被折叠的 条评论
为什么被折叠?



