比较/差异多个(>百万)阵列

时间:2011-01-17 02:51:51

标签: php mysql

我不确定这是否可行;但我在MySQL数据库中有数以百万计的“列表”,并希望开发一个系统,我可以从中获取其中一个列表;并将其与数据库中的所有其他列表进行比较并返回:

1。)与主要列表非常相似的列表(某种%会很好)
2.)给出列表中的某些项目;它将返回包含在所有其他列表中的大多数列表中的项目列表(即,根据常用选项自动完成列表)。

我会初步认为如果我可以创建某种'松散哈希',我可以用数学方式比较列表,但我无法找到可扩展的解决方案(因为这是正面处理指数时。)

非常感谢任何新的想法/解决方案。谢谢!

3 个答案:

答案 0 :(得分:0)

你的基本MD5是一个(有点)松散的哈希,由php和mysql支持,并且在这些事情上相当快。只需获取有关数据的MD5并将其与其他数据进行比较。

在PHP中执行,将数据的MD5存储在数组键中如果是isset()则使用

答案 1 :(得分:0)

你的部分 2)给定列表中的某些项目;它将返回包含在所有其他列表中的大部分内容的项目列表(即,根据常用选项自动填充列表)。

不是很清楚,但我将其解释为:给定少量项目,找到包含所有或大部分项目的所有列表

在列表元素上创建索引后,这应该很简单,基本上就像哈希表一样。确切的查询将取决于您的要求,列表的长度(这是否是定义规范的因素等)。

答案 2 :(得分:0)

如果你说有数百万个列表,那么将它们全部加载到php脚本中并不是一个选项。 您可以获取要与其他列表进行比较的列表的值,然后运行类似于此的SQL查询:

SELECT list_id, COUNT(value) as c FROM lists WHERE value IN (a,b,c) GROUP BY list_id 
ORDER BY c DESC

我不确定sql是否正确,但我们的想法是选择其中包含相同成员的列表的ID,然后按照与原始列表相交的列表项的数量对输出进行排序。在这种情况下,很容易获得项目对应的百分比。