聊起 BigTable,讓你不再膽怯

来源:https://www.cnblogs.com/socoool/archive/2020/04/04/12629751.html
-Advertisement-
Play Games

谷歌“三駕馬車”的出現,才真正把我們帶入了大數據時代,並指明瞭大數據的發展方向。 GFS 作為其中一駕寶車,解決了大數據存儲的難題。它能夠把大量廉價的普通機器,聚在一起,充分讓每台廉價的機器發揮光和熱。其中在《從谷歌 GFS 架構設計聊開去》中我們針對 GFS 進行了管中窺豹,體會到其中一斑,不得不 ...


谷歌“三駕馬車”的出現,才真正把我們帶入了大數據時代,並指明瞭大數據的發展方向。

GFS 作為其中一駕寶車,解決了大數據存儲的難題。它能夠把大量廉價的普通機器,聚在一起,充分讓每台廉價的機器發揮光和熱。其中在《從谷歌 GFS 架構設計聊開去》中我們針對 GFS 進行了管中窺豹,體會到其中一斑,不得不說是人多力量大,團結就是力量的體現。

MapReduce 作為其中一座寶駕出現,主要解決海量數據計算的頭痛難題。在《悟懂MapReduce,不糾結!》中我們引入一個接地氣的“農村掰玉米”的案例進行了 MapReduce 思想的體會,大體意思是說, Map 就像人手掰一壠玉米(有個別生玉米+多數熟玉米),負責掰就行;Reduce 就像有專門收生玉米的;有專門收熟玉米的,然後各自進行彙總統計。

簡單去講,GFS 解決了分散式文件的存儲,MapReduce 解決了海量數據的計算。

但是天生好奇,心生疑問“實時線上應用的海量結構化數據該如何存儲呢?”那麼不得不提及谷歌的第三駕馬車“BigTable”。

背景?

眾所周知,Google 要存儲海量的網頁,而且要能夠存儲一個 URL 的不同時期的多個版本的網頁內容(因為網頁會不斷的更新,所以爬蟲也要不斷的針對同一個 URL 進行爬取)。

上圖是摘自 BigTable 的論文,老圖配新曲,在此處主要用來闡述 BigTable 產生的其中一個背景,從中我們能夠得出如下公式。

com.cnn.www + contents: + t3 => html網頁內容

com.cnn.www + contents: + t5 => html網頁內容

com.cnn.www + contents: + t6 => html網頁內容

那麼 Google 就需要設計一款類似以“URL +  contents + time stamp”為 key,以“html 網頁內容”為值的存儲系統,於是就有了 BigTable 這個鍵值系統的存在。

是啥?

Bigtable is a distributed storage system for managing structured data that is designed to scale to a very large size: petabytes of data across thousands of commodity servers.

官方定義。Bigtable 是一個分散式的結構化數據存儲系統,它被設計用來處理海量數據:通常是分佈在數千台普通伺服器上的 PB 級的數據。

說清楚 BigTable 存儲啥樣子?一段話(一簞食)

A Bigtable is a sparse, distributed, persistentmulti-dimensionalsorted map.The map is indexed by a row key, column key, and a timestamp;each value in the map is an uninterpreted array of bytes.
  • BigTable 是一個稀疏的、分散式的、持久化存儲的多維度排序的 Map.(寫過兩天代碼的都不陌生,Map 由 key 和 value 組成);

  • Map 的 key 是行關鍵字、列關鍵字以及時間戳組成;

  • Map 的 value 都是一個未經解析的 byte 數組。

看透徹 BigTable 存儲啥樣子?一張圖(一瓢飲)

  • 可以看出 BigTable 用三維(row 行關鍵字、column 列關鍵字、time 時間戳)方式定位數據,也就是以“行關鍵字列關鍵字時間戳”為 key 來定位數據;

  • 我們也可以認為 BigTable 是屬於 key-Value 的 NOSQL 資料庫系列(為你在技術選型時再加一備選)。

一段話(一簞食)+ 一張圖(一瓢飲) = BigTable(足矣)。

好了,到這應該對 BigTable 懵懵懂,如果感覺蒙圈、迷茫了,建議動動手指分享轉發一下(言外之意:如果沒看懂,就忽略此篇分享,莫要影響心情,因為愉悅的心情真的很重要!!!);如果感覺稍微有點意思或者豁然開朗,那就繼續往下追。

設計?

默默跟隨“一猿小講”腳步的應該都清楚,GFS 也好、MapReduce 也罷,參與者角色都採取了簡單就是美的大道至簡的思想設計,都秉承了“一人掌權,其他人辦事”的理念,那我們不妨看看 BigTable 背後是不是也是這樣的設計呢?

BigTable 主要參與者:鏈接到客戶程式中的庫、一個 Master 伺服器多個 Tablet 伺服器這不就是咱們之前說 GFS 的皇上~宰相模式)。

Master伺服器 (皇上)主要負責以下工作:

  • 為 Tablet 伺服器分配 Tablets;

  • 檢測新加入的或者過期失效的 Tablet 伺服器;

  • 對 Tablet 伺服器進行負載均衡;

  • 對保存在 GFS 上的文件進行垃圾收集;

  • 對模式的相關修改操作,例如建立表和列族。

Tablet伺服器 (宰相)主要負責以下工作:

  • 管理一個 Tablet 的集合(通常每個伺服器有大約數十個至上千個 Tablet);

  • 負責處理它所載入的 Tablet 的讀寫操作;

  • 負責在 Tablets 過大時,對其進行分割。

運轉?

寫操作。

  • Tablet 伺服器首先檢查這個操作格式是否正確、操作發起者是否有執行這個操作的許可權;

  • 如果校驗通過,將寫請求提交到日誌 tablet log;

  • 然後將數據寫入記憶體中的 memtable;

  • 當 memtable 存到一定規模會被凍結,Bigtable 隨之創建一個新的 memtable,並將凍結的 memtable 寫入分散式文件系統 GFS。

讀操作。

  • Tablet 伺服器首先進行完整性和許可權檢查;

  • 然後將一系列 SSTable 和 memtable 的存儲內容組成一個

    大的視圖,然後從中進行讀取。

設計要點:讀也好,寫也罷,客戶程式其實直接和 Tablet 伺服器通信進行讀寫操作,所以 Master 伺服器的負載是很輕的。

技術棧?

BigTable 使用 Google 的分散式文件系統 GFS作為底層數據存儲。

BigTable 內部存儲數據的文件是 Google SSTable 格式的;(SSTable 是一個持久化的、排序的、不可更改的 Map 結構,點一首楊坤的“無所謂”送給你,該糾結時糾結,不該糾結時莫糾結,重要的是心情愉悅)。

BigTable 使用 Chubby 提供協同服務管理(若懵圈了,就想想 ZooKeeper)。

思考?

畫龍畫虎難畫骨!目前的一切還是浮於表象,有沒有更進一步的認識呢?那就讓時間來告訴我們吧!

好了,這篇分享都到這兒吧,希望你們能夠喜歡,如果感覺有點幫助,那就動動手指轉發分享一下吧。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Xamarin.Forms客戶端第一版 作為TerminalMACS的一個子進程模塊,目前完成第一版:讀取展示手機基本信息、聯繫人信息、應用程式本地化。 1. 功能簡介 2. 詳細功能說明 3. 關於TerminalMACS 1. 功能簡介 1.1. 讀取手機基本信息 主要使用Xamarin.Ess ...
  • 通過VPN訪問Google時,Google仍舊無法打開,但是能訪問部分網站。這是什麼情況? 顯然能夠訪問部分網站,說明網路是正常的,經過不停的測試,我發現只要是支持HTTPS協議的網站都無法訪問,腦袋靈機一動,是不是跟HTTPS的埠443有關,檢查之後,發現果真VPN服務端的443埠沒有在防火牆 ...
  • Shell腳本殺掉除自己外的舊進程 在寫後臺Shell腳本的時候,這是比較常見的一個需求。比如之前運行了一個叫做a.sh的腳本在後臺運行,後來更新了a.sh腳本想重新運行,但卻不想手動殺掉已經存在的後臺a.sh進程。 命令其實非常簡單: 其中 是篩選出除腳本自己之外的舊進程的PID。 這裡的 做了些 ...
  • Oracle的存儲結構分為:物理存儲結構和邏輯存儲結構。 一、物理存儲結構:指硬碟上存在的文件 數據文件(data file) 一個資料庫可以由多個數據文件組成的,數據文件是真正存放資料庫數據的。一個數據文件就是一個操作系統文件。資料庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個 ...
  • 在做開發過程中經常會接觸資料庫索引,不只是DBA才需要知道索引知識,瞭解索引可以讓我們寫出更高質量代碼。簡單介紹索引的概述,聚集索引,非聚集索引,唯一索引,複合索引,篩選索引使用及註意事項 ...
  • 一、 資料庫的分類 1、SQL Server 資料庫 2、Oracle 資料庫 3、mysql 資料庫 4、DB2 5、informix 以上是比較流行的資料庫,這裡沒有一一介紹,而是展示出來以便瞭解。 二、MySQL資料庫的安裝和配置 1、如果你已經安裝了mysql ,先要卸載,再安裝。 2、先停 ...
  • 一、什麼是Presto? 背景知識:Hive的缺點和Presto的背景 Hive使用MapReduce作為底層計算框架,是專為批處理設計的。但隨著數據越來越多,使用Hive進行一個簡單的數據查詢可能要花費幾分到幾小時,顯然不能滿足互動式查詢的需求。Presto是一個分散式SQL查詢引擎,它被設計為用 ...
  • 今天一位跨界老碼農不知咋回事,興奮過了頭,一不小心把資料庫給刪掉啦,然後問我咋恢復,然後我告訴他基於 binlog 可以恢復,誰成想沒有開啟 binlog,最後只能躲在角落裡傷心。 愛情 36 技系列,好久沒更新啦,真是苦了追逐愛情系列的那些朋友們。 好了,請忘記上面的一切,因為我們的愛情故事系列又 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...