Arangodb 哪种存储这种特定数据的方法更有效?

Arangodb 哪种存储这种特定数据的方法更有效?,arangodb,arangojs,Arangodb,Arangojs,我有一个现有的游戏数据库-目前使用MySQL存储信息-我希望测试ArangoDB以比较速度 我想知道将一个玩家的所有信息存储在一个集合中是否会更好,或者将两者分开是否会更有效,甚至是更好的做法 在MySQL中,我没有选择,但使用ArangoDB我有选择 例如,在MySQL中存储库存信息: +---------------------------+ | user_id | item_id | count | +---------+---------+-------+

我有一个现有的游戏数据库-目前使用MySQL存储信息-我希望测试ArangoDB以比较速度

我想知道将一个玩家的所有信息存储在一个集合中是否会更好,或者将两者分开是否会更有效,甚至是更好的做法

在MySQL中,我没有选择,但使用ArangoDB我有选择

例如,在MySQL中存储库存信息:

    +---------------------------+
    | user_id | item_id | count |
    +---------+---------+-------+
    |       1 |       1 |     7 |
    |       1 |       2 |     4 |
    +---------+---------+-------+
或者在ArangoDB,我可以:

所有信息的单一集合:

{
    _key: "Unique User ID",
    health: 100,
    money: 52.38,
    // .... ,
    inventory:
        {
            item1: 7,
            item2: 4
            // , ....
        }
}
将上述集合分为两个不同的集合,一个用于健康、金钱等,另一个用于库存数据:

// 'user' collection
{
    _key: "Unique User ID",
    health: 100,
    money: 52.38,
    ....
}

// 'inventory' collection
{
    _key: "Unique User ID",
    item1: 7,
    item2: 4
    // , ....
}

以上两种方法中,我没有想到哪一种更有效?

答案取决于应用程序使用数据的方式。以下是一些关于如何选择如何存储数据的提示:

库存数据是否很少更改?访问用户信息时是否通常需要这些数据?如果是这种情况,那么您最好使用选项1将库存数据与用户信息一起存储

您是否希望尽可能轻松地从关系存储过渡到文档存储?然后,您可能可以对单独的集合使用选项2。Arangodb支持跨集合的连接,并且工作得非常好

现在,如果您不介意一点学习曲线,我建议您选择3:图遍历。在这种情况下,您将以与以下类似的方式存储数据:

//用户顶点集合

{ _重点:1,, 健康:100, 货币:52.38, .... }

//项目顶点集合

{ 项目编号:1, // , .... },

{ 项目编号:2 // , .... }

//库存边缘收集

{ _发件人:用户\1 _收件人:项目\1, 计数:7 },

{ _发件人:用户\1 _收件人:项目\2, 计数:4 }

由于ArangoDB本机支持图形遍历,因此上述设置针对真正快速的查找进行了优化。开始从关系数据库向图形数据库移动时的经验法则是,主表成为集合,中间联接表成为边缘集合。显然还有很多,但这是一个好的开始


如果我从零开始,我可能会首先选择选项3。但是,正如我在开头提到的,这取决于您打算如何使用数据

库存数据经常变化。很抱歉也许我应该在我的帖子中提到这一点。选项3图形遍历听起来非常有趣,我将对此进行一些研究。谢谢你的帮助!