|
@@ -17,6 +17,14 @@ except:
|
|
|
|
|
|
db_pool = None
|
|
db_pool = None
|
|
|
|
|
|
|
|
+PG_POOL_SIZE = 4
|
|
|
|
+
|
|
|
|
+class NoResetConnection(asyncpg.Connection):
|
|
|
|
+ __slots__ = ()
|
|
|
|
+
|
|
|
|
+ def get_reset_query(self):
|
|
|
|
+ return ""
|
|
|
|
+
|
|
async def db_setup():
|
|
async def db_setup():
|
|
global db_pool
|
|
global db_pool
|
|
db_pool = await asyncpg.create_pool(
|
|
db_pool = await asyncpg.create_pool(
|
|
@@ -24,7 +32,10 @@ async def db_setup():
|
|
password=os.getenv('PGPASS', 'benchmarkdbpass'),
|
|
password=os.getenv('PGPASS', 'benchmarkdbpass'),
|
|
database='hello_world',
|
|
database='hello_world',
|
|
host='tfb-database',
|
|
host='tfb-database',
|
|
- port=5432
|
|
|
|
|
|
+ port=5432,
|
|
|
|
+ min_size=PG_POOL_SIZE,
|
|
|
|
+ max_size=PG_POOL_SIZE,
|
|
|
|
+ connection_class=NoResetConnection,
|
|
)
|
|
)
|
|
|
|
|
|
READ_ROW_SQL = 'SELECT "randomnumber", "id" FROM "world" WHERE id = $1'
|
|
READ_ROW_SQL = 'SELECT "randomnumber", "id" FROM "world" WHERE id = $1'
|
|
@@ -102,15 +113,10 @@ async def multiple_database_queries(scope, receive, send):
|
|
row_ids = random.sample(range(1, 10000), num_queries)
|
|
row_ids = random.sample(range(1, 10000), num_queries)
|
|
worlds = [ ]
|
|
worlds = [ ]
|
|
|
|
|
|
- db_conn = await db_pool.acquire()
|
|
|
|
- try:
|
|
|
|
- statement = await db_conn.prepare(READ_ROW_SQL)
|
|
|
|
- for row_id in row_ids:
|
|
|
|
- number = await statement.fetchval(row_id)
|
|
|
|
- worlds.append( {'id': row_id, 'randomNumber': number} )
|
|
|
|
- finally:
|
|
|
|
- await db_pool.release(db_conn)
|
|
|
|
|
|
+ async with db_pool.acquire() as db_conn:
|
|
|
|
+ rows = await db_conn.fetchmany(READ_ROW_SQL, [ (v, ) for v in row_ids ] )
|
|
|
|
|
|
|
|
+ worlds = [ { 'id': row_id, 'randomNumber': number[0] } for row_id, number in zip(row_ids, rows) ]
|
|
content = jsonify(worlds)
|
|
content = jsonify(worlds)
|
|
await send(JSON_RESPONSE)
|
|
await send(JSON_RESPONSE)
|
|
await send({
|
|
await send({
|
|
@@ -154,14 +160,9 @@ async def database_updates(scope, receive, send):
|
|
|
|
|
|
worlds = [ {"id": row_id, "randomNumber": number} for row_id, number in updates ]
|
|
worlds = [ {"id": row_id, "randomNumber": number} for row_id, number in updates ]
|
|
|
|
|
|
- db_conn = await db_pool.acquire()
|
|
|
|
- try:
|
|
|
|
- statement = await db_conn.prepare(READ_ROW_SQL)
|
|
|
|
- for row_id, _ in updates:
|
|
|
|
- await statement.fetchval(row_id)
|
|
|
|
|
|
+ async with db_pool.acquire() as db_conn:
|
|
|
|
+ await db_conn.executemany(READ_ROW_SQL, [ (i[0], ) for i in updates ] )
|
|
await db_conn.executemany(WRITE_ROW_SQL, updates)
|
|
await db_conn.executemany(WRITE_ROW_SQL, updates)
|
|
- finally:
|
|
|
|
- await db_pool.release(db_conn)
|
|
|
|
|
|
|
|
content = jsonify(worlds)
|
|
content = jsonify(worlds)
|
|
await send(JSON_RESPONSE)
|
|
await send(JSON_RESPONSE)
|