2012-01-30 19 views
13

Mam niektóre dane tabelaryczne, które ze względu na niezwiązane problemy okazują się zbyt wolne, aby wyjść z SQL Server w czasie rzeczywistym. W miarę, jak zdobędziemy więcej użytkowników, będzie jeszcze gorzej, dlatego myślę o używaniu Redis jako frontowej pamięci podręcznej do przechowywania tabelarycznych danych użytkownika.Jak powinienem używać Redis jako pamięci podręcznej dla SQL Server?

Dane te mogą ulec przetarciu po około 10 minutach, po upływie których chciałbym ponownie uzyskać zestaw rekordów i umieścić w Redis.

Ta aplikacja jest aplikacją .NET MVC. Myślałem, że kiedy użytkownik zaloguje się do aplikacji, dane te zostaną wyciągnięte z bazy danych (zajmie to około 10 sekund) i wprowadzone do Redis będą gotowe do użycia przez klienta MVC. Wygasłbym na tych danych, a gdy stanie się nieaktualny, zostanie ponownie pobrany z bazy danych SQL Server.

Czy to wszystko brzmi rozsądnie? Jestem trochę przestraszony, że:

  1. Użytkownik mógł dostać się do strony, zanim dane są w Redis
  2. Jeśli Redis idzie w dół lub nie reaguje muszę zapewnić, że ViewModel można dostać wypełnione bezpośredni z SQL SErver bez udziału Redis
+1

Victoria, możesz znaleźć [ten post] (http://www.brentozar.com/archive/2011/11/how-stackoverflow-scales-sql-server-video/) interesujące. Około minuty 15 pokazuje możliwe podejście do integracji Redis. – uvita

+0

dziękuję przyjrzę się – Victoria

+1

@uvita możesz dodać to jako odpowiedź, ponieważ chciałbym to zaakceptować - jest idealnym rozwiązaniem, którego szukałem – Victoria

Odpowiedz

1

Możesz użyć czegoś takiego jak MemcacheD do przechowywania stron z pamięci podręcznej w pamięci.

Można ustawić wartość 10 minut na zbuforowanym obiekcie. Następnie pamięć podręczna automatycznie usunie obiekt.

Rzeczywisty repozytorium musiałby wykonać następujące kroki: 1. Sprawdź
cache dla danych, które chcesz, jeśli jest tam świetny użytek to
2. Jeżeli w pamięci podręcznej danych nie istnieje, przejdź do Serwer SQL do odzyskania
3. Zaktualizuj pamięć podręczną danymi z serwera SQL

Użyłem wcześniej klienta Enyim. Działa świetnie. https://github.com/enyim/EnyimMemcached

Mogę również użyć czegoś podobnego do Kwarcu, aby zaplanować zadanie w tle, aby przygotować pamięć podręczną. http://quartznet.sourceforge.net/

+0

Podoba mi się również twój pomysł na Redis jako pamięć podręczną. Realizacja Redis byłaby bardzo podobna do Memcached ... niektórzy ludzie mówią, że jest tak samo szybki lub szybszy i ma więcej funkcji. Po prostu nie mogę go polecić, ponieważ nigdy nie pracowałem z nim poza niektórymi aplikacjami demo NodeJS –

3

Pójdę do wdrożenia Redis Service Service, here są wszystkie szczegóły wymagane. Redis jest szczególnie dobry podczas buforowania w porównaniu do innych nosql. Ale jeśli masz wysoką aplikację do odczytu i zapisu, będę nalegał, aby sprawdzić bazę danych nosql jako bazę danych połączoną z serwerem SQL. Pomoże to w przypadku skalowalności.

Proszę dać mi znać, jeśli wymagane są dalsze szczegóły. Musisz tylko uruchomić polecenie nuget i już prawie wszystko działa.

Powiązane problemy