maybe we will just use beaker with our bottle framework - thought it was 
duplicative to have redis since we have postgres and lookup speed should beĀ  
trivial since session only has a couple of small fields like account id and role

Sent from Type Mail



On Oct 14, 2015, 12:16, at 12:16, Jonathan Vanasco <postg...@2xlp.com> wrote:
>
>On Oct 7, 2015, at 11:58 AM, john.tiger wrote:
>
>> has anyone used postgres jsonb for holding session ?  Since server
>side session is really just a piece of data, why bother with special
>"session" plugins and just use postgres to hold the data and retrieve
>it with psycopg2 ?  Maybe use some trigger if session changes?    We
>are using python Bottle with psycopg2 (super simple, powerful combo) -
>are we missing something magical about session plugins ?
>
>I previously used TEXT or BLOB for holding session data, and pickled
>the data.  I can't remember.
>
>If you're going to use PostgresSQL for the session, the big performance
>tip is to use partial index on the session key (assuming it's an
>md5-like hash).
>
>So you'd want a table that is something like this:
>
>       CREATE TABLE session(
>               session_id VARCHAR(32) PRIMARY KEY,
>               session_data TEXT
>       );
>       CREATE INDEX idx_session_partial ON session(substr(session_id , 0,5))
>
>Then query like this
>
>       SELECT * FROM session WHERE session_id = :session_id AND
>substr(session_id, 0, 5) = :session_id_substring ; 
>       SELECT * FROM session WHERE session_id = :session_id AND
>substr(session_id, 0, 5) = substr(:session_id, 0, 5) ; 
>
>That will get the planner to use the partial index first, before using
>the session_id index.  Depending on how many items are in your table,
>it can make your SELECTS several orders of magnitude faster.
>
>As for session plugins -- a lot of people in the  web frameworks
>community are abandoning server side sessions for client side sessions.
>They are generally easier to handle state across clusters and data
>centers.  Some server side session-like data is still needed, but it's
>often assembled from data in the client side.
>
>Most of the Python session plugins I've used have some sort of status
>check coupled with a cleanup function/middleware component to see if
>the object has changed at all.  This way UPDATES only occur when
>needed.
>
>FWIW, I ended up migrating our sessions into redis.  We already had
>redis running on the cluster, and offloading it got a lot more
>performance our Postgres without scaling our hardware.   There just
>isn't much of a reason for having pg manage a simple KV store.

Reply via email to