sql >> Databáze >  >> NoSQL >> Redis

Redis AOF fsync (VŽDY) vs. strom LSM

LSM je AOF, kterou si někdy chcete skutečně přečíst. Děláte nějakou režijní práci, abyste si to později mohli přečíst rychleji. Redis je navržen tak, abyste jej nečetli nikdy nebo pouze ve speciálním případě. Na druhou stranu je Cassandra často čte, aby vyřídila požadavky.

A to, co Redis nazývá pomalé, je ve skutečnosti velmi rychlé pro db, jako je Cassandra.

==============================AKTUALIZACE

Ukázalo se, že jsem dělal ukvapené závěry příliš brzy. Z hlediska designu je vše výše uvedené pravda, ale implementace se tolik liší. Navzdory tomu, že Cassandra tvrdí absolutní odolnost, není fsync u každé transakce a neexistuje způsob, jak ji přinutit, aby tak učinila (ale každá transakce může být fsynchronizována). Nejlepší, co jsem mohl udělat, je 'fsync v dávkovém režimu alespoň 1 ms po předchozím fsync'. Znamená to, že pro benchmark se 4 vlákny, který jsem používal, prováděl 4 zápisy na fsync a vlákna čekala na dokončení fsync. Na druhou stranu Redis dělal fsync při každém zápisu, takže 4x častěji. S přidáním více vláken a více oddílů tabulky mohla Cassandra vyhrát ještě více. Všimněte si však, že případ použití, který jste popsal, není typický. A další architektonické rozdíly (Cassandra je dobrá v dělení, Redis je dobrá v pultech, LUA a další) stále platí.

Čísla:

Příkaz Redis:set(KEY + (tstate.i++), TEXT);

Cassandra příkaz:execute("insert into test.test (id,data) values (?,?)", state.i++, TEXT)

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

Redis fsync každou sekundu, 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 každý zápis, 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 každý zápis, 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)

Cassandro, fsync každou sekundu,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)

Cassandro, fsync každou dávku, ale počkejte alespoň 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. Importujte data do MongoDB ze souboru JSON pomocí Java

  2. Promítnout první položku v poli do nového pole (agregace MongoDB)

  3. jak nakonfigurovat časový limit základny JedisConnectionFactory na jarním bootovacím frameworku

  4. Schéma Mongoose:„unikátní“ není respektováno