首先,它是我在Mongo的第一次...蒙戈DB的MapReduce在PHP
理念:
- 用戶能夠以自然語言描述的圖像。
- 劃分用戶輸入並將他描述的單詞存儲在名爲 的單詞中。
- 用戶必須能夠查看最常用的單詞並將這些單詞添加到他們的描述中。
- 系統將使用最常用的單詞(對於所有用戶)並使用這些單詞來描述圖像。
我的話文件(目前)如下(實施例)
{
"date": "date it was inserted"
"reported": 0,
"image_id": "image id"
"image_name": "image name"
"user": "user _id"
"word": "awesome"
}
的話將被複制,使得每個字都可以關聯到用戶...
問題 :我需要執行一個Mongo查詢來讓我知道最常用的單詞(描述一個圖像),這些單詞不是由給定的用戶創建的。 (滿足上述第3點)
我見過的MapReduce算法,但是從我讀有幾個問題吧:
- 無法排序結果(我可以從訂單大多數用於較少使用)
- 在數百萬的文檔中,它可能有很大的處理時間。
- 不能限制結果返回的數字
我想過,每天在指定時間運行任務來存儲文檔(在不同的集合)的列表中的字詞的排名一個給定的用戶不習慣描述給定的圖像。我不得不此限制在300個結果,或者什麼(在正常的限度?任何想法)喜歡的東西:
{
user_id: "the user id"
[
{word: test, count: 1000},
{word: test2, count: 980},
{word: etc, count: 300}
]
}
問題我用此溶液看到的是:
- 結果將有相當的延遲是不可取的。
- 服務器負載,同時產生這個文件對所有用戶都可以秒殺(我其實不是很瞭解這一點蒙戈所以這只是一個假設)
也許我的做法沒有任何意義......而也許我在蒙戈方面的經驗不足,正在指向我錯誤的「模式設計」。
對這種問題有什麼可能是一種好方法的想法?
對不起,感謝您的時間和幫助!
若昂
這是一個相當的答案!真的期待着2.2版本。同時我會嘗試您的意見!真的很感謝 – jribeiro
對不起。但是,mapreduce的限制是在一切都計算完畢後應用的,否則它將停止計算10個文檔?另外表現明智什麼是你的推薦考慮到我將在PHP中排序結果(至少在組案例中)。 – jribeiro
在執行MapReduce或在集合上進行排序/查找時應用限制。正如我所說的,你可以隨時重複使用結果。何時更新集合的頻率取決於您。性能明智,你應該沒問題,在PHP端進行排序。如果將來會出現問題,請使用某種緩衝區。 – golja