我有一个相当有趣的任务。但我不知道如何用一个词来调用它来搜索相关主题。即使这个话题标题也许并不能反映我需要的东西。所以,如果有人有更好的头衔 - 欢迎。比较表行,大数据量
我会尽力解释我的问题。
我在MySQL数据库表中有大约100,000行。我需要从表格中“比较”条目。
“比较” 并不仅仅意味着等于。有一个计算比较级别的算法。我有每个表列的权重系数。意思是说,如果条目1的列1等于条目2的列2,那么我给5对这个对。等等每列。
要做到这一点的最直接的方法 - 为每对条目应用计算规则。我为什么害怕这个? 100,000个条目意味着大约50亿个“比较”操作。当然,我可以根据需要计算这个,并将结果存储在缓存中的某处。但我相信最明显的方式并不是最有效的。
所以,我的第一个问题是:有没有其他更好的办法才达到除了蛮力我的目标是什么?
我的第二个问题是关于工具,它更适合计算。
- 应用语言是PHP。因此,我需要加载到整个内存表 并迭代数据。
- 在MySQL中创建存储过程。
- 使用MongoDB的聚合框架或MapReduce。
最少所有的我喜欢的第一种方式。最重要的 - 最后一个。
我正在寻找从谁在这种类型的案件经验的人任何建议或忠告。
因为,我不知道该怎么问谷歌的帮助,任何链接将不胜感激。
UPDATE:
计算规则是有点复杂然后我描述...
表具有一组相关的列,其在作为组(由一个一次而不是一个要使用的)。 假设:
table
具有领域,比方说,tag_1
,tag_2
,..,tag_n
。 row_1
和row_2
- table
中的条目。
规则(伪代码):
if(row_1.tag_1==row_2.tag_1)
{
// gives 10 points
}
elseif(row_1.tag_1 is in row_2.tags && row_1.tag_1!=row_2.tag_1)
{
// gives 5 points
}
....
// and so on
基本上,我需要检查找到两个阵列的交叉点。如果不是空的 - 给出分数。如果两行中的标签的索引匹配,则给出附加点。
我想知道,如何使用存储过程语言来完成这项工作?因为使用任何编程语言都可以轻松完成。
如果存储过程可以做到这一点,那么这是我的选择。
谢谢你的回答。我也倾向于这一点,但我没有告诉你所有的真相:)看到我更新的职位。 – 2013-02-12 14:18:28
@RuslanPolutsygan。 。 。您仍然可以使用'case'语句实现这些规则:'当(t2.tag1,。。t2.tagn)中的t1.tag1和。 。 .'。 – 2013-02-12 14:26:44
感谢您的帮助。 – 2013-02-12 16:54:11