gpt4 book ai didi

elixir - 在 GenServer 中保存大 map ,这是一个有效的用例吗?

转载 作者:行者123 更新时间:2023-12-02 00:40:05 24 4
gpt4 key购买 nike

这可能是 GenServer 的有效用途吗:

如果process_id 是user_id 并且是唯一的。 Process 包含通过 DB 生成的大数据 map 的查询结果。现在,如果 100 个用户登录到系统并请求他们的数据映射,他们都将保存在自己的进程中,由唯一的 user_id 引用

因此,在请求 map 时,我将检查是否有一个带有 user_id(即进程 ID)的进程,然后抓取它并将其反馈给用户,如果没有,我将创建它并将其放入新状态

现在如果用户更新了他的 map ,在更新时,我确保更新状态或创建一个新的。

感谢您的指导

最佳答案

除非您有上百万用户登录,否则这是完全有效的。这通常在 Erlang 生态系统中使用所谓的处理。

主要原则是:您将进程池的大小限制为 100(5000,无论如何,这主要取决于您的 HW 容量)并为新来者使用任何抢占式存储(如果容量不足,则最旧的死亡)超过限制。)

您可能会考虑序列化这些移位的数据,或生成新节点,或其他任何方式。通常,保持状态的进程是 OTP 中的首选解决方案,除非您达到内存限制。在这种情况下,您可能会选择加入一些持久性存储,例如 DETS 或(更好)mnesia .

值得注意的是,Elixir 提供了 Agent用于此目的的模块,但我从不使用它,因为普通的旧好 GenServer 恕我直言,这是一个更清晰的概念。

关于elixir - 在 GenServer 中保存大 map ,这是一个有效的用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47327933/

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