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)