【发布时间】:2019-11-12 21:44:30
【问题描述】:
我有一个带有 Elixir 1.9、Phoenix 1.4 和 PostgreSQL 数据库的 Phoenix 应用程序。此应用用作 API 服务器。
它需要这样的功能:
假设它运行 1000 个并发进程连接到数据库池大小为 100 的数据库。每个进程需要运行 5 个不同的查询。
通常在这样的设置中,1000 个进程将共享池中的 100 个 DBConnection,并轮流运行查询,每个进程将运行 1 或 2 个查询,或几个查询,并将连接提供给另一个要运行的进程。这些进程不断共享池中的连接以运行查询,直到它们都完成每个查询的所有 5 个查询。
问题:是否有任何配置或指令强制每个进程完成所有 5 个查询,然后才能将连接返回给池以共享?
【问题讨论】:
-
我不明白你为什么要这样做,但无论如何,将查询包装在事务中应该可以。
-
每个进程都是一个任务,它通过不同的查询集以不同的方式进行,每个查询都取决于前一个的结果,因此将它们全部包装在事务中并不方便。但这是一个有趣的想法。我会看看我们是否可以以某种方式利用它。
标签: elixir connection-pooling ecto phoenix