#31202: Bulk update suffers from poor performance with large numbers of models 
and
columns
-------------------------------------+-------------------------------------
     Reporter:  Tom Forbes           |                    Owner:  Tom
         Type:                       |  Forbes
  Cleanup/optimization               |                   Status:  assigned
    Component:  Database layer       |                  Version:  dev
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Comment (by jerch):

 Recently stumbled again over the perf issue with `bulk_update` in my
 computedfields library. And to my surprise - it is even much slower than
 applying flat `update` calls to a bunch of objects. Since I got complaints
 from users I added a `flat_update` to my django-fast-update package (still
 in PR: https://github.com/netzkolchose/django-fast-update/pull/25).

 Here are some perf numbers to digest:
 {{{
 (env) ➜  example git:(drop_bulk_update) ✗ DBENGINE=sqlite ./manage.py perf
 10 instances
 bulk_update: 0.05896315574645996
 fast_update: 0.002216744422912598
 flat_update: 0.006779623031616211
 100 instances
 bulk_update: 0.5576666355133056
 fast_update: 0.01461637020111084
 flat_update: 0.06025240421295166
 1000 instances
 bulk_update: 5.557345986366272
 fast_update: 0.13169689178466798
 flat_update: 0.5667753458023072
 10000 instances
 bulk_update: 60.25784921646118
 fast_update: 1.262794852256775
 flat_update: 5.409043550491333
 (env) ➜  example git:(drop_bulk_update) ✗ DBENGINE=postgres ./manage.py
 perf
 10 instances
 bulk_update: 0.05660002231597901
 fast_update: 0.004314589500427246
 copy_update: 0.007386398315429687
 flat_update: 0.017342567443847656
 100 instances
 bulk_update: 0.5351178169250488
 fast_update: 0.01944422721862793
 copy_update: 0.017321300506591798
 flat_update: 0.13300635814666747
 1000 instances
 bulk_update: 5.777743911743164
 fast_update: 0.1764376640319824
 copy_update: 0.10273151397705078
 flat_update: 1.348728108406067
 10000 instances
 bulk_update: 100.42072892189026
 fast_update: 1.751427412033081
 copy_update: 0.6608501672744751
 flat_update: 13.84923231601715
 }}}
 (Perf test case is also in the PR.)

 What sticks out is the fact, that `bulk_update` is even so much worse than
 plain `update` chaining. Which makes me wonder what was its actual use
 case in first place and reason to add it to django core?
-- 
Ticket URL: <https://code.djangoproject.com/ticket/31202#comment:19>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/010701986c634d8f-6510480b-2365-4961-a4fd-2662f5302721-000000%40eu-central-1.amazonses.com.

Reply via email to