http://bash.im/quote/420672 как раз про вас.
Сотен миллионов пользователей у вас не будет. А вот по 6000 запросов на страницу - вполне. И вам придётся ну очень "не оптимальным" способом это разруливать.
P.S. Если мне кто-то подскажет, можно ли как-то проще и быстрее разрулить следующую ситуацию, я ему буду очень благодарен.
Есть вьюха, которая получает список из нескольких тысяч строк. Задача вьюхи - для каждой строки найти соответствие в базе и выдать это всё обратно в виде списка словарей. Примерно как если бы по выводу команды ls
надо было из базы забрать вывод команды ls -l
. Раньше на каждую строку просто делался отдельный запрос. Сейчас сначала из базы берутся все объекты (их там тоже несколько тысяч), кверисет с ними преобразуется в список, а в этом списке ищутся объекты при помощи вот такой конструкции:
for field_value in request_data:
myobject = next(x for x in objects_list if x.field == field_value)
потом объекты обрабатываются, ненайденные в базе создаются заново, все данные собираются в список и возвращаются обратно. Как можно оптимизировать?
P.P.S. Это даже не столько вопрос (хотя решение меня, конечно, очень интересует), сколько иллюстрация того, какой может быть реальная, а не надуманная проблема. И реальность этой проблемы даже не в скорости, а в том, что gunicorn убивается по таймауту и не успевает всё это перелопатить. А объёмы будут расти.
Updated 7 Jan. 2016, 3:05 by lampslave.