sql >> Database teknologi >  >> NoSQL >> Redis

Redis AOF fsync (ALTID) vs. LSM-træ

LSM er AOF, som du faktisk gerne vil læse nogle gange. Du laver noget overheadarbejde, så du kan læse det hurtigere senere. Redis er designet, så du aldrig eller kun i særlige tilfælde læser den. På den anden side læser Cassandra det ofte for at betjene anmodninger.

Og hvad Redis kalder slow, er faktisk meget meget hurtigt for en db som Cassandra.

=============================OPDATERING

Det viser sig, at jeg sprang i konklusioner for tidligt. Fra designsynspunkt er alt ovenstående sandt, men implementeringen er så forskellig. Selvom Cassandra hævder absolut holdbarhed, fsync ikke på hver transaktion, og der er ingen måde at tvinge den til at gøre det (men hver transaktion kan fsynkroniseres). Det bedste jeg kunne gøre er 'fsync i batch-tilstand mindst 1ms efter forrige fsync'. Det betyder, at for 4-tråds benchmark, jeg brugte, lavede det 4 skrivninger pr. fsync, og tråde ventede på, at fsync skulle udføres. På den anden side lavede Redis fsync ved hver skrivning, så 4 gange oftere. Med tilføjelse af flere tråde og flere partitioner på bordet kunne Cassandra vinde endnu større. Men bemærk, at den use case, du beskrev, ikke er typisk. Og andre arkitektoniske forskelle (Cassandra er god til at partitionere, Redis er god til tællere, LUA og andet) gælder stadig.

Numre:

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

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

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

Redis fsync hvert 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 hver skrivning, 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 every write, 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 hvert 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, fsync hver batch, men vent mindst 1ms, 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. Hvordan opretter man sin egen database i Redis?

  2. Redis at finde hashes efter feltværdier

  3. Fejl:Ingen unix-socket-understøttelse på Windows, der forbinder mongodb

  4. MongoDB aggregerede udfyld manglende dage