sql >> データベース >  >> NoSQL >> Redis

Redis AOF fsync(ALWAYS)とLSMツリー

    LSMは、実際に時々読みたいAOFです。後でより速く読むことができるように、いくつかのオーバーヘッド作業を行います。 Redisは、決してまたは特別な場合にのみ読むように設計されています。一方、カサンドラはリクエストを処理するためにそれを読むことがよくあります。

    そして、Redisが遅いと呼ぶものは、Cassandraのようなデータベースにとって実際には非常に高速です。

    ============================更新

    結局、私はあまりにも早く結論に飛びつきました。設計の観点からは、上記のすべてが当てはまりますが、実装は大きく異なります。 Cassandraは絶対的な耐久性を主張していますが、fsync 各トランザクションで、強制的に実行する方法はありません(ただし、各トランザクションは同期される可能性があります)。私ができる最善のことは、「前のfsyncの少なくとも1ms後のバッチモードでのfsync」です。これは、私が使用していた4スレッドのベンチマークでは、fsyncごとに4つの書き込みを実行し、スレッドはfsyncが実行されるのを待機していたことを意味します。一方、Redisはすべての書き込みでfsyncを実行したため、4倍の頻度で実行されました。より多くのスレッドとテーブルのより多くのパーティションを追加することで、Cassandraはさらに大きく勝つことができます。ただし、説明したユースケースは一般的ではないことに注意してください。そして、他のアーキテクチャの違い(Cassandraはパーティション分割が得意、Redisはカウンター、LUAなどが得意)は引き続き適用されます。

    数字:

    Redisコマンド:set(KEY + (tstate.i++), TEXT);

    Cassandraコマンド:execute("insert into test.test (id,data) values (?,?)", state.i++, TEXT)

    ここで、TEXT = "Wake up, Neo. We have updated our privacy policy."

    毎秒fsyncを再実行、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)
    

    書き込みごとにfsyncを再実行します。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、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)
    

    カサンドラ、毎秒fsync、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しますが、少なくとも1ミリ秒待ちます、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. 高可用性オープンソースデータベース環境を設計する方法

    2. Ansibleを使用したMongoDBシャードのデプロイと構成

    3. MongoDB BulkWrite()

    4. MongoDBのIDEをクエリしますか?