在200k行MySQL数据库上计算成对比较的最快方法

2024-05-16 03:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MySQL数据库中存储了200k个列表。给定一个列表a,我需要计算a和200k个列表中每个列表X之间的相似度得分。假设相似性度量很简单,比如A和X的集合交集的长度

考虑到成对比较的本质,我想不出一种方法来改进O(N),因此改进运行时意味着使用多个CPU内核。现在我把这个任务分成4个核心使用多线程.Pool(),但仍需要近10分钟才能完成。更糟的是,我的电脑关机保护自己。在

对于以前处理过这个问题的人,你有没有其他方法可以分享?在


Tags: 方法数据库核心列表度量mysqlcpu相似性
2条回答
def bestmatch(A, lists):
     a = set(A)
     return min(lists, key=lambda x:  len(set(x) & a)

使用min执行循环a C速度。lambda是一个快速引用a的闭包。set(A)步骤只计算一次,而不是在内部循环中计算。在

假设你的列表看起来像这样

LISTID LISTITEM
1      1
1      2
1      3
2      2
2      4
2      5

列表A是例如[1,2],可以在SQL中这样做:

^{pr2}$

相关问题 更多 >