googleapis / googleapis/google-cloud-python

Re-using a session pool on connect() when using python-spanner with sqlalchemy

Offen
#15,674 3 Kommentare 0 Reaktionen 1 zugewiesene Person Beansprucht von @olavloite Auf GitHub ansehen
api: spanner priority: p3 type: feature request
Vorherrschende Sprache
Python
Sterne
5.4k
Forks
1.8k
Ø Merge
3 T. 4 Std.
Gemergte PRs (30 T.)
122

Beschreibung

**Is your feature request related to a problem? Please describe.**
When using SQL Alchemy with python-spanner-sqlalchemy, I've noticed that we're running `.bind()`, instantiating the `database` object and executing `BatchCreateSessions` for every single `connect()` call, which adds quite a bit of additional overhead before the query even executes. Main overhead that I saw was `BatchCreateSessions` when using a `PingingPool`.

**Describe the solution you'd like**
Would like the ability to pass in an existing `database` object (or have it be idempotent/detect that there's already a pool) so that the same pool and its pre-created sessions can be re-used for every SQL alchemy connection checkout, similar to how using the raw spanner client works.

**Describe alternatives you've considered**
I've tried passing a pool to the connect(), but it still recreates the sessions.

## Attempt 1
Draft PR: https://github.com/googleapis/python-spanner/pull/1493/changes

While this PR works for my specific use case (SQL Alchemy x python-spanner-sqlalchemy + PingingPool), I am not clear of the implications of allowing the re-use of the database object. Would appreciate any guidance here

PR contains a benchmarking script that tests a 7 combinations (raw spanner client, mix of values for QueuePool/StaticPool x Spanner's PingingPool):

Image

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.