是否可以选择Django在每个客户端/会话的基础上对每个请求使用的db连接(持久性)?

2024-04-28 07:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够告诉某人(django,pgBouncer,或者任何可以为我提供此服务的人)总是在每个客户机/会话的基础上向我提供与数据库相同的连接(在本例中是PostgreSQL),而不是每次随机获得一个连接(或者为此创建一个新的连接)

据我所知:

  1. Django的CONN\u MAX\u AGE可以控制连接的生存期,因此 很好。这也将对业绩产生积极影响 (无连接设置惩罚)

  2. 一些池包(pgBouncer例如)可以保存连接,并根据需要将它们交给我。我们快到了

我唯一缺少的是让pgBouncer(或其他类似工具)为我提供一个特定的db连接,而不是“池中的一个”。这很重要,因为我想控制事务的生存期。我希望能够打开一个事务,然后发送一系列命令,然后手动提交所有工作,或者在出现故障时回滚所有内容

很多年前,我已经实现了一些非常类似于我现在正在寻找的东西。它是一个简单的C语言连接池,一方面可以容纳客户机所需的与oracle的连接,另一方面,它可以让这些客户机有机会根据某个ID(例如PHP会话ID)恢复这些精确的连接,这样用户就可以获得某个数据库对象/行的锁,即使在apache进程死后,锁仍然会保持。从那时起,会话所有者就完全控制了该行,直到他决定是时候提交它,或者直到后端决定是时候让事务空闲了


Tags: djangoid数据库age客户机postgresqlconn事务