【问题标题】:Which method of storing this particular data would be more efficient?哪种存储这些特定数据的方法会更有效?
【发布时间】:2019-01-08 20:10:25
【问题描述】:

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

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

在 MySQL 中我真的别无选择,但我可以使用 ArangoDB。

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

    +---------------------------+
    | user_id | item_id | count |
    +---------+---------+-------+
    |       1 |       1 |     7 |
    |       1 |       2 |     4 |
    +---------+---------+-------+

或者在 ArangoDB 中,我可以这样做:

  1. 所有信息的单一集合:

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

    // 'user' collection
    {
        _key: "Unique User ID",
        health: 100,
        money: 52.38,
        ....
    }
    
    // 'inventory' collection
    {
        _key: "Unique User ID",
        item1: 7,
        item2: 4
        // , ....
    }
    

以上两种方法中的哪一种(甚至是我没有想到的另一种)会更有效?

【问题讨论】:

    标签: arangodb arangojs


    【解决方案1】:

    嗯,答案取决于您对应用程序使用数据的期望。这里有一些关于我将如何选择如何存储数据的提示:

    • 库存数据是否不经常更改,访问用户信息时通常需要它吗?如果是这种情况,那么您可能最好使用选项 1(将库存数据与用户信息一起存储)。

    • 您想让从关系存储到文档存储的过渡尽可能轻松吗?然后,您可能可以将选项 2 与单独的集合一起使用。 Arangodb 支持跨集合连接,而且效果很好。

    • 现在,如果您不介意学习曲线,我会建议选项 3:图形遍历。在这种情况下,您可以以类似于以下方式存储数据:

      //用户顶点集合

      { _key:“1”, 健康:100, 金钱:52.38, …… }

      //项目顶点集合

      { 项目ID:1, // , .... },

      { 物品编号:2 // , .... }

      //库存边缘收集

      { _来自:用户\1 _to:项目\1, 计数:7 },

      { _来自:用户\1 _to:项目\2, 计数:4 }

    由于 ArangoDB 对图遍历具有原生支持,因此上述设置已针对真正快速的查找进行了优化。开始从关系数据库迁移到图形数据库时的经验法则是,主表成为集合,中间(连接)表成为边缘集合。 (显然还有更多内容,但这是一个好的开始)

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

    【讨论】:

    • 库存数据经常变化。对不起;可能应该在我的帖子中提到这一点。选项 3(图遍历)听起来很有趣,我将对其进行一些研究。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2019-05-27
    • 2013-08-02
    • 2011-06-07
    • 2015-08-25
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多