Reduce

概要

Reduce システムは、 Map 処理の key:value のペアを入力値として採用します。入力値が定義した条件を満たした場合、Reduce は定義された処理を使用して、新しい key:value ペアを生成します。

reduce 処理には、 minmaxcountsum があります。reduce 処理のアウトプットは、入力値を reduce 処理の配列に変換した概要です。

Reduce 定義の例

{
  "version": "1.7.0",
  "event": {
    "game": {
      "reductions": [
        {
          "id": "changeColor",
          "where": {"key": ["changeColor", "<name>", "<color>"]},
          "key": ["<name>", "<color>"],
          "value": ["$count"],
          "period": 250
        },
        {
          "id": "cheer",
          "where": {"key": ["cheer", "<name>"]},
          "key": ["<name>"],
          "value": ["$sum"],
          "period": 250
        }
      ]
    }
  }
}

Reduce スキーマ

id

reduce を参照する一意の文字列です。

where

新しい key:value ペアの生成を起動する条件を定義するスキーマ。詳細は、Where 節のコンテンツ を参照してください。

period

Reduce の実行間隔はミリ秒 (ms) です。たとえば、250ms の間隔というのは、毎秒 4 回のアウトプットをゲームが受け取ることを意味しています。

key

新しいキーを表す文字列の配列。次のような文字列があります。

  • 英数字の文字列: 単純文字列。
  • <anyText>: 入力キーから得られる値。

value

入力値をマージして、アウトプットを生成する処理の配列。処理を指定した場合でも、すべての処理は現在、reduce に戻されます。

処理には次のようなものがあります。

  • $min : すべての入力値の最小値を戻します。
  • $max : すべての入力値の最大値を戻します。
  • $count : キーの出現数を戻します。
  • $sum : すべての入力値の合計値を戻します。

Reduce の例

Reduce 処理は、 key:value ペアを入力値として、他の key:value ペアに変換しますが、マージして数を減らします。

マッピングステップと同様、Genvid は Reduce のステップに JSON を使用します。

{
  "id": "playerlike",
  "where": {
    "key": ["like", "<playerName>"]
  },
  "key": ["like", "<playerName>"],
  "value": ["$count"],
  "period": 1000
}

Reduce のステップ中、 "like" で始まるキーを探し、2 番目のパラメータは無視します (2 番目のパラメータで一致するものは、以降のステップでトークン playerName で参照可能です)。

この処理で、一致する key:value をマージします。値はマージされて値のペアになり、元のキー値を検出した回数が値として割り当てられます。Genvid はこの結果を使用してイベントデータを送信します。

たとえば、 Map 機能の結果は次のようになります。

[
   { "key": ["like", "player1"], "value": 1 },
   { "key": ["like", "player1"], "value": 1 },
   { "key": ["like", "player2"], "value": 1 },
   { "key": ["like", "player1"], "value": 1 }
]

Reduce 機能は、次のようにマージします。

[
  {"key": ["like", "player1"], "value": "3"},
  {"key": ["like", "player2"], "value": "1"}
]