0

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

  • 需求表(多个标准)
  • 报价表(多个标准)

条件可以是字符串(例如:国家名称)、布尔值、数字、...

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

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

  • 对于每个需求,通过平均每个标准的相关性来计算每个报价的匹配相关性。

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

您推荐什么解决方案?

4

2 回答 2

1

从 2010 年 6 月 24 日开始扩展答案——在联接表中捕获预先计算的相关性分数(需求键、报价键、相关性分数)。请注意,此联接表可能包含 Count(Demands) * Count(Offers) 记录;谨慎的做法是仅存储相关性分数大于某个阈值的记录。

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

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

这将以特异性换取速度。通过将 Demands 样本与每个 Offer 进行比较并按 Relevance 排序来验证初始假设的准确性;遍历有序的报价集并计算您在集群搜索的结果集中找到的数量,然后再找到缺失的。对此测试的主观分析将使您了解集群花费了多少。

于 2011-08-08T18:05:36.853 回答
0

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

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

于 2010-06-24T09:27:50.220 回答