Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

RedisTimeSeries 1.6がリリースされました!

本日、RedisTimeSeries1.6の一般提供を発表できることをうれしく思います。このブログ投稿では、現在利用可能な主な新機能について詳しく説明しています。

RedisTimeSeriesについて

RedisTimeSeriesは、Redis用の高性能でメモリファーストの時系列データ構造です。 RedisTimeSeriesは、時系列マルチテナンシー(多数の時系列を同時に保持できます)をサポートし、これらの時系列に同時にアクセスする複数のクライアントにサービスを提供できます。 Redisスタックの一部としても利用できるようになりました。

RedisTimeSeries1.6の主な新機能

  • 強化されたクエリ機能
    • クロス時系列の集計
    • タイムスタンプまたはサンプル値による結果のフィルタリング
    • 取得するラベルの選択
    • 集計バケットの調整
      サンプルの削除
  • パフォーマンスの向上
  • キースペース通知
  • RedisonFlashのRedisEnterpriseサポート

拡張クエリ機能

クロス時系列集計

バージョン1.6より前では、1つのタイプの集計のみが可能でした:

  • 単一の時系列の場合–
    等期間の時間枠でサンプルを集約します。

バージョン1.6以降、2つの新しい集計タイプが可能です。

  • 複数の時系列の場合–
    時系列のセット全体でタイムスタンプが等しいサンプルを集約します。
  • 複数の時系列の場合–
    まず、等期間の時間枠で各時系列を集計し、次に、各時間枠で、一連の時系列の結果を集計します。

最初の新しい集計タイプを示しましょう。まず、2つの株を作成し、3つの異なるタイムスタンプでそれらの価格を追加しましょう:

TS.CREATE stock:A LABELS type stock name A
TS.CREATE stock:B LABELS type stock name B
TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
TS.MADD stock:B 1000 120 stock:B 1010 110 stock:B 1020 100

これで、タイムスタンプごとの最大株価を取得できます。

redis:6379> TS.MRANGE - + WITHLABELS FILTER type=stock GROUPBY type 
REDUCE max

1) 1) "type=stock"
   2) 1) 1) "type"
         2) "stock"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "stock:A,stock:B"
   3) 1) 1) (integer) 1000
         2) 120
      2) 1) (integer) 1010
         2) 110
      3) 1) (integer) 1020
         2) 120

FILTER type=stock
条項は、株価を表す単一の時系列のみを残します。
GROUPBY type REDUCE
max
句は、時系列を同じタイプ値を持つグループに分割し、タイムスタンプごとに、maxアグリゲーターを使用して同じタイプ値を共有するすべてのシリーズを集約します。

FILTER label=value
TS.MRANGEおよびTS.MREVRANGEによってサポートされています。追加のフィルタリング句もサポートされています(ドキュメントを参照)。

次に、2番目の新しい集計タイプを示します:

まず、2つの株を作成し、9つの異なるタイムスタンプでそれらの価格を追加しましょう。

TS.CREATE stock:A LABELS type stock name A
TS.CREATE stock:B LABELS type stock name B
TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
TS.MADD stock:B 1000 120 stock:B 1010 110 stock:B 1020 100
TS.MADD stock:A 2000 200 stock:A 2010 210 stock:A 2020 220
TS.MADD stock:B 2000 220 stock:B 2010 210 stock:B 2020 200
TS.MADD stock:A 3000 300 stock:A 3010 310 stock:A 3020 320
TS.MADD stock:B 3000 320 stock:B 3010 310 stock:B 3020 300

ここで、各株式について、1000ミリ秒の時間枠あたりの平均株価を計算し、

を使用して株式を取得します。

その時間枠の最大平均:

redis:6379> TS.MRANGE - + WITHLABELS AGGREGATION avg 1000 FILTER type=stock GROUPBY type REDUCE max

1) 1) "type=stock"
   2) 1) 1) "type"
         2) "stock"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "stock:A,stock:B"
   3) 1) 1) (integer) 1000
         2) 110
      2) 1) (integer) 2000
         2) 210
      3) 1) (integer) 3000
         2) 310

GROUPBY label REDUCE reducer
TS.MRANGEおよびTS.MREVRANGEによってサポートされています。

レデューサーは、合計、最小、または最大にすることができます。

タイムスタンプまたはサンプル値による結果のフィルタリング

TS.RANGE、TS.REVRANGE、TS.MRANGE、およびTS.MREVRANGEを使用する場合、必ずしもすべてのサンプルを取得または集約する必要はありません。

[FILTER_BY_TS ts...]
を使用する 特定のタイムスタンプのリストでサンプルをフィルタリングできます。

[FILTER_BY_VALUE min max]
を使用する 最小値と最大値でサンプルをフィルタリングできます。

たとえば、通常の値が-100から100の間であるが、値9999が不適切な測定値の指標として使用されているサンプルメトリックを考えてみます。

TS.CREATE temp:TLV LABELS type temp location TLV
TS.MADD temp:TLV 1000 30 temp:TLV 1010 35 temp:TLV 1020 9999
temp:TLV 1030 40

それでは、すべての値を取得し、範囲外の値は無視しましょう:

TS.RANGE temp:TLV - + FILTER_BY_VALUE -100 100

範囲外の値を無視して、平均値も取得しましょう:

TS.RANGE temp:TLV - + FILTER_BY_VALUE -100 100 AGGREGATION avg 1000

取得するラベルの選択

TS.MRANGE、TS.MREVRANGE、およびTS.MGETを使用する場合、一致する時系列に関連付けられているすべてのラベルの値が常に必要なわけではなく、選択したラベルの値のみが必要です。

SELECTED_LABELS
取得するラベルを選択できます。次の時系列とデータが与えられます:

TS.CREATE temp:TLV LABELS type temp location TLV
TS.MADD temp:TLV 1000 30 temp:TLV 1010 35 temp:TLV 1020 9999
temp:TLV 1030 40

一致する時系列に関連付けられているすべてのラベルを取得するには、

WITHLABELS
を使用します :

redis:6379> TS.MGET WITHLABELS FILTER type =temp

1) 1) "temp:TLV"
   2) 1) 1) "type"
         2) "temp"
      2) 1) "location"
         2) "TLV"
   3) 1) (integer) 1030
      2) 40

ただし、場所のみが必要な場合は、

SELECTED_LABELS:
を使用できます。

redis:6379> TS.MGET SELECTED_LABELS location FILTER type=temp

1) 1) "temp:TLV"
   2) 1) 1) "location"
         2) "TLV"
   3) 1) (integer) 1030
      2) 40

集計バケットの調整

1日の平均気温を取得したいが、「1日」は06:00に開始するとします。この場合、間隔を00:00から23:59ではなく、06:00から05:59に調整します。

TS.RANGE、TS.REVRANGE、TS.MRANGE、およびTS.MREVRANGEを使用する場合、

ALIGN
を使用して、集約バケットを要求された開始、終了、または特定のタイムスタンプに合わせることができるようになりました。 。

アラインメントを示すために、次のデータを追加しましょう。

TS.CREATE stock:A LABELS type stock name A
TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
TS.MADD stock:A 1030 200 stock:A 1040 210 stock:A 1050 220
TS.MADD stock:A 1060 300 stock:A 1070 310 stock:A 1080 320

次に、

ALIGN
を使用せずに集計します (これはデフォルトの配置を意味します:0)

redis:6379> TS.RANGE stock:A - + AGGREGATION min 20

1) 1) (integer) 1000
   2) 100
2) 1) (integer) 1020
   2) 120
3) 1) (integer) 1040
   2) 210
4) 1) (integer) 1060
   2) 300
5) 1) (integer) 1080
   2) 320

そして今、

ALIGN

redis:6379> TS.RANGE stock:A – + ALIGN 10 AGGREGATION min 20

1) 1) (integer) 990
   2) 100
2) 1) (integer) 1010
   2) 110
3) 1) (integer) 1030
   2) 200
4) 1) (integer) 1050
   2) 220
5) 1) (integer) 1070
   2) 310

ALIGN
の設定 10までは、バケットが時間10に開始する必要があり、すべてのバケット(それぞれ20ミリ秒の期間)がそれに応じて整列されることを意味します。

範囲クエリの開始タイムスタンプが明示的に指定されている場合(「-」ではない)、alignを「-」または「

start
」に設定することで、ALIGNをその時間に設定することもできます。 ‘。

redis:6379> TS.RANGE在庫:A 5 + ALIGN – AGGREGATION min 20

1) 1) (integer) 985
   2) 100
2) 1) (integer) 1005
   2) 110
3) 1) (integer) 1025
   2) 200
4) 1) (integer) 1045
   2) 220
5) 1) (integer) 1065
   2) 310

同様に、範囲クエリの終了タイムスタンプが明示的に指定されている場合(「+」ではない)、

ALIGN
を設定することもできます。 アラインを「+」または「終了」に設定して、その時間に合わせます。

サンプルの削除

TS.DELを使用すると、2つのタイムスタンプ内の特定の時系列のサンプルを削除できます。

例:

TS.DEL stock:A 1020 1050
タイムスタンプが1020〜1050(両端を含む)のすべてのサンプルを削除します。戻り値は、削除されたサンプルの数です。

パフォーマンスの向上

多くの最適化が実装され、ほとんどのクエリはRedisTimeSeries1.4と比較してはるかに高速に実行されるようになりました。

次の表は、TSBSクエリ(ここで説明)について、単一ノードで達成可能な1秒あたりのクエリ数の詳細を示しています。この表には、バージョン1.4でサポートされていたTSBSクエリのサブセットのみがリストされています。

クエリタイプ 1.4
クエリ/秒
v1.6
クエリ/秒
変化率(高い-良い)
tsbs-scale100_cpu-max-all-1 1388 1500 8.07%
tsbs-scale100_double-groupby-1 100 108 8.00%
tsbs-scale100_groupby-orderby-limit 793 1282 61.66%
tsbs-scale100_single-groupby-1-1-1 13448 21347 58.74%
tsbs-scale100_single-groupby-1-1-12 2383 3921 64.54%

8%から65%の改善が見られます RedisTimeSeries1.4と比較した1秒あたりのクエリ数。

キースペース通知

Redis Keyspace通知を使用すると、RedisクライアントはPub / Subチャネルにサブスクライブして、何らかの方法でRedisデータセットに影響を与えるイベントを受信できます。たとえば、RedisGearsを使用して、これらの通知で関数をトリガーできます。

例として、サンプルのストリームをリッスンし、リアルタイムの予測と警告を生成する時系列予測子または異常検出器を実装することが可能です。
たとえば、さまざまなRedisTimeSeriesコマンドをサブスクライブしてイベントを生成するこのテストを確認してください。

RedisonFlashのRedisEnterpriseサポート

バージョン1.6以降、RedisTimeSeriesはRedis on Flashで実行できますが、RoFはキーレベルで実装されていることに注意してください。つまり、時系列全体の値はFLASHまたはRAMのいずれかに存在します。

RedisTimeSeriesはRedisStackの一部です

RedisTimeSeriesはRedisスタックの一部になりました。 macOS、Ubuntu、またはRedhat用の最新のRedis Stack Serverバイナリをダウンロードするか、Docker、Homebrew、またはLinuxを使用してインストールできます。

RedisInsightを使用して時系列データを視覚化する

RedisInsightは、RedisまたはRedisStackを使用した開発中にRedisTimeSeriesからのデータを探索するための優れた方法を提供する開発者向けのビジュアルツールです。

時系列クエリを実行し、グラフィカルユーザーインターフェイスから直接結果を観察できます。 RedisInsightは、RedisTimeSeriesクエリの結果を視覚化できるようになりました。

RedisTimeSeries 1.6がリリースされました!

さらに、RedisInsightには、RedisTimeSeriesをインタラクティブに学習するためのクイックガイドとチュートリアルが含まれています。

RedisTimeSeries 1.6がリリースされました!

redis.ioおよびdeveloper.redis.comのRedisTimeSeriesの詳細をご覧ください。


  1. RedisTimeSeriesで財務アプリケーションを構築する

    大まかに言えば、世界には2つのタイプの投資家がいます。 基本的な投資家 s企業に投資するかどうかを決定する際には、企業のビジネスモデル、収益、収益、キャッシュフロー、現在の評価、リスク、成長見通しなどの基本的な指標を確認します。ウォーレンバフェットは、彼の基礎研究を通じて過小評価されている企業を見つけることで有名になり、世界で最も裕福な男性の1人になりました。 一方、技術投資家 会社のファンダメンタルズにはほとんど、またはまったく注意を払わず、代わりに、何百ものテクニカル指標からシグナルを購入、販売、保持することに注意を向けます。これらのテクニカル投資家は、日次、週次、または月次で取引され

  2. TV で Netflix の音声が同期していない問題を修正

    Netflix は、お気に入りの番組や映画を視聴できる人気の OTT プラットフォームです。ただし、スマート TV で Netflix を視聴しているときに、音声の問題が発生する場合があります。これはユーザーの間でよくある問題であり、いくつかのトラブルシューティング方法を適用することで修正できます。サムスンのようなテレビでNetflixのオーディオが同期していない問題を修正するための役立つガイドをお届けします.それでは、読み続けてください! スマート TV で Netflix の音声が同期していない問題を修正する方法 以下に、Samsung Smart TV や Apple TV など