za co nie lubi cię twój hoster

45
Tytulem wst˛ epu Czas procesora I/O Bazy danych QA Za co nie lubi Ci˛ e Twój hoster Czyli jak wdro˙ zy´ c aplikacj ˛ e na produkcj ˛ e i prze˙ zy´ c by o tym opowiedzie´ c Grzegorz Nosek, MegiTeam PyKonik, Kraków 9.02.2011 Grzegorz Nosek, MegiTeam Za co nie lubi Ci˛ e Twój hoster

Upload: konryd

Post on 04-Dec-2014

3.162 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Za co nie lubi Cie Twój hosterCzyli jak wdrozyc aplikacje na produkcje i przezyc by o tym

opowiedziec

Grzegorz Nosek, MegiTeam

PyKonik, Kraków

9.02.2011

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 2: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Disclaimer

Bedzie:1 subiektywnie2 bez zmyslania3 o czestych problemach i uniwersalnych rozwiazaniach4 nie tylko o shared hostingu

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 3: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zasoby serwera

Podstawowe zasoby:czas procesoradostep do dysków

Serwery dostepne dla uzytkownika:serwer aplikacjiserwer baz danychinne dedykowane serwery, np. pocztowe

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 4: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Czas procesora

zadania w tleminiaturki itp.pliki statycznestrony prawie statyczne

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 5: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Zadania w tle

okresowe (nie powiazane z konkretnym zadaniem) –mailingi, backupy itp.odroczone (zadania zbyt czasochłonne by je wykonywac wobsłudze zadania) – przekodowanie wideo, analiza danychuzytkownika itp.

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 6: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Zadania w tle

Kryminalnie zle:

while True:

if mam_co_robic():

zrob_cos()

time.sleep(1) # albo i to nie

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 7: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Zadania w tle

Kryminalnie zle:

while True:

if mam_co_robic():

zrob_cos()

time.sleep(1) # albo i to nie

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 8: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Zadania w tle

Zle:

while True:

if mam_co_robic():

zrob_cos()

time.sleep(600)

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 9: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Zadania w tle

Dobrze:zadania okresowe (time.sleep(600)): cronzadania w tle (time.sleep(1)): messaging (celery,RabbitMQ)

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 10: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Miniaturki

Miniaturki i inne generowane plikiwzglednie czasochłonne do wygenerowaniaw sam raz do cache’owania na dyskucache moze byc przezroczysty dla aplikacji

...ale to niekoniecznie dobry pomysł“There are only two hard things in Computer Science:cache invalidation and naming things”.

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 11: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Miniaturki

Nginx

location /obrazki {

document_root /gdzies/tam/;

try_files $uri @aplikacja;

}

location @aplikacja {

# ...

proxy_pass http://127.0.0.1:9000/;

}

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 12: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Pliki statyczne

„...mógłbym ale serwer WWW zrobi to lepiej”django.views.static.serve

kontrola dostepu: X-Sendfile, X-Accel-Redirect

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 13: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Pliki statyczne

Nginx

location /scisle-tajne {

internal;

document_root /gdzies/tam/;

}

Aplikacja:

HTTP/1.1 200 OK

Content-Type: image/jpeg

X-Accel-Redirect: /scisle-tajne/1234567.jpg

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 14: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Zadania w tleMiniaturki itp.Pliki statyczneStrony prawie statyczne

Strony prawie statyczne

Statyczna strona (np. artykuł) z dynamicznymi elementami(komentarze, reklamy)

cache’owanie obiektów z bazy danychcache’owanie fragmentów HTMLcałkowicie statyczna strona z elementami dynamicznymi

javascriptSSI <!�#include virtual="/ssi/comments?foo=bar" �>

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 15: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O

przełaczenie kontekstu CPU – kilka(-dziesiat) µsruch głowica dysku – kilka(-nascie) mstrudno dokładnie zmierzyc, jeszcze trudniej sprawiedliwiepodzielic

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 16: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Liczba plików tworzonych przez aplikacjedosc dobry wyznacznik wymagan I/Ow jednym katalogu

im mniej plików tym szybszy dostepodgórne ograniczenia (ext3)

łacznieczas tworzenia i odtwarzania kopii zapasowych

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 17: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Pliki tymczasowe (w tym rozmaite cache)niech beda naprawde tymczasowenieuzywane pliki cache usuwane z crona

łatwo zapomniec podczas tworzenia aplikacjiatime

, którego i tak nie mamtime

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 18: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Pliki tymczasowe (w tym rozmaite cache)niech beda naprawde tymczasowenieuzywane pliki cache usuwane z crona

łatwo zapomniec podczas tworzenia aplikacjiatime, którego i tak nie mamtime

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 19: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Pliki trwałe (nie mozna ich usunac)niech beda naprawde trwałenie zmieniaj im nazwy bez zmiany zawartosci i vice-versa

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 20: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plikówzamiast /obrazki/1234567.jpg:/obrazki/12/1234/1234567.jpg

2-3 poziomy katalogówok. 1000 plików w katalogu ostatniego poziomurównomierny rozkład plików

pierwsze znaki z MD5 itp.http://en.wikipedia.org/wiki/Benford's_law

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 21: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeadresy e-mailowe, hashowane wg pierwszej litery

poczta/l/[email protected]

15% zaczynało sie od biuro@

kolejne 10% od info@

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 22: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeadresy e-mailowe, hashowane wg pierwszej litery

poczta/l/[email protected]

15% zaczynało sie od biuro@

kolejne 10% od info@

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 23: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeit’s MD5 all the way down

68/b3/29/da/...98/93/e3/40/...99/c7/d8/ad/....../5c/b9/c9/40/68b329da9893e34099c7d8ad5cb9c940ponad 3 miliony katalogów, z tego 300 tysiecy ostatniegopoziomupo jednym pliku w kazdym

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 24: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeit’s MD5 all the way down

68/b3/29/da/...

98/93/e3/40/...99/c7/d8/ad/....../5c/b9/c9/40/68b329da9893e34099c7d8ad5cb9c940ponad 3 miliony katalogów, z tego 300 tysiecy ostatniegopoziomupo jednym pliku w kazdym

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 25: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeit’s MD5 all the way down

68/b3/29/da/...98/93/e3/40/...

99/c7/d8/ad/....../5c/b9/c9/40/68b329da9893e34099c7d8ad5cb9c940ponad 3 miliony katalogów, z tego 300 tysiecy ostatniegopoziomupo jednym pliku w kazdym

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 26: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeit’s MD5 all the way down

68/b3/29/da/...98/93/e3/40/...99/c7/d8/ad/...

.../5c/b9/c9/40/68b329da9893e34099c7d8ad5cb9c940ponad 3 miliony katalogów, z tego 300 tysiecy ostatniegopoziomupo jednym pliku w kazdym

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 27: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pliki tworzone przez aplikacjeHashowanie nazw plików

I/O – pliki tworzone przez aplikacje

Hashowanie nazw plików – ku przestrodzeit’s MD5 all the way down

68/b3/29/da/...98/93/e3/40/...99/c7/d8/ad/....../5c/b9/c9/40/68b329da9893e34099c7d8ad5cb9c940ponad 3 miliony katalogów, z tego 300 tysiecy ostatniegopoziomupo jednym pliku w kazdym

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 28: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Bazy danych

IndeksyMySQL: storage enginesPostgreSQL

statystykimartwe krotki

Aplikacjazbedne zapytaniaORM – wierz ale sprawdzaj

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 29: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Indeksy

„Tu jest ksiazka, sprawdz czy jest w niej cos o lolkotkach”

EXPLAIN

mysql> EXPLAIN SELECT votes FROM wp_votes WHERE post='3222';+----+-------------+----------+------+---------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+----------+------+---------------+------+---------+------+------+-------------+| 1 | SIMPLE | wp_votes | ALL | NULL | NULL | NULL | NULL | 1407 | Using where |+----+-------------+----------+------+---------------+------+---------+------+------+-------------+

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 30: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Indeksy

„Tu jest ksiazka, sprawdz czy jest w niej cos o lolkotkach”EXPLAIN

mysql> EXPLAIN SELECT votes FROM wp_votes WHERE post='3222';+----+-------------+----------+------+---------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+----------+------+---------------+------+---------+------+------+-------------+| 1 | SIMPLE | wp_votes | ALL | NULL | NULL | NULL | NULL | 1407 | Using where |+----+-------------+----------+------+---------------+------+---------+------+------+-------------+

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 31: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Indeksy

CREATE INDEX

mysql> CREATE INDEX i_post_wp_votes ON wp_votes(post);Query OK, 1407 rows affected (0,04 sec)Records: 1407 Duplicates: 0 Warnings: 0

mysql> EXPLAIN SELECT votes FROM wp_votes WHERE post='3222';+----+-------------+----------+------+-----------------+-----------------+---------+-------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+----------+------+-----------------+-----------------+---------+-------+------+-------+| 1 | SIMPLE | wp_votes | ref | i_post_wp_votes | i_post_wp_votes | 4 | const | 1 | |+----+-------------+----------+------+-----------------+-----------------+---------+-------+------+-------+

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 32: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Indeksy

Indeks to nie wszystkomegiteam=> explain analyze select * from ip_traffic where ip = '77.79.227.119'

and date_trunc('month', day) = '2011-01-01';QUERY PLAN

---------------------------------------------------------------------------------------------------Bitmap Heap Scan on ip_traffic (...) (actual time=3452.997..3511.852 rows=215 loops=1)

Recheck Cond: (ip = '77.79.227.119'::inet)Filter: (date_trunc('month'::text, ("day")::timestamp with time zone) =

'2011-01-01 00:00:00+01'::timestamp with time zone)-> Bitmap Index Scan on ip_traffic_pkey (...) (actual time=532.491..532.491 rows=7748 loops=1)

Index Cond: (ip = '77.79.227.119'::inet)Total runtime: 3511.997 ms

(6 rows)

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 33: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Indeksy

Indeks to nie wszystko

megiteam=> explain analyze select * from ip_traffic where ip = '77.79.227.119'and day between '2011-01-01' and '2011-01-31';

QUERY PLAN------------------------------------------------------------------------------------------------Bitmap Heap Scan on ip_traffic (...) (actual time=64.238..344.296 rows=215 loops=1)

Recheck Cond: ((ip = '77.79.227.119'::inet)AND ("day" >= '2011-01-01'::date)AND ("day" <= '2011-01-31'::date))

-> Bitmap Index Scan on ip_traffic_pkey (...) (actual time=52.700..52.700 rows=215 loops=1)Index Cond: ((ip = '77.79.227.119'::inet)

AND ("day" >= '2011-01-01'::date)AND ("day" <= '2011-01-31'::date))

Total runtime: 344.450 ms(5 rows)

10x szybciej

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 34: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

Indeksy

Indeks to nie wszystko

megiteam=> explain analyze select * from ip_traffic where ip = '77.79.227.119'and day between '2011-01-01' and '2011-01-31';

QUERY PLAN------------------------------------------------------------------------------------------------Bitmap Heap Scan on ip_traffic (...) (actual time=64.238..344.296 rows=215 loops=1)

Recheck Cond: ((ip = '77.79.227.119'::inet)AND ("day" >= '2011-01-01'::date)AND ("day" <= '2011-01-31'::date))

-> Bitmap Index Scan on ip_traffic_pkey (...) (actual time=52.700..52.700 rows=215 loops=1)Index Cond: ((ip = '77.79.227.119'::inet)

AND ("day" >= '2011-01-01'::date)AND ("day" <= '2011-01-31'::date))

Total runtime: 344.450 ms(5 rows)

10x szybciej

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 35: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

MySQL – storage engines

MyISAMszybki i wsciekłybrak transakcji, precyzyjnego lockowania

InnoDBtransakcjegwarancje spójnosci danychtragiczna wydajnosc przy zapisiegrupowanie zapytan w transakcje

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 36: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

MySQL – storage engines

MyISAMszybki i wsciekłybrak transakcji, precyzyjnego lockowania

InnoDBtransakcjegwarancje spójnosci danych

tragiczna wydajnosc przy zapisiegrupowanie zapytan w transakcje

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 37: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

MySQL – storage engines

MyISAMszybki i wsciekłybrak transakcji, precyzyjnego lockowania

InnoDBtransakcjegwarancje spójnosci danychtragiczna wydajnosc przy zapisiegrupowanie zapytan w transakcje

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 38: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

PostgreSQL – statystyki

losowa próbka danych uzywana do planowania zapytanwarto odswiezyc po duzych zmianach w tabelitabele posredniczace w relacjach n:mANALYZE [VERBOSE] [tabela]

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 39: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

PostgreSQL – martwe krotki

MVCC – rózne transakcje widza rózne wersje danychkazdy UPDATE i DELETE zostawia stara wersje krotkiUPDATE articles SET views=views+1 WHERE id=%d

czesto zmieniane dane w innej tabeli, połaczonej relacja1:1VACUUM ANALYZE [VERBOSE] [tabela]

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 40: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

PostgreSQL – martwe krotki

MVCC – rózne transakcje widza rózne wersje danychkazdy UPDATE i DELETE zostawia stara wersje krotkiUPDATE articles SET views=views+1 WHERE id=%d

czesto zmieniane dane w innej tabeli, połaczonej relacja1:1VACUUM ANALYZE [VERBOSE] [tabela]

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 41: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

W aplikacji – zbedne zapytania

w widoku: posts = Post.objects.filter(author=1)

w szablonie:{% for post in posts %}

{{ post.author }}

{% endfor %}

posts =

Post.objects.filter(author=1).select_related('author')

cache’owanie zapytan (np. johnny-cache)

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 42: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

W aplikacji – zbedne zapytania

w widoku: posts = Post.objects.filter(author=1)

w szablonie:{% for post in posts %}

{{ post.author }}

{% endfor %}

posts =

Post.objects.filter(author=1).select_related('author')

cache’owanie zapytan (np. johnny-cache)

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 43: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

W aplikacji – ORM

.filter(fk=None) vs .filter(fk_id__isnull=True)

django.contrib.contenttypes

for obj in objs:

qs = qs | Model.objects.filter(obj=obj)

qs = Model.objects.filter(obj__in=objs)

str(queryset.query)

Django debug toolbar

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 44: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

IndeksyMySQLPostgreSQLW aplikacji

W aplikacji – ORM

.filter(fk=None) vs .filter(fk_id__isnull=True)

django.contrib.contenttypes

for obj in objs:

qs = qs | Model.objects.filter(obj=obj)

qs = Model.objects.filter(obj__in=objs)

str(queryset.query)

Django debug toolbar

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster

Page 45: Za co nie lubi Cię Twój hoster

Tytułem wstepuCzas procesora

I/OBazy danych

QA

Pytania?

Pytania?

Grzegorz Nosek, MegiTeam Za co nie lubi Cie Twój hoster