考慮:MongoDB的架構設計,合併,合併用戶特定的字段默認域
每一個有搜索順序默認的權重(可能是一個普遍的民望)的對象數據庫。
當每個用戶使用這些對象時,用戶對搜索順序的個人加權被存儲在每個項目中(使用任何算法,例如使用頻率等)。
在SQL這是很容易通過連接對象和USER_OBJECTS表和做沿着
select ... coalesce(user_objects.personal_weighting, objects.default_weighting)
as sort_key order_by sort_key
線換句話說有事做,用戶可以搜索對象的整個數據庫(假設歌曲例如)。如果有一個用戶以前從未與之交互的對象(他們從未聽過的歌曲),則該對象的搜索順序權重基於爲每個對象存儲的默認值。如果用戶與某個對象進行了交互,那麼該對象的搜索順序權重將基於特定用戶的權重,並超過默認值。
有什麼有效的方法來在MongoDB中建模?使用CouchDB中的map/reduce會相當容易和高效,因爲爲map/reduced視圖存儲了索引,但我還沒有弄清楚如何在MongoDB中做到這一點。
任何想法?
既然你不能爲這些查詢創建索引,這將是全表掃描......這是離線處理還是交互式查詢? –
在線數據庫。用戶對標題進行全文搜索。 FTS在對象和user_objects上運行;結果通過object_id加入並按權重排序(默認或特定)。它在SQL或CouchDB中簡單而快速,但是我迷上了MongoDB。大多數其他數據適合文檔DB結構。這個數據庫會不斷增長(每次與一個對象的交互被記錄爲一個單獨的日誌,所以我傾向於遠離CouchDB,因爲我已經讀過它隨着視圖變大而顯着減慢,我可以在Mongo中做到這一點,因爲地圖/減少,但沒有一個索引...緩慢必須有一個優雅的模式設計我失蹤 –