gpt4 book ai didi

concurrency - Erlang:设计一个不可变但启动缓慢的服务组件

转载 作者:行者123 更新时间:2023-12-04 02:40:51 26 4
gpt4 key购买 nike

我正在使用 Erlang 开发 Web 服务。低延迟是一个目标。该服务提供一组文件的多个 View 。构建这些 View 需要时间,因为我必须读取文件,将它们解析为 CSV,将它们的字段存储在记录中,等等。

天真的方法是重新读取这些文件并对每个请求进行必要的转换,因此 Web 应用程序是完全无状态的。但我担心延迟。

另一种方法是创建一个服务器(实现 gen_server 行为),在启动时准备这些 View 并将它们存储在内存中作为 LoopData ,然后根据需要将 View 返回给网络 worker 。但这会降低并发性,因为该服务器一次处理一个请求。

Erlang 中是否有一种设计模式支持在启动时进行一些昂贵的初始化,但允许并发访问初始化数据? (关键是这些数据是不可变的,所以我不关心互斥。)

最佳答案

您可以使用一个或多个 ETS 表来保存您的数据。

在初始化阶段填充表,然后从中读取每个进程。

您可以将初始化和从表中读取到模块中,以确保稍后可以切换实现(例如稍后使用 mnesia 或其他东西)。

请注意,ETS 表在内存中(默认情况下),如果您需要更复杂的查询,可以使用 mnesia。

关于concurrency - Erlang:设计一个不可变但启动缓慢的服务组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41108462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com