LSM adalah AOF yang terkadang ingin Anda baca. Anda melakukan beberapa pekerjaan overhead sehingga Anda dapat membacanya lebih cepat nanti. Redis dirancang agar Anda tidak pernah atau hanya dalam kasus khusus membacanya. Di sisi lain, Cassandra sering membacanya untuk melayani permintaan.
Dan apa yang Redis sebut lambat sebenarnya sangat sangat cepat untuk db seperti Cassandra.
============================PEMBARUAN
Ternyata, saya terlalu cepat mengambil kesimpulan. Dari sudut pandang desain, semuanya di atas benar, tetapi implementasinya sangat berbeda. Meskipun Cassandra mengklaim daya tahan mutlak, itu tidak fsync
pada setiap transaksi dan tidak ada cara untuk memaksanya melakukannya (tetapi setiap transaksi dapat disinkronkan). Yang terbaik yang bisa saya lakukan adalah 'fsync dalam mode batch setidaknya 1 ms setelah fsync sebelumnya'. Itu berarti untuk 4 utas benchmark yang saya gunakan sedang melakukan 4 penulisan per fsync dan utas sedang menunggu fsync selesai. Di sisi lain, Redis melakukan fsync pada setiap penulisan, jadi 4 kali lebih sering. Dengan penambahan lebih banyak utas dan lebih banyak partisi meja, Cassandra bisa menang lebih besar. Tetapi perhatikan, bahwa kasus penggunaan yang Anda jelaskan tidak khas. Dan perbedaan arsitektur lainnya (Cassandra pandai mempartisi, Redis pandai menghitung, LUA dan lainnya) masih berlaku.
Angka:
Perintah redis:set(KEY + (tstate.i++), TEXT);
Perintah Cassandra:execute("insert into test.test (id,data) values (?,?)", state.i++, TEXT)
Dimana TEXT = "Wake up, Neo. We have updated our privacy policy."
Redis fsync setiap detik, 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 setiap penulisan, 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 setiap penulisan, 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 setiap detik,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 setiap batch, tetapi tunggu setidaknya 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)