ObjectId _id <--- index
String UserName
int Points <--- Descending index
使用這個檔案結構作為一個簡單的例子,我們有一個用戶集合,每個用戶都有一個名字和一個“points”值。該集合具有通常的_id索引,但也有一個“降序索引” Points。
問題
示例用例是維護排名記分牌(類似于英雄聯盟/DOTA 排名系統或國際象棋 elo 系統)。每個用戶的Points欄位會不斷變化,但記分牌的查看頻率很高,因此需要準確維護。
我當前未優化的解決方案
我不確定mongo docs中的“升序/降序排序順序是什么意思” ,但顯然這對于??單欄位索引并不重要。所以目前我只是在做一個非常強力的解決方案,每次用戶的Points欄位更新時對集合進行排序。至少它已被索引,因此對于較小的用戶群來說,這應該不會太糟糕。但是,在每次更新/插入時對整個用戶群進行排序通常似乎是錯誤的。
我正在考慮的其他事情
有一些資料結構傳統上用于在插入/更新期間維護順序,例如搜索樹,但在不將整個集合放入記憶體的情況下實作它本身似乎是一個巨大的專案。
我試圖搜索 Mongo 索引的一些內置功能,這些功能會自動為您維護集合中的順序,但我真的找不到類似的東西。
也許一些邏輯只重新排序插入/更新正上方和下方的一些檔案塊?該解決方案似乎非常依賴于Points整個用戶群的預期分布和該系統的用例。
uj5u.com熱心網友回復:
您不需要對另外已經創建的索引進行排序,當您在 mongoDB 中創建索引時,您可以指定它們需要在哪個方向進行排序(升序(1)或降序(-1)),因此當您根據某些搜索多個檔案時field 結果將已根據此欄位索引順序進行排序。當然,您可以明確指定是否需要以相反順序或按其他欄位排序的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407403.html
標籤:
上一篇:為什么說選擇排序有O(n)交換?
