0

我正在尝试确定一种数据库设计,该设计将允许SELECT根据交叉属性快速启用用户。我有两种属性:

  1. 满 - 每个人都有这些。例如位置/性别/年龄等。
  2. 苗条 - 例如标签/兴趣。大多数用户在 5 万个可能的选项中都有大约 7 个选项。这些不是均匀分布的,例如很多用户有兴趣Music,但只有少数用户有兴趣Funk Rock

数据集是 10 的数百万人,所以我试图避免加入。

保存数据:

对于每个完整属性,我可以SELECT相应地为每个用户保留一列。对于我正在考虑创建另一个表的苗条属性,在这种情况下,每个用户都有不止一行,每行代表一个属性。

选择苗条的属性是我面临问题的地方。假设我没有加入 SELECT 中的表以避免性能低下,我正在考虑将 SELECT 分为两个不同的用例:

  1. 搜索一个流行的 slim-attribute,比如说兴趣Music,它会首先从 slim 属性表中找到匹配它的 C*SearchAmount 用户,然后根据完整的属性表对其进行过滤,如果过滤太多,则使用更大的 C 再次执行此操作。
  2. 寻找一种罕见的苗条属性,反其道而行之。

在实现这个之前,我想听听其他/更好的方法来解决这个问题。

4

0 回答 0