LSM là AOF mà đôi khi bạn muốn đọc thực sự. Bạn thực hiện một số công việc trên đầu để có thể đọc nhanh hơn sau này. Redis được thiết kế để bạn không bao giờ hoặc chỉ trong trường hợp đặc biệt mới đọc nó. Mặt khác, Cassandra thường đọc nó để phục vụ các yêu cầu.
Và những gì Redis gọi là chậm thực sự rất nhanh đối với một db như Cassandra.
============================CẬP NHẬT
Hóa ra, tôi đã kết luận quá sớm. Từ quan điểm thiết kế, mọi thứ ở trên đều đúng, nhưng cách triển khai khác nhau rất nhiều. Mặc dù Cassandra tuyên bố độ bền tuyệt đối, nó không fsync
trên mỗi giao dịch và không có cách nào để buộc nó làm như vậy (nhưng mỗi giao dịch có thể được fsynced). Điều tốt nhất tôi có thể làm là 'fsync ở chế độ hàng loạt ít nhất 1ms sau fsync trước đó'. Nó có nghĩa là đối với điểm chuẩn 4 luồng mà tôi đang sử dụng, nó thực hiện 4 lần ghi cho mỗi fsync và các luồng đang chờ fsync được thực hiện. Mặt khác, Redis đã fsync trên mỗi lần viết, vì vậy thường xuyên hơn 4 lần. Với việc bổ sung nhiều chủ đề hơn và nhiều phân vùng hơn của bàn, Cassandra có thể giành chiến thắng lớn hơn nữa. Nhưng lưu ý rằng trường hợp sử dụng bạn mô tả không phải là điển hình. Và những khác biệt về kiến trúc khác (Cassandra giỏi về phân vùng, Redis giỏi về quầy, LUA và những thứ khác) vẫn được áp dụng.
Số:
Lệnh Redis:set(KEY + (tstate.i++), TEXT);
Lệnh Cassandra:execute("insert into test.test (id,data) values (?,?)", state.i++, TEXT)
Where TEXT = "Wake up, Neo. We have updated our privacy policy."
Redis fsync mỗi giây, 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 mỗi lần ghi, 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 mỗi lần ghi, 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 mỗi giây, 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 hàng loạt, nhưng đợi ít nhất 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)