Phi*_*lip 5 concurrency erlang
我正在使用Erlang开发一个Web服务.低延迟是一个目标.该服务提供了一组文件的多个视图.构建这些视图需要时间,因为我必须读入文件,将它们解析为CSV,将它们的字段存储在记录中等.
天真的方法是重新读取这些文件并为每个请求进行必要的转换,因此Web应用程序完全是无状态的.但我担心延迟.
另一种方法是创建一个服务器(实现gen_server
行为),在启动时准备这些视图并将它们存储在内存中LoopData
,然后根据需要将视图返回给Web worker.但这会降低并发性,因为此服务器一次处理一个请求.
Erlang中是否有一个设计模式支持在启动时进行一些昂贵的初始化,并允许并发访问初始化数据?(关键是这些数据是不可变的,所以我不担心互斥.)
您可以使用一个或多个 ETS 表来保存数据。
在初始化阶段填充表,然后让每个进程从中读取数据。
您可以将初始化和从表中的读取抽象到模块中,只是为了确保稍后可以切换实现(例如稍后使用 mnesia 或其他东西)。
请注意,ETS 表位于内存中(默认情况下),如果您需要更复杂的查询,可以使用 mnesia。
归档时间: |
|
查看次数: |
77 次 |
最近记录: |