Comments (5)
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.
cc'ing @totycro and @8luewater for feedback/input.
from pygeoapi.
@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.
from pygeoapi.
Added in #1688 (thanks @Moritz-Langer!)
from pygeoapi.
Related Issues (20)
- add TinyDB feature provider
- add CITE setup for Tiles HOT 2
- EDR HTML View should offer more information HOT 1
- promote process manager concept to the application level
- Error in title of links to list of jobs in json format HOT 1
- Link to `/jobs` in the set of links returned by `/processes`?
- Starlette APP cors setting only permits GET requests
- EDR /items Queries Always Routed to OAF Provider HOT 1
- Manager supported by SqlAlchemy (PostgreSQL) fail to configure using connection as per RFC 3986
- update Docker container offerings
- Fix Documentation for OGC API Coverages Formats
- validate pydantic version when testing on Debian HOT 3
- Add wallet authentication for Session Pools for Oracle Provider
- pygeoapi allows the registration of invalid EDR queries HOT 1
- Single Item EDR Locations Query has query args other than `f=` in openapi UI
- Replace all references to access controlled map tiles HOT 1
- EDR Xarray covjson reordering y
- EDR time axis compliance with coverageJSON
- OGC API - Coverages collection with xarray provider fails to return CoverageJSON when a field is selected
- Prevent Echoing of Bad Query Parameters in Error Messages
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pygeoapi.