我有一個(gè)包含大約 3000 個(gè) bson 對(duì)象的切片。每個(gè)對(duì)象都有一些嵌套映射,一個(gè)對(duì)象的平均大小為4 kb. 在我的代碼中,我必須能夠uid盡可能快地根據(jù)它們的字段檢索這些對(duì)象。我最初的計(jì)劃是編寫一個(gè)函數(shù)來簡(jiǎn)單地循環(huán)遍歷原始切片并檢查匹配,uid例如object["uid"] == uidToFind. 但是現(xiàn)在我相信最好創(chuàng)建一個(gè)大映射,其中鍵使用uid字段而值使用相應(yīng)的對(duì)象,就像這樣: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ù)百萬個(gè)對(duì)象,因此我認(rèn)為將重要內(nèi)容保存在一個(gè)全局可用的映射中并簡(jiǎn)單地訪問它們m["sample_UID"]而不是總是遍歷整個(gè)切片是一個(gè)更好的主意。
1 回答
心有法竹
TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
除了性能和內(nèi)存使用之外,這兩種解決方案之間還有一個(gè)主要區(qū)別,您的地圖定義方式只能包含一個(gè)具有相同 ID 的條目。沒有什么能阻止你的數(shù)組中有多次相同的 id。
通常,如果您的數(shù)組已排序,您可以使用二分法搜索,這與地圖中的搜索不會(huì)產(chǎn)生任何明顯的差異,但您必須在添加新條目時(shí)保持?jǐn)?shù)組排序。所以這個(gè)解決方案的好處取決于你的陣列是否經(jīng)常被修改。數(shù)組應(yīng)該比映射使用更少的內(nèi)存。
在您的具體示例中,3000 個(gè)條目并不多。根據(jù)在數(shù)據(jù)結(jié)構(gòu)中搜索的頻率,您可能不會(huì)明顯注意到性能方面的任何差異。您可能想使用基準(zhǔn)測(cè)試來檢查。
- 1 回答
- 0 關(guān)注
- 99 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
