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
version
フィールドが存在し、1.7.0 である必要があります。event
フィールドに、残りの定義を含みます。
深度レベル 2
game
フィールドに map と reduce を含みます。
深度レベル 3
maps
フィールドに map 定義を含みます。reductions
フィールドに reduce 定義を含みます。
Map と reduce はどちらも where
節を使用して結果をフィルタリングします。マップを分割して独自のドキュメントに分割することができるため、必ずしも両方を同じドキュメント内に配置する必要はありません。