2012-02-05 22 views
21

I read about Nożyce HS w PostgreS coś, co jest oferowane przez Redis również.Postgres Hstore vs. Redis - wydajność mądra

Nasza aplikacja napisana jest w NodeJS. Dwa pytania:

  • Pod względem wydajności, czy sklep Postgres HStore jest porównywalny z Redis?

  • do przechowywania sesji, co byś polecił - Redis, lub Postgres z jakimś innym typem danych (jak HStore, a może nawet zwykła tabela relacyjna)? I jak zła jest jedna opcja kontra druga?

Innym ograniczeniem jest to, że musimy korzystać z danych, które są już w PostgreSQL i połączyć je z aktywnych sesji (co nie jesteśmy pewni, gdzie przechowywać w tym momencie, jeśli w Redis lub PostgreSQL).

Z tego, co przeczytaliśmy, wynika, że ​​używamy Redisa jako menedżera sesji, ale ze względu na ograniczenia PostgreSQL, nie jesteśmy pewni, jak połączyć oba problemy z możliwymi skutkami, jakie mogą się pojawić.

Dzięki!

Odpowiedz

22

Redis będzie szybszy niż Postgres, ponieważ Pg oferuje gwarancje niezawodności danych (gdy transakcja jest zatwierdzona, gwarantuje się, że jest na dysku), podczas gdy Redis ma koncepcję zapisu na dysk, gdy ma na to ochotę, więc nie należy używać do danych krytycznych.

Redis wydaje się być dobrym rozwiązaniem dla danych sesji, lub nawet przechowywać w pliku cookie lub po stronie klienta JavaScript. Ale jeśli potrzebujesz danych z bazy danych na każde żądanie, może nie być nawet warta zaangażowania Redis. To bardzo zależy od twojej aplikacji.

+3

Tylko mały komentarz: jeśli nie potrzebujesz gwarancji niezawodności w Postgres (ryzyko utraty transakcji w przypadku awarii, ale bez ryzyka uszkodzenia danych w przypadku awarii) i prędkość jest dla ciebie ważniejsza, możesz chcieć przetestować wyłączenie ustawienia "synchronous_commit" w postgresie. Może to pomóc w wielu małych zapisach, ale nie pomoże w czytaniu. – stereoscott

+3

Redis ma transakcje, ale gwarancją jest, że cały zakupiony zestaw operacji jest przypisany do pamięci. Istnieją również opcje konfiguracyjne dla częstotliwości zapisu danych na dysku. – Evgeny

+0

W końcu zrozumiałem, że Redis to zupełnie nowa koncepcja bazy danych jako całości. Tak nowe, że wielu ludzi - takich jak ja - nie rozumie tego w pierwszych momentach. Potrzeba czasu, aby naprawdę złapać Redisa, kiedy jesteś przyzwyczajony do Postgres. Jest to prawdziwa współczesna baza danych. Mówiąc, że jest to po prostu plik cookie/magazyn sesji, nie doceniamy Redis. Tak nowe, że wiele osób wydaje opinie na ten temat bez prawdziwej wiedzy. Używamy go w projekcie nieinternetowym jako banku danych dla milionów danych i dobrze spełnia swoją funkcję! Jeśli chodzi o niezawodność, żadne oprogramowanie na świecie nie jest w 100% niezawodne, nawet Postgres. – 1111161171159459134

3

Używanie PostgreSQL jako menedżera sesji jest zazwyczaj złym pomysłem.

Dla starszych niż 9.1 był fizyczny limit transakcji na sekundę na podstawie trwałych parametrów mediów. Do zarządzania sesjami zwykle nie potrzebujesz MGA (ponieważ nie ma kolizji) i oznacza to, że MGA jest narzutem, a bazy danych bez MGA i ACID muszą być znacznie szybsze (10 lub 100).

Znam przypadek użycia, w którym PostgreSQL był używany do zarządzania sesjami, a wydajność była naprawdę straszna i niestabilna - była to eshop z około 10000 żywych sesji. Gdy zarządzanie sesją zostało przeniesione do memcached, wydajność i stabilność znacznie wzrosły. PostgreSQL może być używany do 100 sesji bez problemu. Dla większej liczby istnieją lepsze narzędzia.

+0

dzięki! faktycznie byliśmy skłonni do redis, ale, jak wspomniano powyżej, nie jesteśmy pewni, jak zapytać postgres, aby zwrócić informacje od aktywnych użytkowników w Redis ... jakąkolwiek wskazówkę? – jribeiro

+2

Możesz użyć memcache zamiast redis do obsługi sesji. Działa bardzo dobrze https://github.com/elbart/node-memcache –

+0

@MarekTuchalski Hi! Przepraszamy za opóźnienie i dzięki za odpowiedź. Pozostaje moje pytanie ... Jak podłączyć dane z memcached do postgres? Musiałbym powtórzyć wszystkie wyniki i przekazać je postgresowi w prawo? To brzmi jak ból ... – jribeiro

Powiązane problemy