Giter Site home page Giter Site logo

Comments (5)

Moritz-Langer avatar Moritz-Langer commented on August 31, 2024

On the weekend I started with an initial implementation along the line of the following:

class DatabaseConnection:
    """Database connection class to be used as 'with' statement.
    The class returns a connection object.
    """
    pool = None  # Class-level connection pool
    @classmethod
    def initialize_pool(cls, conn_dict):
        """Initialize the connection pool if not already initialized."""
        LOGGER.debug(f"conn_dict contains {conn_dict}")
        if DatabaseConnection.pool is None:
            DatabaseConnection.pool = oracledb.create_pool(
                            user=conn_dict["user"],
                            password=conn_dict["password"],
                            dsn=dsn,
                            min=2,  
                            max=10,  
                            increment=1, 
                        )

This looks promising and I will create a pull-request after some more polishing

from pygeoapi.

tomkralidis avatar tomkralidis commented on August 31, 2024

cc'ing @totycro and @8luewater for feedback/input.

from pygeoapi.

Moritz-Langer avatar Moritz-Langer commented on August 31, 2024

@8luewater I am currently finishing up on this.
We ran internal tests using locust which showed an around 10x improvement in speed using session pooling.
edit: 10x improvement given around 50 concurrent users

In the current design you would have to set environment variables like this to your linux / server environment:

export ORACLE_POOL_MIN=2
export ORACLE_POOL_MAX=10

Then the DatabaseConnection class uses these env variables as input parameters for the creation of a session pool.
When these env vars are not set, the regular behaviour is triggered and single connections are established for incomming requests.
@totycro and I discussed the issue of activating/configuring the session pool in the YAML file, but currently this is tricky since it would be global but would have to be written to every collection item in the yaml file.

Do you have any feedback/wishes/critique regarding this approach?

from pygeoapi.

8luewater avatar 8luewater commented on August 31, 2024

from pygeoapi.

tomkralidis avatar tomkralidis commented on August 31, 2024

Added in #1688 (thanks @Moritz-Langer!)

from pygeoapi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.