我有一個包含大約 3000 個 bson 對象的切片。每個對象都有一些嵌套映射,一個對象的平均大小為4 kb. 在我的代碼中,我必須能夠uid盡可能快地根據(jù)它們的字段檢索這些對象。我最初的計劃是編寫一個函數(shù)來簡單地循環(huán)遍歷原始切片并檢查匹配,uid例如object["uid"] == uidToFind. 但是現(xiàn)在我相信最好創(chuàng)建一個大映射,其中鍵使用uid字段而值使用相應(yīng)的對象,就像這樣:m := make(map[string]bson.M)
m["sample_UID_0"] = bsonObjects[0]
m["sample_UID_1"] = bsonObjects[1]
//... continue with the remaining 3000 objects...我的問題是,我是否應(yīng)該支持這種解決方案而不是每次都循環(huán)遍歷原始切片?由于我沒有數(shù)百萬個對象,因此我認為將重要內(nèi)容保存在一個全局可用的映射中并簡單地訪問它們m["sample_UID"]而不是總是遍歷整個切片是一個更好的主意。
1 回答

心有法竹
TA貢獻1866條經(jīng)驗 獲得超5個贊
除了性能和內(nèi)存使用之外,這兩種解決方案之間還有一個主要區(qū)別,您的地圖定義方式只能包含一個具有相同 ID 的條目。沒有什么能阻止你的數(shù)組中有多次相同的 id。
通常,如果您的數(shù)組已排序,您可以使用二分法搜索,這與地圖中的搜索不會產(chǎn)生任何明顯的差異,但您必須在添加新條目時保持數(shù)組排序。所以這個解決方案的好處取決于你的陣列是否經(jīng)常被修改。數(shù)組應(yīng)該比映射使用更少的內(nèi)存。
在您的具體示例中,3000 個條目并不多。根據(jù)在數(shù)據(jù)結(jié)構(gòu)中搜索的頻率,您可能不會明顯注意到性能方面的任何差異。您可能想使用基準測試來檢查。
- 1 回答
- 0 關(guān)注
- 88 瀏覽
添加回答
舉報
0/150
提交
取消