python - ZODB pool_size的合理设置

标签 python connection-pooling zodb

多线程 Web 应用程序中 ZODB.DB 调用中 pool_size 的合理默认值是多少?

保留实际的默认值7会给我一些连接警告,即使我是唯一一个在数据库交互处理程序中导航的人。是否可以设置太高的数字?哪些因素会影响到底将其设置为什么?

最佳答案

池大小只是一个“指导方针”;当超过该大小时,会记录警告;如果您要使用连接数,则会记录CRITICAL日志消息。这些表明您可能在应用程序中使用了太多连接。

当您关闭连接时,池将尝试将保留的连接数减少到池大小。

您需要将其设置为应用程序中的最大线程数。对于 Tornado,我认为它几乎完全使用异步事件而不是线程,这可能更难确定;如果 Tornado 中有可配置的最大并发连接数,则需要将池大小设置为该数字。

不过,我不确定当您的应用程序扩展到数百或数千个并发连接时 ZODB 将如何执行。到目前为止,我只使用了最多 100 个左右的并发连接,分布在多个进程甚至机器上(使用 ZEO 或 RelStorage 跨这些进程为 ZODB 提供服务)。

我想说,如果这些连接中的大多数只是读取,那么应该没问题;就可扩展性而言,它同时写入同一个对象,这是 ZODB 的弱点。

关于python - ZODB pool_size的合理设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914198/

相关文章:

python - 从两个进程访问 ZODB

Solr 不索引 blob 文件

python - 如何使用 Pyramid 访问 Plone 生成并保存在 ZODB 上的数据?

python - 通过子类化 `type` 类来实现类描述符

Python:高效调用多个返回函数的子集变量

java - 是否有必要为每个连接从 JNDI 获取一个新的数据源?

django - 监控 django postgres 连接

java - C3p0 中的锁排序

python - Python 2.7 的突变测试工具

python - Scikit-learn:preprocessing.scale() 与 preprocessing.StandardScaler()