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