問題描述:
hbase在整合其它元件,作為儲存引擎完成組合服務時,往往是資料先寫入hbase,然後對資料進行檢索,之後資料通過網路傳輸給目標服務。hbase與元件之間的資料一致性使用wal來保證。wal是一種常用的保證資料可靠寫入的一種技術,全稱為write-ahead-log,就是在向客戶端返回寫成功前,先將寫操作在wal中記錄下來。這樣即便系統在資料寫入的過程中出現宕機等情況,也可以通過wal來恢復資料。
wal雖然保證了資料的寫入安全,但是同樣引入了問題即:系統寫入效能,可以看出wal是系統寫入效能的乙個瓶頸。如何解決該問題以提高寫入效能呢?下面是個人的兩個想法,實踐證明可明顯提高寫入效能。
問題分析與解決
我們知道wal是對hbase的每一次資料變更操作進行記錄(只記錄變更行的鍵值),該操作涉及到hdfs的flush操作,hdfs的flush操作會確保資料被寫入對應的datanode中,這個操作需要進行2次網路連線(第一次連線namenode確定要寫入的datanode佇列,第二次連線datanode傳送資料),比較耗時,會嚴重影響hbase的寫入效能。
通過分析hbase的寫入過程,可以發現,hbase本身的wal已經記錄了最近寫入而沒有持久化的資料,只要保證hbase將資料刷入(flush)磁碟時,將hbase與其它元件的wal寫入hdfs,就可以保證hbase與元件之間的一致性。因此,可以考慮非同步提交hbase-元件操作,如下所示:
通過非同步策略是可以提高wal的寫入效率的,但是,當併發較大時,效能明顯下降,這是因為對於同一臺regionserver,所有的wal記錄在flush之前都放在同乙個佇列中,佇列的併發效能對wal的寫效能會有較大影響,因此,參照mapreduce分割槽思路,使用hash值將寫入的wal記錄進行分割槽,hash%n(n為佇列數)相同的記錄被寫入同乙個佇列中,不同佇列之間沒有競爭關係,從而降低了競爭的強度。
總結
通過非同步提交策略和hash分割槽佇列的方式降低了hbase wal對hbase寫入效能的影響。
ElasticSearch寫入效能優化
增大寫吞吐量,越高越好 可以通過效能測試,確定最佳文件數量 多執行緒 需要觀察是否由http429返回,實現retry以及執行緒數量的自動調節 使用更好的硬體 通過觀察cpu io block 執行緒切換 堆疊狀況 使用es自動生成的文件id 可以避免get操作 一些相關的es配置,如refresh...
提高SQL Server效能
如何提高sql server的效能 提供sql server效能總的來說有兩種方式 1 擴容,提高伺服器效能,顯著提高cpu 記憶體,解決磁碟i o瓶頸。2 優化應用程式 引起資料效能問題主要原因 1.不了解系統效能和可擴充套件行 2.一次檢索太多資料 3.錯誤的使用資料庫事務 4.錯誤的使用資料庫...
提高索引效能
利用lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題,lucene 在記憶體中持有一塊緩衝區。但我們如何控制lucene 的緩衝區呢?幸運的是,lucene 的類index...