Event MapReduce アルゴリズム

イベントは、ゲームの処理と視聴者との通信をカプセル化します。イベントは、視聴者の入力の制限、チャットイベントの分析と応答、ログの検査など、多くの機能を実行できます。イベントは key:value ペアで構成されます。

複数のソース (Web 閲覧者、ゲームクライアント、ライブチャット、ログなど) からのイベントをフィルタ処理し、組み合わせることで、限られた数の結果を出す MapReduce アルゴリズムによって、Genvid のスケーラビリティを設計しています。これによって、周波数と帯域幅への影響を大幅に軽減しています。

スキーマは JSON で記述し、イベントの定義を含んでおり、map と reduce とに分かれています。map、reduce の両方に where 節が存在します。

スキーマの例

{
  "version": "1.7.0",
  "event": {
      "game": {
          "maps": [
              {
                  "id": "changeColor",
                  "source": "userinput",
                  "where": {"key": ["changeColor", "<name>"], "name": "<color>", "type": "string"},
                  "key": ["changeColor", "<name>", "<color>"], "value": 1
              },
              {
                  "id": "cheer",
                  "source": "userinput",
                  "where": {"key": ["cheer"], "name": "<name>", "type": "string"},
                  "key": ["cheer", "<name>"], "value": 1
              }
          ],
          "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
              }
          ]
      }
  }
}

Schema コンテンツ

スキーマでは、記述は以下の構造で作成する必要があります。

深度レベル 1

  1. version フィールドが存在し、1.7.0 である必要があります。
  2. event フィールドに、残りの定義を含みます。

深度レベル 2

game フィールドに map と reduce を含みます。

深度レベル 3

  1. maps フィールドに map 定義を含みます。
  2. reductions フィールドに reduce 定義を含みます。

Map と reduce はどちらも where 節を使用して結果をフィルタリングします。マップを分割して独自のドキュメントに分割することができるため、必ずしも両方を同じドキュメント内に配置する必要はありません。