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

Redisハッシュと多くのキーの使用のパフォーマンス比較

    hashの選択 string以上 ユースケースに応じて、多くの利点といくつかの欠点があります。ハッシュを選択する場合は、jsonオブジェクトをハッシュフィールドと次のような値として設計することをお勧めします。

    127.0.0.1:6379> hset user:1 ssn 10101010101 name john surname wick date 2020-02-02 location continental
    (integer) 5
    127.0.0.1:6379> hgetall user:1
     1) "ssn"
     2) "10101010101"
     3) "name"
     4) "john"
     5) "surname"
     6) "wick"
     7) "date"
     8) "2020-02-02"
     9) "location"
    10) "continental"
    

    hashのメリットは次のとおりです 適切なデータモデリングを行うと、文字列を超えます。

    • パフォーマンスの面では、文字列とハッシュの両方のほとんどのコマンドは同じ複雑さです。
    • 文字列と比較すると、ハッシュ上の個々のjsonフィールドに簡単にアクセス/更新/削除できます。文字列全体を取得し、デコードし、変更を加えて、再度設定する必要はありません。オブジェクト全体を取得せずに、これらの操作にHDEL、HSET、またはHGETを使用できます。
    • 文字列オブジェクトのサイズが大きくなると、オブジェクト全体を転送(取得/設定)するときにネットワークと帯域幅に問題が発生します。ドキュメントに記載されているとおり

    RAMの速度とメモリ帯域幅は、特に小さなオブジェクトのグローバルパフォーマンスにとってそれほど重要ではないようです。大きなオブジェクト(> 10 KB)の場合は、目立つようになる可能性があります。

    • データサイズを設計するための優れたベンチマークを作成する場合、ハッシュは文字列よりもメモリに適しています。ドキュメントとInstagramエンジニアリングのユースケースの例に記載されているように、特別なエンコーディングを使用すると大きなメリットが得られる可能性があります。

    ハッシュ、リスト、整数のみで構成されるセット、およびソートされたセットは、指定された要素数よりも小さく、最大要素サイズまでの場合、最大10分の1のメモリを使用する非常にメモリ効率の高い方法でエンコードされます(5時間の少ないメモリ使用量が平均的な節約になります。

    一方、ユースケースによっては;

    • ziplist 無料ではありません。メモリとCPUのトレードオフです。
    • ハッシュフィールドを部分的に期限切れにすることはできません。複数の文字列に分割する場合は、EXPIRE ただし、ハッシュでは、最上位のキーのみがすべての値で期限切れになります。



    1. pymongoの高速またはバルクアップサート

    2. マングース-基準によるサブドキュメントの検索

    3. 2つの列を互いに一意にすることはできますか?または、redisで複合主キーを使用しますか?

    4. カスタムBSONマーシャリングの処理