[1]. ES架構,如何進行路由以及選主
路由:在Elasticsearch(ES)中,默認的路由算法是基于文檔的_id。具體來說,Elasticsearch會對文檔的_id進行哈希計算,然后對分片數量取模,以確定該文檔應存儲在哪個分片上。這個過程可以確保同一個文檔始終路由到相同的分片上,除非分片數量發生變化。
選主:Elasticsearch使用Zen Discovery模塊進行選主(Leader Election)。這個過程類似于一個Leader Election算法。每個節點都會參與投票,選舉出一個合適的master節點。master節點負責管理集群的狀態,例如分片的分配和元數據的維護。
[2]. 組合索引的使用及需要注意的問題。
組合索引是為了優化多條件查詢而創建的,它會將多個列組合在一起作為索引。
只有當查詢條件中包含了索引中最左邊的列或最左邊的幾個列時,這個索引才能被使用。
為了讓索引更高效,應該將選擇性比較高的列放在前面,這樣才能更快地篩選出數據。
組合索引有一定的維護成本,每次插入、更新或者刪除數據的時候都需要更新索引,創建過多的索引會增加數據庫的負擔。
[3]. 主鍵索引與唯一索引的區別。
主鍵索引要求列值不能為NULL,而唯一索引允許存在NULL值。
一張表只能有一個主鍵索引,但可以有多個唯一索引。
主鍵索引通常是聚集索引,直接影響數據在磁盤上的存儲方式,而唯一索引一般是非聚集的。
主鍵索引主要用于唯一標識表中的每一行數據,而唯一索引主要是用來確保特定列的數據唯一性。
[4]. 數據庫與Redis的緩存一致性問題。
數據庫和Redis的緩存一致性問題,主要是因為緩存和數據庫之間的數據存在時間差,并且有多個并發操作可能會導致數據不一致。
為了解決這個問題,需要考慮兩方面:緩存更新策略和一致性維護策略。
在緩存更新策略方面,最常用的是旁路緩存模式,即先查緩存,緩存沒有再查數據庫,并且把數據寫入緩存,更新數據的時候,先更新數據庫,然后刪除緩存。
這種策略的好處是簡單易用,缺點是首次查詢會慢一些。
在一致性維護策略方面,最基本的是先更新數據庫再刪除緩存,但這種方式在并發時可能導致不一致,所以可以使用延時雙刪策略或者利用消息隊列來實現最終一致性。
[5]. HashMap的擴容機制。
HashMap在初始化的時候會分配一個初始的容量,當HashMap的元素數量達到一個閾值(容量乘以負載因子)的時候,就會觸發擴容。
擴容的時候,HashMap會創建一個新的數組,容量是原數組的2倍,然后把原數組中的元素重新計算hash值,并根據新的數組容量重新分配到新的數組中。因此,這是一個比較耗時的操作,會導致HashMap的性能下降,所以,如果在預知存儲的數據量比較大的情況下,最好在初始化的時候設置一個合理的容量,避免頻繁的擴容。