我们计划建立一个大型数据库,其对象的结构如下:
PERSON1: 技能:['a','b','c']
PERSON2: 技能:['a','b']
Person3可能: 技能:['d','e','f']
Person4: 技能:['a','b','d']
然后给出技能输入,算法/技术应该能够快速找到最合适的人,给予一些技能。
实施例: 找到有技能的人:a,b - >返回像[Person1,Person2,Person4,Person3]
这样的列表所以我想提出一些关于在哪些技术(数据库/语言)上构建它的建议以及哪个算法应该在具有大约10k寄存器的数据库上表现良好。
答案 0 :(得分: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这样的系统包含更高级的反向索引,可能符合您的需求。
答案 1 :(得分:0)
除了数据库之外,您计划使用您认为是主要的查询(更常用的查询)可能会从索引中获得巨大的好处。
您应该以与查询相同的顺序创建索引。根据您用于示例的模型,我认为您使用的是NoSQL DB。索引在搜索方面提供了更好的性能,但需要更多时间进行记录。
最后我要说10k不是一个大集合,但是如果没有索引,查询嵌套数组可能会慢得多。