2009-08-20 7 views
13

Buduję sklep internetowy z wieloma działami i kategoriami. Są one przechowywane w naszej bazie danych i często odwiedzane.Asp.net - buforowanie a zmienna statyczna do przechowywania słownika

Używamy przepisywania adresów URL, więc prawie każde żądanie w sklepie generuje odnośnik. Musimy również często dokonywać iteracji danych, aby wygenerować menu głównego sklepu i stron działu.

Informacje te nie będą się często zmieniać, więc myślę, że powinienem załadować bazę danych do słownika, aby przyspieszyć pobieranie informacji.

Wiem, że standardową praktyką jest ładowanie danych do pamięci podręcznej aplikacji, jednak zakładam, że istnieje pewien stopień serializacji, który występuje podczas buforowania, a dla dużej struktury danych myślę, że obciążenie będzie znaczące.

Mój impuls polega na umieszczeniu słownika w zmiennej statycznej w jednej z powiązanych klas. Chciałbym jednak uzyskać pewne dane wejściowe na ten temat. Czy mam rację, sądząc, że ta metoda byłaby szybsza? Czy to okropna praktyka? Czy istnieje lepszy sposób, którego mi brakuje?

Nie mogę znaleźć wielu informacji na ten temat i byłbym wdzięczny za wszelkie informacje, które możesz udostępnić. Dzięki!

Odpowiedz

19

Kolekcje aplikacji i pamięci podręcznych nie tworzą serializacji obiektów, które do nich są przekazywane, przechowują rzeczywiste odwołanie. Pobieranie obiektu z pamięci podręcznej nie będzie kosztowną operacją, bez względu na to, jak duży jest obiekt. Zawsze trzymaj się obiektów Cache, chyba że masz ku temu dobry powód, to tylko dobra praktyka.

Jedyna rzecz, o której warto wspomnieć to upewnić się, że myślisz o wielowątkowym dostępie do tej kolekcji. Bardzo szybko pojawią się poważne problemy, jeśli nie zablokujesz się prawidłowo

+0

Dziękuję bardzo - Dokładnie to musiałem wiedzieć. –

+0

Cieszę się, że pomogę :) – LorenVS

+4

Upewnij się tylko, że jeśli używasz aplikacji lub pamięci podręcznej, są one na maszynę. Jeśli masz wiele maszyn (np. Farmy internetowe), masz kłopoty ... i będziesz musiał użyć skalowalnego rozwiązania do buforowania, takiego jak Microsoft Velocity lub MemCacheD ("D" jest dla Daemona). –

3

memcached jest twoim przyjacielem! (ale może być przesadą, jeśli nie chcesz się skalować)

Czy masz pojęcie, jak duży będzie Twój słownik w pamięci podręcznej aplikacji? Kusiłbym, aby polecić to jako dobrą pierwszą opcję.

+0

Patrzę na kilkadziesiąt działów i kilkaset kategorii wraz z powiązanymi informacjami ... więc pod względem wielkości nie powinno być tak źle. Jedyne moje wahanie w używaniu buforowania na poziomie baz danych polega na tym, że przy każdym wywołaniu muszę nadal konwertować obiekty zwracane przez bazę danych do skojarzonych typów. Istnieje również kilka powiązanych danych, takich jak adres URL, który miałem nadzieję na prekomputer. Biorąc pod uwagę, że często potrzebuję uzyskać długą listę tych przedmiotów, myślałem, że powinienem cache'ować dalej w kolejce. Jest to zdecydowanie dobra opcja i naprawdę doceniam informacje! –

4

Cóż, nie sądzę, żeby przerobienie kodu wymagało tak dużo pracy, aby użyć pola statycznego zamiast pamięci podręcznej aplikacji, jeśli jest taka potrzeba aby to zrobić. Najpierw osobiście skorzystam z pamięci podręcznej. Nie ma potrzeby przedwczesnej optymalizacji, czy zmierzyłeś wydajność? Może zachowywać się poprawnie z obiektem pamięci podręcznej aplikacji. Może to nawet działa dobrze z zapytaniami db? :)

Tak, moja odpowiedź brzmi - użyj pamięci podręcznej i zobacz, jak to działa.

Powiązane problemy