1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/ihatemoney_ynh.git synced 2024-09-03 19:26:15 +02:00
ihatemoney_ynh/budget
Baptiste Jonglez 8e5ac8ae98 Optimise SQL queries when computing balance
This avoids creating thousands of small SQL queries when computing the
balance of users.  This significantly improves the performance of
displaying the main page of a project, since the balance of users is
displayed there:

    Before this commit: 4004 SQL queries, 19793 ms elapsed time, 19753 ms CPU time, 2094 ms SQL time
    After this commit:    12 SQL queries,  3688 ms elapsed time,  3753 ms CPU time,   50 ms SQL time
    Measured request:   display the sidebar with the balance of all users for the project (without displaying the list of bills)

This commit also greatly improves the performance of the "settle bills" page:

    Before this commit: 8006 SQL queries, 39167 ms elapsed time, 39600 ms CPU time, 4141 ms SQL time
    After this commit:    22 SQL queries,  7144 ms elapsed time,  7283 ms CPU time,   96 ms SQL time
    Measured request:   display the "Settle bills" page

Test setup to measure performance improvement:

- 5 users with various weights
- 1000 bills, each paid by a random user, each involving all 5 users
- laptop with Celeron N2830@2.16 GHz, SSD Samsung 850 EVO
- sqlite database on SSD, using sqlite 3.15.2
- python 2.7.13
- Flask-DebugToolbar 0.10.0 (to count SQL queries and loading time)

Performance measurements (using Flask-DebugToolbar on the second request,
to avoid measuring cold-cache performance):

- number of SQL queries
- elapsed time (from request to response)
- total CPU time consumed by the server handling the request
- total time spent on SQL queries (as reported by SQLAlchemy)
2017-01-02 13:09:26 +01:00
..
migrations Convert readthedocs links for their .org -> .io migration for hosted projects 2016-06-28 07:46:50 +01:00
static Hide the member weights in members list if all weights are "1". 2016-06-16 15:52:24 +02:00
templates Hide the member weights in members list if all weights are "1". 2016-06-16 15:52:24 +02:00
translations/fr/LC_MESSAGES Update translation 2016-06-16 15:52:24 +02:00
__init__.py I HAZ TO RUN TESTS BEFORE COMMITING 2011-10-14 15:48:31 +02:00
api.py update for flask 0.9 2013-02-18 19:18:49 +01:00
babel.cfg Translate the application using Flask-babel. 2011-10-15 01:19:19 +02:00
default_settings.py Do not load user-overriden settings in unit tests. 2016-04-03 22:31:32 +02:00
forms.py Allow negative bill amounts 2016-09-12 14:21:57 +02:00
manage.py Add a manage.py CLI (flask_script) 2016-05-31 12:10:53 +02:00
merged_settings.py Do not load user-overriden settings in unit tests. 2016-04-03 22:31:32 +02:00
messages.pot Fix translation for password tooltip 2013-10-13 21:51:34 +02:00
models.py Optimise SQL queries when computing balance 2017-01-02 13:09:26 +01:00
requirements.txt Handle migrations through alembic/flask-Migrations 2016-05-31 12:10:53 +02:00
run.py Fix migrations upgrade path for MySQL 2016-06-18 12:13:46 +02:00
tests.py Update negative amounts test 2016-09-12 16:30:01 +02:00
utils.py Added a template filter not to show zero decimals on user weights 2016-06-15 10:20:37 +02:00
web.py Optimise SQL queries when displaying bills for a project 2017-01-02 13:09:26 +01:00