gpt4 book ai didi

django - 为每个用户检索最相关输出的最佳解决方案(在 Django 或任何后端中)?

转载 作者:可可西里 更新时间:2023-11-01 11:27:44 30 4
gpt4 key购买 nike

我正在寻找最佳解决方案来为每个用户检索最相关的输出。

我将模型简化为 UserProfile 和 Groups,如下所示

-Model Name: UserProfile
styles: ['a', 'b', 'f', 'r'] <- ('styles' are field name)

-Group 1
styles: ['a', 'f']

-Group 2
['g', 'a', 'h']

...

-Group 1,000,000
styles: ['s', 'w', 'x']
(Let's say we have millions of Groups)

我想根据用户的样式对组进行排序和检索。所以在这种情况下,“第 1 组”由于样式“a”、“f”、“第 2 组”由于样式“a”而得 1 分。

我们无法将分数存储在我们的主数据库中,因为每个用户都有不同的风格。

  • 我的方法 1:每次用户请求时对所有数据库进行排名(我概念性地编写了代码)

View .py

for group in Group.objects.all():
# store the score to the new field of the group
group.style_count = group.styles.join_count(user.styles)
list_view_output = Group.objects.order_by(style_count)
  • 方法 2:将排名存储在数据库中执行查询并将输出(当然还有等级和用户 ID)存储在 Redis 内存缓存数据库中。并在特定用户想要时检索结果

想到的问题:

  1. 查询似乎很昂贵。 O(n) 用于迭代 * O( min( user.style.count(), group.style.count() ) ) 用于加入。我怎样才能做得更好?也许我可以在模型中做点什么?
  2. 不幸的是,如果我们有 100 万个组和 1000 个用户,我需要在缓存内存 (Redis) 中存储 10 亿行。而且我绝对买不起(我想我最多可以有 8GB,或者更多)
  3. 也许我不需要在缓存中存储每个用户的排名数据,因为有些用户具有相同的风格。您知道这方面的任何 AI 方法吗?

您还可以提供任何建议来更好地构建它吗?

谢谢...!!!!!

最佳答案

底线是,对于数百万规模的问题,保存所有内容并对其进行排序可能不是一个好主意。

使用当前的数据结构, - 时间复杂度:O(n);几乎不可能减少 - 空间复杂度:我们可以改进很多。例如只需要前 10 个,成本可以是 O(1)。我们只能以排序的方式保存前 10 名。在线性扫描中,我们只将新组的分数与最小的分数进行比较,如果新分数较大,则将其替换

但一个可能的问题是,如果你有太多相同分数的组,那么这可能是一个问题。你需要小心处理它。

如果您以“排序”方式组织样式和组,可能会更快。例如,按字母顺序,第 2 组将是 ['a', 'g', 'h']。我们跟踪第一个或几个字母的索引。例如,以'a'开头的组将是第一批;然后以“b”开头的组,依此类推。在您的情况下,您可以通过以下方式进行搜索: 1.首先以'a'开头的组; 2.然后搜索以'b'开头的组; 3. 然后是'f'; 4. 然后是'r'。所以那些在 [a, b, f, r] 中没有任何样式的组不会被触及。这样,它可以为您节省很多时间。

关于django - 为每个用户检索最相关输出的最佳解决方案(在 Django 或任何后端中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44312956/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com