Redis
 sql >> Baza danych >  >> NoSQL >> Redis

MongoDB vs. Redis vs. Cassandra dla szybkiego zapisu, tymczasowego rozwiązania do przechowywania wierszy

W przypadku takiego rozwiązania do zbioru, polecam podejście wieloetapowe. Redis jest dobry w komunikacji w czasie rzeczywistym . Redis został zaprojektowany jako magazyn kluczy/wartości w pamięci i dziedziczy kilka bardzo dobrych korzyści z bycia bazą danych pamięci:operacje na listach O(1). Tak długo, jak na serwerze jest pamięć RAM, Redis nie spowolni przesuwania do końca list, co jest dobre, gdy musisz wstawiać elementy z tak ekstremalną szybkością. Niestety Redis nie może działać z zestawami danych większymi niż ilość pamięci RAM, którą posiadasz (tylko zapisuje na dysk, odczyt służy do ponownego uruchomienia serwera lub w przypadku awarii systemu), a skalowanie musi być wykonane przez ty i Twoja aplikacja . (Częstym sposobem jest rozprowadzanie kluczy na wielu serwerach, co jest implementowane przez niektóre sterowniki Redis, zwłaszcza te dla Ruby on Rails.) Redis obsługuje również prostą komunikację publikowania/subskrypcji, co może być czasami przydatne.

W tym scenariuszu Redis jest „etapem pierwszym”. Dla każdego konkretnego typu wydarzenia tworzysz listę w Redis z unikalną nazwą; na przykład mamy „wyświetloną stronę” i „kliknięty link”. Dla uproszczenia chcemy się upewnić, że dane na każdej liście mają taką samą strukturę; kliknięty link może mieć token użytkownika, nazwę linku i adres URL, podczas gdy przeglądana strona może mieć tylko token użytkownika i adres URL. Twoim pierwszym zmartwieniem jest po prostu uzyskanie informacji o tym, co się wydarzyło i cokolwiek absolutnie konieczne potrzebne dane są przesyłane.

Następnie mamy kilku prostych pracowników przetwarzających, którzy zdejmują te gorączkowo wprowadzane informacje z rąk Redisa, prosząc o usunięcie elementu z końca listy i przekazanie go. Pracownik może dokonać wszelkich korekt/deduplikacji/wyszukiwania identyfikatorów potrzebnych do prawidłowego zapisania danych i przekazania ich do bardziej trwałego miejsca przechowywania. Uruchom tyle tych pracowników, ile potrzebujesz, aby obciążenie pamięci Redis było znośne. Możesz zapisać pracowników w dowolnym miejscu (Node.js, C#, Java, ...), o ile ma sterownik Redis (większość języków internetowych ma teraz) i jeden dla żądanej pamięci (SQL, Mongo itp.). )

MongoDB jest dobry w przechowywaniu dokumentów . W przeciwieństwie do Redis jest w stanie poradzić sobie z bazami danych większymi niż RAM i samodzielnie obsługuje sharding/replikację. Zaletą MongoDB nad opcjami opartymi na SQL jest to, że nie musisz mieć z góry określonego schematu, możesz dowolnie zmieniać sposób przechowywania danych w dowolnym momencie.

Sugerowałbym jednak Redis lub Mongo w fazie „pierwszego kroku” przechowywania danych do przetwarzania i użycie tradycyjnej konfiguracji SQL (być może Postgres lub MSSQL) do przechowywania przetworzonych danych. Śledzenie zachowania klienta brzmi dla mnie jak dane relacyjne, ponieważ możesz wybrać opcję „Pokaż mi wszystkich, którzy oglądają tę stronę” lub „Ile stron wyświetliła ta osoba w danym dniu” lub „Który dzień miał łącznie najwięcej widzów? ”. Mogą istnieć jeszcze bardziej złożone sprzężenia lub zapytania do celów analitycznych, a dojrzałe rozwiązania SQL mogą wykonać wiele z tych filtrów za Ciebie; NoSQL (w szczególności Mongo lub Redis) nie może wykonywać złączeń ani złożonych zapytań w różnych zestawach danych.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak stworzyć rozproszoną blokadę z Redis?

  2. Co to jest tcp-backlog w redis.conf

  3. Konfiguracja replikacji Redis

  4. Redis Python - jak usunąć wszystkie klucze zgodnie z określonym wzorcem w pythonie, bez iterowania w pythonie

  5. ServiceStack.Redis Nie można odczytać transportu — BasicRedisClientManager