我有一個相當有趣的任務。但我不知道如何用一個詞來調用它來搜索相關主題。即使這個話題標題也許並不能反映我需要的東西。所以,如果有人有更好的頭銜 - 歡迎。比較錶行,大數據量
我會盡力解釋我的問題。
我在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