匹配,根据每个标准的相关性进行排名

时间:2010-06-24 09:20:48

标签: database-design ranking matching

我有一个不断增长的数据库,其中包含:

  • 需求表(多个标准)
  • 优惠表(多个标准)

标准可以是字符串(例如:国家/地区名称),布尔值,数字,......

我想找到所有或多或少匹配的需求报价(有点像招聘银行,配对......)

如果表格不包含很多行,我会计算如下:

  • 针对每个需求,通过平均每个标准的相关性来计算每个商品的匹配相关性。

但是对于一个重要的数据库来说,这需要花费太多时间,不是吗?

您推荐什么解决方案?

2 个答案:

答案 0 :(得分:1)

从2010年6月24日起延长答案 - 在联接表(需求键,优惠键,相关性分数)中捕获预先计算的相关性分数。请注意,此连接表可以包含计数(需求)*计数(优惠)记录;仅存储相关性分数大于某个阈值的记录可能是谨慎的。

这种方法在数据插入上的计算复杂度为O(n)。如果假设要求的特征空间(类似于要约)使得同一要约的具有高相关性得分的两个要求也在“关闭”内,则可以将此复杂性降低到O(log(n))。他们的特征空间,持有:

  • 对需求的比较特征(以及单独的商品)执行K-Nearest Neighbors分析,并将K的值限制为大约数据集的log(n)。
  • 计算群集的代表性特征向量之间的匹配相关性,并将其存储在数据库表中。
  • On Insert测量新记录与该类型的每个群集之间的“距离”,并在新记录上将外键存储到群集。
  • 搜索与需求相匹配的优惠时 - 按照需求与其群集之间的链接,将最相关的优惠群集链接到个别优惠。

这将以速度交换特异性。通过将需求样本与每个要约进行比较并对相关性进行排序,验证初始假设的准确性;遍历有序的商品集,并在您找到缺少的商品之前计算您在结果集中找到的数量。对此测试的主观分析将让您了解群集的成本是多少。

答案 1 :(得分:0)

我会按照你描述的方式进行 - 但是使用滚动缓存机制和一些索引。

计算出创作的相关性,然后看看它是如何发展的。如果频率较低(高读,低写),增量增加可能会很好。如果两端都很高,你可以分成两个数据库......在一个数据库上处理更新,然后定期将后处理数据推送到另一个数据库,这是读取的默认来源。