From fddca40ab0704bfa6af44a9adb7fa5007f8ac4ba Mon Sep 17 00:00:00 2001 From: Elvis Pranskevichus Date: Thu, 22 Jun 2023 16:28:05 -0700 Subject: [PATCH] Update benchmarks, add psycopg3 Fixes: #924 --- README.rst | 7 +++---- performance.png | Bin 23944 -> 17878 bytes 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index e5212156..42c7fc26 100644 --- a/README.rst +++ b/README.rst @@ -28,15 +28,14 @@ The project documentation can be found Performance ----------- -In our testing asyncpg is, on average, **3x** faster than psycopg2 -(and its asyncio variant -- aiopg). +In our testing asyncpg is, on average, **5x** faster than psycopg3. .. image:: https://raw.githubusercontent.com/MagicStack/asyncpg/master/performance.png - :target: https://gistpreview.github.io/?b8eac294ac85da177ff82f784ff2cb60 + :target: https://gistpreview.github.io/?0ed296e93523831ea0918d42dd1258c2 The above results are a geometric mean of benchmarks obtained with PostgreSQL `client driver benchmarking toolbench `_ -in November 2020 (click on the chart to see full details). +in June 2023 (click on the chart to see full details). Features diff --git a/performance.png b/performance.png index d5f9d5071ff3fe26994f1057952180794e3cad03..b4a5726f8a2b81b6d22edc109cda5280c1b8fc72 100644 GIT binary patch literal 17878 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 literal 23944 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