すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):TairRoaringパフォーマンスホワイトペーパー

最終更新日:Sep 12, 2024

TairRoaingは、TairでのRoaringビットマップの実装です。 TairRoaringは強力で安定したコンピューティングパフォーマンスを提供し、少量のメモリしか消費せずにクエリ速度を向上させるのに役立ちます。

TairRoaringは、Roaringビットマップに基づいて次の側面で改善されます。

  • TairRoaringは、2レベルのインデックスと動的コンテナを使用することで、多数のシナリオでパフォーマンスとスペースの複雑さのバランスをとることができます。

  • TairRoaringは、単一命令、複数データ (SIMD) 、ベクトル化、およびpopcountアルゴリズムなどの最適化技術を使用して、計算効率を改善し、効率的な時間と空間の複雑さを実現します。

  • TairRoaringは、Tairが提供する強力なコンピューティングパフォーマンスと高い安定性を活用して、ビジネスシナリオをサポートします。

説明

TairRoaringの詳細については、「TairRoaring」をご参照ください。

テストツール

このトピックで提供されるテストツールは、Goプログラミング言語を使用して開発されており、redis-benchmarkユーティリティで使用されるツールと似ています。 これにより、テストツールの使用と変更が容易になります。 このテストツールでは、テスト例の作成に役立つ2つのランダム値を生成し、結果をヒストグラムとして表示することもできます。 テストツールを入手するには、 TairRoaringテストツール

使用:

Usage of ./redis:
  -a string         Account password used to log on to the instance. Password format: <user>:<password>. 
  -batching int     Pipeline mode. This parameter also sets the number of individual commands that each pipeline contains. The pipeline mode combines the MULTI and EXEC commands. For example, -batching 10 indicates that 10 commands exist between the MULTI and EXEC commands. 
  -c int            Number of tests that are run. This parameter ignores the test duration (-d). 
  -command string   Test command. You can add the __RAND__ and __RAND2__ fields to the suffix of a command or parameter. The fields take effect and become random values only when they are added to a command or parameter suffix. Default command: TR.GETBIT foo-__RAND__. 
  -d int            Test duration. Unit: seconds. Default value: 30. 
  -h string         Endpoint used to connect to the instance. Default value: 127.0.0.1. 
  -p int            Number of tests that can be run concurrently. Default value: 4. 
  -port int         Port number of the instance. Default value: 6379. 
  -r int            Range of Random value 1. Default value: 100000000. 
  -r2 int           Range of Random value 2. Default value: 100000000. 

サンプルコマンド:

# Run the TR.SETBIT command. Set the key to a random number that is less than 100000 and the fields to random numbers that are less than 10000000. 
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.SETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1

標準アーキテクチャのテスト方法と結果

関連するインスタンスは、標準アーキテクチャを使用する16 GBのApsaraDB for Redis Enhanced Edition (Tair) DRAMベースのインスタンスです。 ネットワーク遅延は0.1ミリ秒未満です。

単一のキーのテスト

  • パフォーマンステスト

    1つのキーに同時にデータを書き込み、1秒あたりの最大クエリ数 (QPS) 値を取得します。

    • 読み取りコマンドテスト

      以下のコマンドを実行する: TR.GETBIT、TR.GETBITS、TR.RANGE、TR.SCAN、およびTR.RANK。 サンプルコマンド:

      ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.GETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1

      テスト結果:

      コマンド

      数のキー関连

      関係するデータレコードの数

      パラメーター範囲

      QPSリファレンス値

      平均レイテンシ (ms)

      TR.GETBIT

      1

      1

      1 ~ 10000000

      255000

      0.21

      TR.GETBITS

      1

      100

      1 ~ 10000000

      54000

      0.97

      TR. ランク

      1

      1

      1 ~ 10000000

      161000

      0.24

      TR. レンジ

      1

      100

      0~100

      129000

      0.46

      TR. スキャン

      1

      100

      1 ~ 10000000

      130000

      0.38

    • 書き込みコマンドテスト

      以下のコマンド: TR.SETBIT、TR.SETBITS、TR.APPENDBITARRAY、TR.SETRANGE、およびTR.FLIPRANGEを実行する。 サンプルコマンド:

      ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.SETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1

      テスト結果:

      コマンド

      数のキー関连

      関係するデータレコードの数

      パラメーター範囲

      QPSリファレンス値

      平均レイテンシ (ms)

      TR.SETBIT

      1

      1

      1 ~ 10000000

      145000

      0.37

      TR.SETBITS

      1

      100

      1 ~ 10000000

      22000

      0.71

      TR.SETBITS (注文)

      1

      100 (ビットの最大オフセット値は2 ^ 32)

      1 ~ 6000

      28000

      0.66

      TR。アペンディターレイ

      1

      1000 (ビットの半分の値は1です)

      1 ~ 10000000

      10000

      0.38

      TR.SETRANGE

      1

      -

      1000

      130000

      0.3

      TR.FLIPRANGE

      1

      -

      1 ~ 10000000

      100000

      0.46

    • パイプラインテスト

      異なるバッチサイズを使用して、パイプラインモードでのコマンドのパフォーマンスをテストします。

      • TR.SETBIT

        サンプルコマンド:

        ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 10000000 -command "TR.SETBIT foo-__RAND__ 1" -batching 10 -p 20 -c 1

        パラレル

        バッチ処理

        ビット /秒

        平均レイテンシ (ms)

        20

        10

        460000

        0.42

        10

        50

        665000

        0.72

        6

        100

        660000

        0.85

        3

        200

        680000

        0.79

        3

        500

        681500

        1.96

        2

        100

        658000

        2.6

        Performance testing of TairRoaring-3

      • TR.GETBIT

        サンプルコマンド:

        ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.GETBIT foo-__RAND__ __RAND2__" -batching 10 -p 20 -c 1
        説明

        foo-_RAND__で指定したキーが存在しない場合は、空のキーとして扱われます。 したがって、テストのために最初にキーにデータを書き込む必要があります。

        パラレル

        バッチ処理

        ビット /秒

        平均レイテンシ (ms)

        20

        10

        572700

        0.34

        10

        50

        725900

        0.65

        7

        100

        772000

        0.85

        7

        200

        788800

        1.67

        5

        500

        746000

        3.1

        2

        100

        770000

        2.1

        Performance testing of TairRoaring-4

  • メモリテスト

    TR.STATコマンドを数回実行して、キー内のビットの分布を分析します。 異なるキー容量が使用される。 サンプルコマンド:

    TR.STAT foo JSON
    • スパースデータを含むシナリオ

      疎データは、6.25% 未満の密度で疎に分布するビットを示す。 これらのシナリオでは、キーにはほとんど配列コンテナーが含まれます。 キーの容量は、式: キー容量=キー濃度 × 2バイトを使用して計算することができる。

      カーディナリティ

      rle-c

      array-c

      bitset-c

      ヒープmem (バイト)

      37700484

      -

      65536

      -

      75400968

      75011384

      -

      65536

      -

      150022768

      100403264

      -

      65536

      -

      200806528

      163090592

      -

      65536

      -

      326181184

    • ランダムデータを含むシナリオ

      これらのシナリオでは、キーにはほとんどビットセットコンテナが含まれます。 アルゴリズムロジックに従うために、アレイコンテナが4,096を超える要素を有する場合、アレイコンテナはビットセットコンテナに変換される。

      カーディナリティ

      rle-c

      array-c

      bitset-c

      ヒープmem (バイト)

      253104088

      -

      65534

      2

      506208102

      261169659

      -

      63273

      2263

      522227634

      267974804

      -

      35932

      29604

      533159296

      273694253

      -

      6607

      58929

      536491922

      343504134

      -

      0

      65536

      536870912

      535589835

      -

      0

      65536

      536870912

    • 連続するランダムビットを含むシナリオ

      これらのシナリオでは、記憶容量はビットの分布に密接に関連している。 その結果、これらのシナリオで実行されるテストにはほとんど価値がありません。

複数のキーのテスト

  • 書き込みテスト

    データが複数のキーに同時に書き込まれるときのエンジンパフォーマンスをテストします。 TR.SETBITSは、毎回100個のランダムビットを生成する。 サンプルコマンド:

    ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 10000000 -r2 100000 -command "TR.SETBITS foo-__RAND2__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__" -p 20

    コマンド

    フィールド /範囲

    QPSリファレンス値

    平均レイテンシ (ms)

    TR.SETBIT

    1

    91003

    0.43

    TR.SETBITS

    100

    15127

    0.96

    TR.GETBIT

    1

    154941

    0.32

    TR.GETBITS

    100

    40166

    1.08

    TR. スキャン

    100

    104637

    0.47

    TR. ランク

    -

    151161

    0.32

    Performance testing of TairRoaring-5

  • ビットごとの操作のテスト

    • TR.BITOP

      複数のキーに対してビット単位の操作を実行し、結果を新しいキーに保存します。 AND、OR、NOT、DIFF、およびXORビット単位の演算がサポートされています。

      サンプルコマンド:

      ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.BITOP dest-__RAND__ AND foo-__RAND__ foo-__RAND__" -p 3 -c 1

      ビットごとの操作

      パラレル

      QPSリファレンス値

      平均レイテンシ (ms)

      AND

      3

      940

      3.18

      OR

      2

      595

      3.45

      XOR

      2

      551

      3.61

      ディフ

      3

      3577

      0.83

      NOT

      1

      1281

      0.77

      Performance testing of TairRoaring-7

    • TR.BITOPCARD

      複数のキーに対してビット単位の操作を実行し、値が1の結果のビット数を返します。 AND、OR、NOT、DIFF、およびXORビット単位の演算がサポートされています。

      サンプルコマンド:

      ./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.BITOPCARD AND foo-__RAND__ foo-__RAND__" -p 2 -c 1

      ビットごとの操作

      パラレル

      QPSリファレンス値

      平均レイテンシ (ms)

      AND

      2

      971

      2.05

      OR

      2

      609

      3.27

      XOR

      2

      572

      3.48

      ディフ

      2

      4290

      0.46

      NOT

      2

      3577

      0.55

      Performance testing of TairRoaring-8

クラスターアーキテクチャのテスト方法と結果

クラスターアーキテクチャを使用する4つのDRAMベースのインスタンスのパフォーマンスをテストします。 インスタンスのシャード数が異なります。 各シャードのサイズは4 GBです。 次の項目は、インスタンスの仕様を示しています。

  • 8 GBクラスターインスタンス (2シャード)

  • 16 GBクラスターインスタンス (4シャード)

  • 32 GBクラスターインスタンス (8シャード)

  • 64 GBクラスターインスタンス (16シャード)

ネットワークの中断を防ぐには、すべてのインスタンスの帯域幅を最大2,048 Mbit/sに増やします。 インスタンスが存在するゾーンにテストで使用するクライアントをデプロイし、プロキシエンドポイントを使用してインスタンスにアクセスします。 単一のキーを含むさまざまなコマンドを実行して、インスタンスの平均QPS値を取得します。

以下のコマンドを実行する: TR.GITBIT、TR.GITBITS、TR.SETBIT、およびTR.SETBITS。 サンプルコマンド:

./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.SETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1

テスト結果:

コマンド

QPS値 (2つのシャードを持つDRAMベースのクラスターインスタンス)

QPS値 (4つのシャードを持つDRAMベースのクラスターインスタンス)

QPS値 (8つのシャードを持つDRAMベースのクラスターインスタンス)

QPS値 (16個のシャードを持つDRAMベースのクラスターインスタンス)

TR.GITBIT

590742

567738

569610

555178

TR.GITBITS

53900

91991

172969

229214

TR.SETBIT

316753

530367

577406

558301

TR.SETBITS

31917

57843

116614

160891

Performance testing of TairRoaring-9