Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Redis AOF fsync (LUÔN) so với cây LSM

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)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Có lệnh nào trong Redis cho cấu trúc dữ liệu HASH tương tự như MGET không?

  2. StackExchange.Redis sử dụng nhiều điểm cuối và kết nối như thế nào?

  3. Redis xuất bản / đăng ký:xem những kênh nào hiện được đăng ký

  4. Trả lại danh sách hgetall từ redis trong nodejs

  5. Kết nối với AWS ElastiCache bằng Mã hóa In-Transit + Xác thực từ ứng dụng khách không phải redis-cli + stunnel