【问题标题】:Best technology or algorithm to find best matches on a large database在大型数据库中找到最佳匹配的最佳技术或算法
【发布时间】:2018-08-24 23:58:59
【问题描述】:

我们计划建立一个大型数据库,其中的对象结构如下:

Person1: 技能:['a','b','c']

第二个人: 技能:['a','b']

第三人: 技能:['d','e','f']

Person4: 技能:['a','b','d']

然后给定技能的输入,算法/技术应该能够在给定一些技能的情况下快速找到最适合的人。

示例: 查找具有技能的人:a, b -> 返回排序如下的列表 [Person1,Person2,Person4,Person3]

所以我想就什么技术(数据库/语言)在上面构建它以及哪种算法应该在具有大约 10k 个寄存器的数据库上表现良好提出一些建议。

【问题讨论】:

  • 任何关系数据库都应该能够做到这一点。你有什么想法吗?
  • 不,现在我们只有数据集。我们想选择最好的数据库来解决这种搜索
  • 您能否介绍一下 sql db 上的查询是什么样的?

标签: database algorithm search find


【解决方案1】:

您想为这个问题使用inverted index。基本思想是从

反转您的表示
1 -> a, b, c
2 -> a, b
3 -> d, e, f
4 -> a, b, d

a -> 1, 2, 4
b -> 1, 2, 4
c -> 1
d -> 3, 4
e -> 3
f -> 3

现在,对于每项技能,您都有一个具备该技能的人员列表(可能按技能级别排序)。为了得到技能 a、b 的结果,你扫描 a 和 b 的列表,并增加你找到的每个人的计数器,这给你 1、2、4 个人,每个人的计数为 3。

这与用于文本搜索的索引结构基本相同(这里有包含术语的文档)。像elastic search 这样的系统包括更高级的倒排索引,可能会满足您的需求。

【讨论】:

    【解决方案2】:

    独立于您计划使用的数据库,您认为主要的查询(更经常使用的查询)可能会从索引中获得巨大的好处。

    您应该按照查询的相同顺序创建索引。根据您用于示例的模型,我认为您使用的是 NoSQL DB。索引提供更好的搜索性能,但需要更多时间来记录。

    最后不得不说10k不算大集合,但是如果没有索引查询嵌套数组可能会慢很多。

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 2011-09-11
      • 2023-04-01
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多