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

Redis AOF fsync (ZAWSZE) vs. drzewo LSM

LSM to AOF, który chcesz czasem przeczytać. Wykonujesz trochę pracy nad głową, aby później móc ją szybciej przeczytać. Redis został zaprojektowany tak, abyś nigdy lub tylko w specjalnym przypadku go nie czytał. Z drugiej strony Cassandra często czyta go, aby obsłużyć żądania.

A to, co Redis nazywa powolnym, jest w rzeczywistości bardzo bardzo szybkie dla db jak Cassandra.

============================AKTUALIZACJA

Okazuje się, że zbyt wcześnie wyciągałem wnioski. Z punktu widzenia projektowania wszystko powyżej jest prawdziwe, ale implementacje różnią się tak bardzo. Pomimo tego, że Cassandra twierdzi, że jest absolutną trwałością, nie fsync na każdej transakcji i nie można tego wymusić (ale każdą transakcję można zsynchronizować). Najlepsze, co mogłem zrobić, to „fsync w trybie wsadowym co najmniej 1 ms po poprzednim fsync”. Oznacza to, że dla 4-wątkowego testu porównawczego, którego używałem, robiłem 4 zapisy na fsync, a wątki czekały na wykonanie fsync. Z drugiej strony Redis robił fsync przy każdym zapisie, więc 4 razy częściej. Dzięki dodaniu większej liczby wątków i większej ilości przegród w tabeli, Cassandra mogła wygrać jeszcze więcej. Pamiętaj jednak, że opisany przez Ciebie przypadek użycia nie jest typowy. I inne różnice architektoniczne (Cassandra jest dobra w partycjonowaniu, Redis jest dobra w licznikach, LUA i innych) nadal obowiązują.

Liczby:

Polecenie Redis:set(KEY + (tstate.i++), TEXT);

Polecenie Cassandra:execute("insert into test.test (id,data) values (?,?)", state.i++, TEXT)

Gdzie TEXT = "Wake up, Neo. We have updated our privacy policy."

Redis fsync co sekundę, HDD

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.shared  localhost  thrpt   15  97535.900 ± 2188.862  ops/s

  97535.900 ±(99.9%) 2188.862 ops/s [Average]
  (min, avg, max) = (94460.868, 97535.900, 100983.563), stdev = 2047.463
  CI (99.9%): [95347.038, 99724.761] (assumes normal distribution)

Redis fsync przy każdym zapisie, HDD

Benchmark              (address)   Mode  Cnt   Score   Error  Units
LettuceThreads.shared  localhost  thrpt   15  48.862 ± 2.237  ops/s

  48.862 ±(99.9%) 2.237 ops/s [Average]
  (min, avg, max) = (47.912, 48.862, 56.351), stdev = 2.092
  CI (99.9%): [46.625, 51.098] (assumes normal distribution)

Redis, fsync przy każdym zapisie, NVMe (Samsung 960 PRO 1tb)

Benchmark              (address)   Mode  Cnt    Score   Error  Units
LettuceThreads.shared     remote  thrpt   15  449.248 ± 6.475  ops/s

  449.248 ±(99.9%) 6.475 ops/s [Average]
  (min, avg, max) = (441.206, 449.248, 462.817), stdev = 6.057
  CI (99.9%): [442.773, 455.724] (assumes normal distribution)

Cassandra, fsync co sekundę, HDD

Benchmark                  Mode  Cnt      Score     Error  Units
CassandraBenchMain.write  thrpt   15  12016.250 ± 601.811  ops/s

  12016.250 ±(99.9%) 601.811 ops/s [Average]
  (min, avg, max) = (10237.077, 12016.250, 12496.275), stdev = 562.935
  CI (99.9%): [11414.439, 12618.062] (assumes normal distribution)

Cassandra, zsynchronizuj każdą partię, ale poczekaj co najmniej 1 ms, HDD

Benchmark                  Mode  Cnt    Score   Error  Units
CassandraBenchMain.write  thrpt   15  195.331 ± 3.695  ops/s

  195.331 ±(99.9%) 3.695 ops/s [Average]
  (min, avg, max) = (186.963, 195.331, 199.312), stdev = 3.456
  CI (99.9%): [191.637, 199.026] (assumes normal distribution)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Listy Redis

  2. Jak ustawić/pobrać pandas.DataFrame do/z Redis?

  3. Przełączanie awaryjne Redis za pomocą StackExchange / Sentinel z C#

  4. phpMyAdmin odpowiednik MySQL dla Redis?

  5. Jak monitorować Redisa jako silnik kolejki za pomocą cli podobnego do beanstalkd?