HBase與傳統數據庫

HBase SQL MySQL CPU IT星源 2017-06-21

RDBMS特點與問題

RDBMS即關係數據庫管理系統(Relational Database Management System),是將數據組織為相關的行和列的系統。RDBMS 是SQL 的基礎,同樣也是所有現代數據庫系統的基礎,比如MS SQL Server,Oracle,MySQL。RDBMS 中的數據存儲在被稱為表(tables)的數據庫對象中。表是相關的數據項的集合,它由列和行組成。

  • RDBMS存儲關係數據,只適用於有限數量(較少)的記錄。

  • 使用外鍵,使用索引,支持join操作

  • 當多個客戶端同時更新數據集時,能保證一致性

  • 支持事物,確保可以原子的更新表,保證強一致性(ACID)

當有上萬用戶時:DB的CPU和I/O開始出現問題。可以使用主從架構。主庫負責所有寫入, 從庫複製主庫,並提供所有讀操作(需要一個負載均衡器)

用戶量擴大到數十萬時,讀請求仍然出現瓶頸。需要增加添加緩存層,例如 Memcached或Redis。將失去一致性保證。如果緩存失效,問題會很嚴重

用戶量繼續增大,寫操作也會瓶頸,主數據庫負載會很大。可以垂直可擴展性:增強您的主服務器,可能還需要更換數據庫。SQL JOIN也會成為瓶頸。需要停止使用存儲過程, 因為它們會消耗大量cpu。使用物化視圖,加快讀速度。

用戶量再增大,就需要拆分了(Sharding)。將數據將水平擴展到多個數據庫,重新分片實現負載均衡。 重新分片對I/O資源造成巨大的損失,這會是一場惡夢。

面向列的數據庫

數據佈局,按列分組數據。列值連續存儲在磁盤上。這點傳統的RDBMS截然不同,傳統數據庫是按行存儲數據。列式數據庫減少系統I/O,更適合壓縮,因為,列值通常非常相似,差別很小。

HBase與傳統數據庫

從傳統數據庫到HBase的遷移

以mysql為例,mysql中數據表如下:

HBase與傳統數據庫

  • shorturl : 短鏈接url

  • click : 記錄點擊操作,每天做一次統計

  • user : 用戶信息

  • URL : 與shorturl表相關,記錄網頁信息,內容等。

  • user 表在username字段建索引,便於用戶名的查找

  • shorturl和user表通過userId這個外鍵做關聯;url和shorturl表通過urlId外鍵;click和shorturl表通過shorturl的id

HBase的表結構

HBase與傳統數據庫

  • shorturl:記錄短鏈接url,並做統計。通過列族設置時間斷和過期時間

  • url:記錄網頁信息,內容等

  • users-shorturl:相當於索引表。用於查找給定用戶的shortId

  • user : 用戶信息

比較兩種方案,click表被shorturl表替代,按日期存儲統計數據。使用user-shorturl表替換外鍵關係,使用戶相關查找更快

相關推薦

推薦中...