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)