I have a question regarding performance/best practice:
Scenario: I have a user-collection and a chatbot-collection. They can be a lot of users (lets say 100 -1000 users) in the user-collection. Each user can have multiple chatbots (around 10 per user).
Option A: I create an edge collection to define the connection between user -> chatbot. At the end I would have 1 user-collection, 1 chatbot-collection (containing all chatbots from all users) and 1 edge-collection (containing the definitions from a user to its chatbots)
Option B: I create a separate chatbot-collection for each user, to have all chatbots of a specific user in one place. Chatbot-collection name would be e.g. user_xyz(user._key)_chatbots. So if I need all chatbots of a user with the _key ‚abc‘, I would check the collection user_abc_chatbots. In this case I don’t need an edge collection for the connection user -> chatbot. At the end I would have 1 user-collection and a lot of user_xyz_chatbots-collections (depending on how many users I have - can be 100-1000 as I wrote before).
Now my question: What is the better option? Also regarding performance - Image I have to get all (or a specific) chatbot of a user each time I receive a request.
Would be awesome if you can give me feedback on your experience/thoughts :)
1条答案
按热度按时间zdwk9cvp1#
看看你发布的数字,即100 - 1000用户和大约10聊天机器人每个用户,这将意味着只有1000至10000聊天机器人的总数。
对于这个维度的数据,我认为将所有的聊天机器人存储在一个集合中,并使用一个(索引的)属性来存储每个聊天机器人的用户ID,这是一个1:n的关系(1个用户Map到n个聊天机器人)
这样你就可以轻松快速地找到Map到某个特定用户的所有聊天机器人,但这种设置也可以让你轻松地对所有用户或所有聊天机器人进行分析。
如果每个用户的聊天机器人位于不同的集合中,这将更难实现。
此外,如果相同的聊天机器人可以Map到多个用户,那么使用三个集合实际上可能是有意义的:
这将是一个n:m的关系,其中每个用户仍然可以Map到任何数量的聊天机器人,但如果多个用户Map到同一个聊天机器人,每个聊天机器人的数据不需要冗余地存储。
如果每个聊天机器人都有一个独立的数据结构,并且需要特殊的索引或查询,我只建议为每个用户使用单独的聊天机器人集合。在这种情况下,将不同的聊天机器人分开可能是有意义的。
然而,拥有太多的集合(这里我们认为最多是1,000个)也不是很好,因为每个集合即使是空的也有一个小的开销。如果有更少的集合被更频繁地使用,这比拥有许多很少使用的集合要好得多。