1. 程式人生 > >列族數據庫的設計

列族數據庫的設計

全部 大量數據 tro 實體 數據表 機器 如果 從數據 bsp

1. 與列族數據庫相關的設計要點

  • 列族數據庫應該事先成稀疏且多維的 map
  • 在列族數據庫中,各個數據行所擁有的列是可以有所不同的
  • 列族數據庫的列是可以動態添加的
  • 列族數據庫不需要執行連接操作,需要對數據模型去規範化處理

2. 設計數據表格時需遵循的建議

  • 用去規範化來代替連接
  • 善用無值的列
  • 同時在列名和列值之中存儲數據
  • 用一個數據行來為一個實體建模
  • 設計行鍵時不要講大量操作分配給少數服務器
  • 維護適當數量的列值版本
  • 不要在列值中使用復雜的數據結構

3. 使用列族數據庫時怎樣才能避免執行連接操作?

在列族數據庫中,多對多的關系是通過去規範化的數據模型來表示的。

4. 為什麽說實體應該建模成一個單獨的數據行?

實體可以表示具體的事物,也可以表示成抽象的概念。列族數據庫用數據行來對實體進行建模。

一個數據行應該對應於一個實體。數據行之間通過 row key 來區分身份。

而且列族數據庫不需要執行連接操作,需要對數據模型去規範化處理。

列族數據庫並不提供與關系數據庫級別相同的事務控制機制。

一般來說,對數據行的寫入是原子操作。若更新表格中的多個列,則這些列全部得到更新,要麽一個也無法更新。

5. 什麽叫做熱點現象(hotspotting), 為什麽應該避免這種現象?

分布式系統可以使我們利用許多臺服務器來解決問題,但如果把大量的任務都壓在了少數幾臺服務器上,就會令

分布式系統中產生熱點(hotspotting),這樣就會導致其他的服務器未能得到充分利用,也未能真正發揮分布式系統的優勢。

6. 把復雜的數據結構用作列值會有哪些缺點?

用不同的列來存放不同的屬性,使得大家能夠更加便利的在這些屬性上運用列族數據庫的特性。

把屬性放置在不同的列中也有助於大家能夠按照需求來劃分列族,以及使用編制索引來優化性能。

當然,使用復雜的數據結構沒有這些優勢。

7. 說出三種不應該使用輔助索引的情形。

1. 列中的基數值很少,索引則無助於提高性能,有時甚至還會損害性能

2. 列中的技術太多時

3. 許多數據行都沒有用到某個列時,針對該列編制輔助索引意義也不是很大

8. 統計學可以分為哪兩種?它們各自的用途是什麽?

統計學是數學的分支,研究如何描述大型數據集(總體),以及如何從數據中做出推論。

分為描述統計學

預測統計學兩種。

描述統計學有助於我們理解數據的構成情況,也使得我們更加方便的將某個數據集與其他數據相對比。

預測統計學研究的是如何根據數據來做出預測。

9. 機器學習可以分為哪兩種?它們各自的用途是什麽?

機器學習所用的方法涉及其他很多學科,如計算機科學,人工智能,統計學,線性代數等。

有許多服務背後都有機器學習技術來支撐,如根據過往的購買行為向顧客推薦商品,檢測網絡欺詐行為,機器翻譯等。

包括

1. 非監督式學習,有助於我們探索龐大的數據集

2. 監督式學習使得程序能夠從樣例數據中學到一些知識

10. Spark 和 MapReduce 有什麽區別?

MapReduce 需要向磁盤中寫入大量數據, Spark 則需要占用很多內存。

MapReduce 采用一種比較固定的計算模型,先 map 後 reduce,而 Spark 使用的計算模型則更加通用一些。

列族數據庫的設計