5

Mam ramkę danych pandy z luźną klasą opakowania, która dostarcza metadane dla mojej aplikacji django/DRF. Aplikacja jest w zasadzie przyjaznym dla użytkownika (nie programistą) sposobem przeprowadzania analizy danych i sprawdzania poprawności. Między żądaniami chcę mieć możliwość zapisania stanu ramki danych, aby móc przeprowadzić serię interakcji z danymi, ale nie trzeba ich zapisywać w bazie danych (musi przetrwać tylko tak długo, jak sesja przeglądarki). Z tego logiczne było sprawdzenie frameworka sesji django, ale z tego, co słyszałem, dane sesji powinny być lekkie, a obiekt ramek danych nie jest serializowany przez json.Dostęp do obiektu ramek danych pandy między żądaniami za pomocą klucza sesji

Ponieważ nie mam dużej liczby użytkowników i chcę, aby aplikacja czuła się jak strona na komputery, myślałem o używaniu pamięci podręcznej Django jako sposobu przechowywania obiektu Dataframe w pamięci. Tak więc umieszczenie danych w pamięci podręcznej przebiegałoby mniej więcej tak samo, jak wtedy, gdybyśmy uzyskali dostęp do następujących żądań. Czy jest to dobry sposób na obsłużenie tego przepływu pracy lub czy istnieje inny system, którego powinienem używać do przechowywania dużych danych (od 5 do 100 MB) w pamięci?

Odpowiedz

2

Jeśli korzystasz z aplikacji na nowoczesnym serwerze, wtedy 100 MB nie jest ogromną ilością pamięci. Jednakże, jeśli masz więcej niż kilkanaście równoczesnych użytkowników, z których każdy wymaga 100 MB pamięci podręcznej, może to dodać więcej pamięci niż twój serwer może obsłużyć. Pamięć podręczna i serwer powinny być odpowiednio skonfigurowane i możesz chcieć ograniczyć całkowitą liczbę buforowanych ramek danych w kodzie Pythona.

Ponieważ wygląda na to, że Django musi serializować dane sesji, należy wybrać sesję z PickleSerializer lub skorzystać z pamięci podręcznej. Zgodnie z dokumentacją, PickleSerializer nie jest zalecany ze względów bezpieczeństwa, więc wybór użycia pamięci podręcznej jest dobry.

Domyślny backend pamięci podręcznej w Django nie współużytkuje wpisów między procesami, dzięki czemu można uzyskać lepszą wydajność pamięci i czasu poprzez zainstalowanie memcached i włączenie obsługi memcached.MemcachedCache.

Powiązane problemy