我来自java背景,当我在oracle中看到用于连接池的java api时,oracle驱动程序本身提供了连接池。但是如果是cx_Oracle
,我只会看到包含threaded=true
或使用SessionPooling
的选项。
目前我将使用threaded-true选项。但我不确定使用此选项可以获得多少并发性。这是真正的连接池还是有另一种方法来完成这项工作。
cx_Oracle
文档说:
"螺纹参数应该是一个布尔表达式,表示Oracle是否应该使用互斥锁包装对连接的访问。在单线程应用程序中执行此操作会导致性能损失约10-15%,这就是默认值为False的原因。"
我们如何配置cx_Oracle
以建立连接池而不是会话池。因为在oracle中两者都不同吗?
感谢您的时间和建议。
答案 0 :(得分:1)
在Oracle OCI doc中有关于何时使用连接池与会话池的讨论点。
对于无状态连接(可以说是更常见的情况),请使用会话池:
所有会话池管理均由OCI处理。
与运行时负载平衡(RLB)事件集成以获得更好的性能。
与FAN事件和应用程序连续性集成以提高可用性。
与DRCP集成以获得更好的可扩展性。
答案 1 :(得分:1)
cx_Oracle不支持连接池,仅适用于session pools。如果您计划在应用程序中使用并发并且与使用会话池无关,则只需要threaded = True选项。使用这种技术可以获得非常合理的并发性,特别是如果数据库所需的时间远远超过在Python本身处理数据所需的时间。
正如克里斯提到的,你可以自己推动自己的"连接池以及Python中没有太多困难,但使用内置会话池功能有一些优势。
希望能回答你的问题!