Google Analytics為什么會這么快

jopen 10年前發布 | 7K 次閱讀 Google

對于Google基礎設施來說,任何時刻都可能有大量應用程序進駐。同時,隨著數據量的增加,檢索的難度也是愈來愈高。著眼Google Analytics,他們又是如何增加速度并減少運維難度的呢? Google Analytics存儲了全球范圍內網站的大量靜態數據,隨著數據體積越來越大,檢索的難度也必然隨之增加。近日,Gen Furukaw在Dzone上撰文表示,Google Analytics的高效一定程度上歸功于其兼職存儲BigTable。

以下為譯文

在Google,隨時都可能存在大量應用程序被添加到其基礎設施,而這些應用程序中,任意一個都可能給系統帶來繁重的工作負載。迎合這樣的資源需求并不簡單,而在有限時間內做到這一點就更是難上加難了。

如果Google部署的是一個單節點上的傳統數據庫,那么一旦達到容量限制,他們必須為其更新硬件。鑒于Google應用程序的數量和存儲數據的體積,這種硬件升級可能每天都會進行一次。雖然負載也可以分配到多個節點,但隨著節點數的增加,系統維護的難度將變得不可思議。

綜上所述,鑒于大規模系統升級和維護的難度,標準關系型數據庫對Google來說并不可選。

尋找一個可擴展解決方案

為了保證速度,及避免頻繁的更新硬件,Google定制了自己的存儲解決方案——BigTable。取代關系型數據庫將數據存放到表格 中,BigTable使用了多維排序映射的方式對數據進行存儲,也就是現在我們所說的鍵值存儲類型。這種方式不僅提升了性能,也簡化了擴展過程。

關系型數據庫中的信息存儲

關系型數據庫將信息的每個部分都存放到獨立的位置,通常是表中的一列。同時,在關系型數據庫中,數據的規范化非常重要,這個過程保證了其他表格或者列中不會存在冗余數據。

舉個例子,客戶的“姓”必須存放在某個表格的對應列中。如果某個客戶的姓在其他位置發現,那么它將被刪除,信息的檢索仍然會被指定到原始表格。

這種結構的缺點是數據庫內部可能變得非常復雜,從而導致即使一個簡單的查詢都可能涉及到大量的執行路徑,而所有這些路徑都會在運行時進行計算以尋找最優路徑。數據庫越復雜,運行時就需要越多的資源來確定查詢路徑。

鍵值存儲中的信息存儲

Google Analytics為什么會這么快

在鍵值存儲中,數據被允許存在多個備份。取代使用其他昂貴硬件資源來增加速度,這里的設計理念是利用磁盤空間,它更新起來非常容易,成本也不高。

對于簡單查詢來說,多備份非常有利,在鍵值存儲中,相關的數據可以被存儲到一起,從而避免在查詢過程中訪問多個路徑以獲得所需數據。

取代關系型數據中的表格存儲類型,鍵值存儲使用域,同時也無需預定義數據結構模式。域中存儲的數據通過鍵定義,它們可以通過大量不同的屬性訪問。

這些屬性可能是字符串,也可以是流行編程語言中匹配的任意數據類型,它可能會是數組、對象、整形、浮點型、布爾型以及編程語言中使用的任意基本數據類型。

在鍵值存儲中,取代數據本身,數據完整性和邏輯通過應用程序代碼維護,通過使用1個或多個API,開發者可以編寫出最優的實現方法。這樣一來,數據檢索工作被轉移到編寫正確的邏輯上,而不是依賴數據庫去優化在大量可能路徑中選擇一個最佳路徑。

寫在最后

當然,除了鍵值存儲的使用之外,Google Analytics快還源于其優秀的編程邏輯,這點就不再一一詳述了。

原文鏈接: How Is Google Analytics So Damn Fast?(編譯/仲浩 審校/魏偉)
來自:http://www.csdn.net/article/2014-10-31/2822403-how-google-analytics-so-damn-fast

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!