Google Analytics為什麼會這麼快
Google Analytics儲存了全球範圍內網站的大量靜態資料,隨著資料體積越來越大,檢索的難度也必然隨之增加。近日,Gen Furukaw在Dzone上撰文表示,Google Analytics的高效一定程度上歸功於其兼職儲存BigTable
在Google,隨時都可能存在大量應用程式被新增到其基礎設施,而這些應用程式中,任意一個都可能給系統帶來繁重的工作負載。迎合這樣的資源需求並不簡單,而在有限時間內做到這一點就更是難上加難了。
如果Google部署的是一個單節點上的傳統資料庫,那麼一旦達到容量限制,他們必須為其更新硬體。鑑於Google應用程式的數量和儲存資料的體積,這種硬體升級可能每天都會進行一次。雖然負載也可以分配到多個節點,但隨著節點數的增加,系統維護的難度將變得不可思議。
綜上所述,鑑於大規模系統升級和維護的難度,標準關係型資料庫對Google來說並不可選。
尋找一個可擴充套件解決方案
為了保證速度,及避免頻繁的更新硬體,Google定製了自己的儲存解決方案——BigTable。取代關係型資料庫將資料存放到表格中,BigTable使用了多維排序對映的方式對資料進行儲存,也就是現在我們所說的鍵值儲存型別。這種方式不僅提升了效能,也簡化了擴充套件過程。
關係型資料庫中的資訊儲存
關係型資料庫將資訊的每個部分都存放到獨立的位置,通常是表中的一列。同時,在關係型資料庫中,資料的規範化非常重要,這個過程保證了其他表格或者列中不會存在冗餘資料。
舉個例子,客戶的“姓”必須存放在某個表格的對應列中。如果某個客戶的姓在其他位置發現,那麼它將被刪除,資訊的檢索仍然會被指定到原始表格。
這種結構的缺點是資料庫內部可能變得非常複雜,從而導致即使一個簡單的查詢都可能涉及到大量的執行路徑,而所有這些路徑都會在執行時進行計算以尋找最優路徑。資料庫越複雜,執行時就需要越多的資源來確定查詢路徑。
鍵值儲存中的資訊儲存
在鍵值儲存中,資料被允許存在多個備份。取代使用其他昂貴硬體資源來增加速度,這裡的設計理念是利用磁碟空間,它更新起來非常容易,成本也不高。
對於簡單查詢來說,多備份非常有利,在鍵值儲存中,相關的資料可以被儲存到一起,從而避免在查詢過程中訪問多個路徑以獲得所需資料。
取代關係型資料中的表格儲存型別,鍵值儲存使用域,同時也無需預定義資料結構模式。域中儲存的資料通過鍵定義,它們可以通過大量不同的屬性訪問。
這些屬性可能是字串,也可以是流行程式語言中匹配的任意資料型別,它可能會是陣列、物件、整形、浮點型、布林型以及程式語言中使用的任意基本資料型別。
在鍵值儲存中,取代資料本身,資料完整性和邏輯通過應用程式程式碼維護,通過使用1個或多個API,開發者可以編寫出最優的實現方法。這樣一來,資料檢索工作被轉移到編寫正確的邏輯上,而不是依賴資料庫去優化在大量可能路徑中選擇一個最佳路徑。
寫在最後
當然,除了鍵值儲存的使用之外,Google Analytics快還源於其優秀的程式設計邏輯,這點就不再一一詳述了。
相關文章
- Nginx 為什麼這麼快?Nginx
- Redis為什麼這麼快?Redis
- 快速排序為什麼這麼快?排序
- 剖析Disruptor:為什麼會這麼快?(二)神奇的快取行填充快取
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- Redis 為什麼這麼快?這才是最完美的回答Redis
- Python能幹什麼?為什麼會這麼火?Python
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- 硬核!15張圖解Redis為什麼這麼快圖解Redis
- [譯][A crash course in WebAssembly] 為什麼WebAssembly這麼快Web
- 碾壓Python!為什麼Julia速度這麼快?Python
- 為什麼Redis這麼快?5分鐘成為Redis高手Redis
- 沒想到吧!Google 排名第一的程式語言,為什麼會這麼火?Go
- 為什麼會有這麼多程式語言
- Python為什麼會這麼火呢?原因是什麼?Python
- 比Redis快5倍的中介軟體,究竟為什麼這麼快?Redis
- redis是單執行緒的,為什麼這麼快Redis執行緒
- Redis為什麼那麼快?Redis
- 為什麼會有這麼多的程式語言?
- 為什麼女程式設計師會這麼少?程式設計師
- Kafka 為什麼快Kafka
- redis為什麼快Redis
- Kafka為什麼效能這麼快?4大核心原因詳解Kafka
- 告訴你MySQL主鍵查詢為什麼這麼快MySql
- Netty是什麼,Netty為什麼速度這麼快,執行緒模型分析Netty執行緒模型
- Kafka為什麼速度那麼快?Kafka
- 為什麼“敏捷”會浪費這麼多時間? - Reddit敏捷
- 為什麼這麼多人學不會C語言呢?C語言
- 為什麼會有這麼多種的資料庫資料庫
- 這就是為什麼你學不會DDD
- 為什麼前端這麼多人前端
- Redis是單執行緒的,但Redis為什麼這麼快?Redis執行緒
- MYSQL索引為什麼這麼快?瞭解索引的神奇之處MySql索引
- 為什麼Google沒有客服?Go
- Googler為什麼很幸福?Go
- MySQL:為什麼lsof會看到這麼多臨時檔案MySql
- 破玩意 | Redis 為什麼那麼快Redis
- 黑帽SEO:Google為什麼會遮蔽你的網站Go網站