2010-02-12 12 views
17

Mam strony internetowe, które pobierają 10 - 20 zapytań do bazy danych, aby uzyskać wszystkie wymagane dane.Czy można wykonać asynchroniczne/równoległe zapytanie do bazy danych w aplikacji Django?

Normalnie po wysłaniu zapytania wątek/proces Django jest blokowany w oczekiwaniu na wyniki, a następnie wznawia wykonywanie, dopóki nie dotrze do następnego zapytania.

Czy istnieje sposób na asynchroniczne wydawanie wszystkich zapytań, aby mogły być przetwarzane równolegle przez serwer (y) bazy danych?

Używam MySQL, ale chciałbym usłyszeć o rozwiązaniach również dla innych baz danych. Na przykład usłyszałem, że Postgresql ma asynchroniczną bibliotekę klienta - w jaki sposób powinienem użyć tego w tym przypadku?

Odpowiedz

5

Ten bardzo niedawny wpis w blogu zdaje się sugerować, że nie jest on wbudowany w struktury Django lub Rails. Myślę, że dobrze to wyjaśnia i jest wart przeczytania wraz z komentarzem.

http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/

Myślę Pamiętam Cal Henderson wspomnieć tego niedoboru gdzieś w jego doskonałej mowy http://www.youtube.com/watch?v=i6Fr65PFqfk

Moje naiwne przypuszczenie to może być w stanie włamać się coś z oddzielnych bibliotek Pythona ale można stracić dużo Oszustwo ORM/szablon leniwego oceniania django daje do punktu, w którym równie dobrze można użyć innego stosu. Z drugiej strony, jeśli optymalizujesz tylko kilka widoków w dużym projekcie django, może być dobrze.

0

Spróbuj Celery, jest trochę narzut na konieczność uruchomienia serwera ampq, ale może on zrobić to, co chcesz. Nie jestem pewien co do współbieżności DB tho. Ponadto, jeśli chcesz szybkość dla DB, polecam MongoDB (ale będziesz potrzebować django-nonrel do tego).

+0

Uruchamianie serwera ampq nie jest obowiązkowe. Prosta kolejka memcache lub redis działa dobrze. Nie * nie * osobiście polecam MongoDB. Pomijając fakt, że django-norel jest w dużej mierze abandonware (wciąż w wersji 1.4, 1.4 został usunięty w 2013 r., A rozszerzony suppoort (bezpieczeństwo itp.) Został usunięty w 2015 r.), MongoDB naprawdę jest szybszy tylko wtedy, gdy utracisz pewien stopień zgodności ACID przez działa jako magazyn w pamięci. I moim zdaniem to straszna sprawa dla danych klientów. – Shayne

+0

System zaplecza redis jest przedmiotem debaty o wycofaniu. FYI. – DylanYoung

4

miałem podobny problem i rozwiązać go z javascript/ajax

Wystarczy załadować szablon z podstawowych znaczników, a następnie wykonaj severl ajax requsts do wykonywania zapytań i ładowania danych. Możesz nawet pokazać animację ładowania. Użytkownik będzie miał wrażenie Web 2.0, a nie tylko ponure załadowanie strony. Oczywiście, oznacza to kilka dodatkowych żądań HTTP na stronę, ale decyzja należy do Ciebie.

Oto jak wygląda mój przykład: http://artiox.lv/en/search?query=test&where_to_search=all (złamane Link)

Powiązane problemy