Gremlin Cosmos DB - 如何构建 FPS 游戏中的事件?

Gremlin Cosmos DB - How to structure events from a FPS game?

所以,我对图形和 gremlin 完全陌生 API 所以我希望这里有人能给我指出正确的方向。

我打算创建 FPS 游戏中所有事件的概览图。这意味着我有一个球员、回合和每一回合中发生的所有事件的列表。一个事件可以是;

等等...

我不太确定应该以哪种方式构建它。事件应该只是一条边,指向另一个玩家(顶点)吗?这意味着边缘需要额外的属性,并且需要与游戏回合相关,不确定这是否可能..?

如有任何帮助,我们将不胜感激。

再详细一点,这是一个典型的事件。

{
    "attackId": 587204688,
    "attacker": {
        "name": "Danielsol13",
        "teamId": 10,
        "health": 56.031158447265625,
        "location": {
            "x": 218720.15625,
            "y": 467373.53125,
            "z": 13599.349609375
        },
        "ranking": 0,
        "accountId": "account.46118b5fe1954e97a6af47cb6e9506af",
        "isInBlueZone": false,
        "isInRedZone": false,
        "zone": []
    },
    "victim": {
        "name": "BUTTZN",
        "teamId": 3,
        "health": 45.600002288818359,
        "location": {
            "x": 217836.6875,
            "y": 464758.8125,
            "z": 13499.73046875
        },
        "ranking": 0,
        "accountId": "account.308db6ede78048d1aa372f6ee7b87eed",
        "isInBlueZone": false,
        "isInRedZone": false,
        "zone": []
    },
    "damageTypeCategory": "Damage_Gun",
    "damageReason": "HeadShot",
    "damage": 45.600002288818359,
    "damageCauserName": "WeapHK416_C",
    "isThroughPenetrableWall": false,
    "common": {
        "isGame": 1.5
    },
    "_D": "2021-03-15T20:46:24.063Z",
    "_T": "LogPlayerTakeDamage"
}

决定事件是顶点还是边时,您需要问自己的主要问题是:事件是否需要连接到 From player 顶点和 To player 顶点以外的任何顶点?

您是说事件需要与回合相关联。所以可能 Event 需要是一个顶点。除非你永远不需要在遍历中使用这种关系。

如果您永远不需要遍历 Round 和 Event 之间的这种关系,那么您可以只在 Event 边上设置一个标量 属性“RoundId”。

但是,如果您需要编写遍历,例如“根据谓词过滤轮次,然后遍历轮次事件”,那么您可能需要将事件作为顶点。

此外,如果您希望编写大量从事件开始的遍历,例如 g.V().has('event', ...)g.E().has('event', ...),那么您可能希望事件是顶点,而不是边。因为我相信(对此我不是 100% 确定),在大多数图形数据库中,搜索顶点比搜索边缘更有效。