Powszechnie wspomniano, że Redis jest „Blazing Fast”, a mongoDB też jest szybki. Ale mam problem ze znalezieniem rzeczywistych liczb porównujących wyniki tych dwóch. Biorąc pod uwagę podobne konfiguracje, funkcje i operacje (i być może pokazując, jak zmienia się czynnik przy różnych konfiguracjach i operacjach) itd., Czy Redis jest 10 razy szybszy ?, 2x szybszy ?, 5 razy szybszy?
Mówię tylko o wydajności. Rozumiem, że mongoDB jest innym narzędziem i ma bogatszy zestaw funkcji. To nie jest debata „Czy mongoDB jest lepsza niż Redis”. Pytam, o jaką różnicę Redis przewyższa mongoDB?
W tym momencie nawet tanie testy porównawcze są lepsze niż brak testów porównawczych.
mongodb
benchmarking
redis
Homer6
źródło
źródło
Odpowiedzi:
Szorstkie wyniki z następującego testu porównawczego: 2x zapis, 3x odczyt .
Oto prosty test porównawczy w pythonie, który możesz dostosować do swoich celów. Sprawdzałem, jak dobrze każdy z nich wykona proste ustawienie / pobieranie wartości:
Wyniki dla mongodb 1.8.1 i redis 2.2.5 i najnowszego pymongo / redis-py:
Weź oczywiście wyniki z odrobiną soli! Jeśli programujesz w innym języku, korzystasz z innych klientów / różnych implementacji itp., Wyniki będą się różnić. Nie wspominając o tym, że korzystanie z niego będzie zupełnie inne! Najlepszym rozwiązaniem jest ich samodzielne przetestowanie, dokładnie tak, jak zamierzasz ich używać. W następstwie prawdopodobnie wymyślisz najlepszy sposób wykorzystania każdego z nich. Zawsze porównuj dla siebie!
źródło
Sprawdź ten post na temat analizy wydajności wstawiania Redis i MongoDB:
źródło
Dobry i prosty punkt odniesienia
Próbowałem ponownie przeliczyć wyniki przy użyciu bieżących wersji redis (2.6.16) i mongo (2.4.8) i oto wynik
Również ten post na blogu porównuje oba, ale używa node.js. Pokazuje efekt rosnącej liczby wpisów w bazie danych wraz z upływem czasu.
źródło
Trudno będzie znaleźć liczby, ponieważ nie są one w tej samej przestrzeni. Ogólna odpowiedź jest taka, że Redis jest o 10–30% szybszy, gdy zestaw danych mieści się w pamięci roboczej pojedynczego komputera. Po przekroczeniu tej ilości danych Redis kończy się niepowodzeniem. Mongo zwolni w stopniu zależnym od rodzaju ładunku. W przypadku obciążenia tylko z wstawką jeden użytkownik niedawno zgłosił spowolnienie od 6 do 7 rzędów wielkości (10 000 do 100 000 razy), ale raport ten przyznał również, że wystąpiły problemy z konfiguracją i że było to bardzo nietypowe obciążenie robocze. Normalne odczytywanie dużych obciążeń anegdotycznie spowalnia około 10 razy, gdy niektóre dane muszą zostać odczytane z dysku.
Wniosek: Redis będzie szybszy, ale nie za bardzo.
źródło
Oto doskonały artykuł o wydajności sesji w środowisku Tornado w wieku około 1 roku. Zawiera porównanie kilku różnych implementacji, w tym Redis i MongoDB. Wykres w artykule stwierdza, że Redis stoi za MongoDB o około 10% w tym konkretnym przypadku użycia.
Redis jest wyposażony we wbudowany test porównawczy, który analizuje wydajność używanego komputera. Istnieje mnóstwo nieprzetworzonych danych na wiki Benchmark dla Redis. Ale może będziesz musiał rozejrzeć się trochę za Mongo. Jak tutaj , tutaj i kilka losowych liczb polskich (ale daje to punkt wyjścia do samodzielnego uruchomienia niektórych testów porównawczych MongoDB).
Uważam, że najlepszym rozwiązaniem tego problemu jest samodzielne wykonanie testów w oczekiwanych sytuacjach.
źródło
W moim przypadku czynnikiem decydującym w porównaniu wydajności jest zastosowane narzędzie MongoDb WriteConcern. Obecnie większość sterowników mongo ustawia domyślną wartość WriteConcern na ACKNOWLEDGED, co oznacza „zapisany w pamięci RAM” ( Mongo2.6.3-WriteConcern ), pod tym względem był bardzo podobny do redis dla większości operacji zapisu.
Ale rzeczywistość zależy od potrzeb aplikacji i konfiguracji środowiska produkcyjnego, możesz zmienić tę kwestię na WriteConcern.JOURNALED (zapisany na oplog) lub WriteConcern.FSYNCED (zapisany na dysk) lub nawet zapisany na zestawach replik (kopie zapasowe) jeśli jest to potrzebne.
Wtedy możesz zacząć odczuwać spadek wydajności. Inne ważne czynniki obejmują również, jak zoptymalizowane są wzorce dostępu do danych, wskaźnik pominięcia% (patrz mongostat ) i indeksy w ogóle.
źródło
Myślę, że 2-3X na pokazanym teście wprowadzają w błąd, ponieważ jeśli zależy to również od sprzętu, na którym go uruchomiłeś - z mojego doświadczenia wynika, że „mocniejsza” jest maszyna, tym większa jest luka (na korzyść Redis) będzie, prawdopodobnie dlatego, że test porównawczy dość szybko przekroczy limit pamięci.
Jeśli chodzi o pojemność pamięci - jest to częściowo prawda, ponieważ istnieją również sposoby na obejście tego, istnieją (komercyjne) produkty, które zapisują dane Redis na dysku, a także rozwiązania klastrowe (wielodostępne), które pokonują rozmiar pamięci ograniczenie.
źródło