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 74df614007 Optimise SQL queries when displaying bills for a project
By defaut, SQLAlchemy uses lazy loading, which means that displaying n
bills will generate around n queries (to get the list of owers of each
bill).  Pre-load the list of owers to drastically decrease the number of
SQL queries.

Before this commit: 1004 SQL queries, 7535 ms elapsed time, 7536 ms CPU time, 530 ms SQL time

After this commit: 5 SQL queries, 3342 ms elapsed time, 3393 ms CPU time, 15 ms SQL time

Measured request: display the list of all bills for the project (without displaying the sidebar with balances)

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 with 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 Hide the member weights in members list if all weights are "1". 2016-06-16 15:52:24 +02: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