【问题标题】:ArangoDB: having a few large collections vs. a lot small collectionsArangoDB:有一些大集合与很多小集合
【发布时间】:2019-09-18 23:54:19
【问题描述】:

我有一个关于性能/最佳实践的问题:

场景:我有一个用户集合和一个聊天机器人集合。他们可以是用户集合中的很多用户(比如说 100 -1000 个用户)。每个用户可以有多个聊天机器人(每个用户大约 10 个)。

选项 A: 我创建一个边缘集合来定义用户 -> 聊天机器人之间的连接。最后,我将拥有 1 个用户集合、1 个聊天机器人集合(包含来自所有用户的所有聊天机器人)和 1 个边缘集合(包含从用户到其聊天机器人的定义)

选项 B:我为每个用户创建一个单独的聊天机器人集合,以便将特定用户的所有聊天机器人放在一个地方。聊天机器人集合名称将是例如user_xyz(user._key)_chatbots。因此,如果我需要具有_key‘abc’的用户的所有聊天机器人,我会检查集合 user_abc_chatbots。在这种情况下,我不需要连接用户 -> 聊天机器人的边缘集合。最后,我将拥有 1 个用户集合和很多 user_xyz_chatbots-集合(取决于我有多少用户 - 正如我之前写的那样,可以是 100-1000)。

现在我的问题是:更好的选择是什么?另外关于性能 - 图片我每次收到请求时都必须获取用户的所有(或特定)聊天机器人。

如果您能就您的经验/想法给我反馈,那就太好了:)

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    查看您发布的数字,即 100 到 1000 个用户和每个用户大约 10 个聊天机器人,这意味着总共只有 1000 到 10000 个聊天机器人。

    对于这种数据维度,我认为将所有聊天机器人存储在一个集合中并使用(索引)属性来存储每个聊天机器人的用户 ID 更有意义。这是 1:n 关系(1 个用户映射到 n 个聊天机器人)

    这样,您可以轻松快速地找到映射到特定用户的所有聊天机器人,但此设置还允许您轻松分析所有用户或所有聊天机器人。

    如果每个用户的聊天机器人位于不同的集合中,这将更难实现。

    此外,如果可以将相同的聊天机器人映射到多个用户,那么使用三个集合实际上可能是有意义的:

    • 为用户提供一个集合
    • 聊天机器人合集
    • 以及用户和聊天机器人之间的一个映射集合

    这将是一个 n:m 关系,其中每个用户仍然可以映射到任意数量的聊天机器人,但如果多个用户映射到同一个聊天机器人,则每个聊天机器人的数据不需要冗余存储。

    如果每个聊天机器人都有一个独立的数据结构,并且需要特殊的索引或查询,我只建议为每个用户使用单独的聊天机器人集合。在这种情况下,分开不同的聊天机器人可能是有意义的。

    但是,拥有太多的集合(在这里我们认为最多 1000 个)也不是很好,因为每个集合即使是空的也会有很小的开销。如果使用较少的集合更频繁地比有许多很少使用的集合时,这种摊销要好得多。

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2013-03-27
      • 2013-07-30
      • 1970-01-01
      • 2021-09-30
      • 2016-06-28
      相关资源
      最近更新 更多