1 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
將二級(jí)索引數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫本身是否正確
您應(yīng)該將電子郵件作為鍵,將 UUID 作為值。另一種選擇是使用電子郵件作為數(shù)據(jù)庫的密鑰,而不是使用 UUID。這樣您就不需要使用二級(jí)索引。
另一種提高性能的策略,你可以使用內(nèi)存數(shù)據(jù)庫,如 Redis(或者 LevelDB 本身可以用來將數(shù)據(jù)存儲(chǔ)在內(nèi)存中)來存儲(chǔ)二級(jí)索引(電子郵件作為鍵,UUID 作為值)。
除了 B-Tree、HashMaps 之外,還有什么好的開箱即用的索引算法嗎?
反正B-Tree和HashMap是數(shù)據(jù)結(jié)構(gòu),不是算法。而您實(shí)際上所做的并不是使用 HashMap 進(jìn)行索引,它只是將 HashMap 存儲(chǔ)為您的鍵的值。索引通常取決于 DBMS 實(shí)現(xiàn)(我們只能從它們提供的選項(xiàng)中進(jìn)行選擇)。
所以,關(guān)于用于索引的數(shù)據(jù)結(jié)構(gòu),它是否好,真的取決于用例。例如,如果您需要進(jìn)行范圍搜索,您可以使用 B-Tree(大多數(shù) DBMS 默認(rèn)使用)、B+ 樹(MySQL InnoDB 默認(rèn)使用)和 Skip List(Redis 使用此數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序放)。
對(duì)于您的情況,您只需要將電子郵件存儲(chǔ)為鍵,將 UUID 存儲(chǔ)為值。哈希表通常用于此。大多數(shù) DBMS 使用這種數(shù)據(jù)結(jié)構(gòu)來進(jìn)行主鍵訪問,時(shí)間復(fù)雜度僅為 O(1)。而且我相信 LevelDB 的實(shí)現(xiàn)也是基于這種數(shù)據(jù)結(jié)構(gòu)的。
- 1 回答
- 0 關(guān)注
- 153 瀏覽
添加回答
舉報(bào)