列族數據庫的設計
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 使用的計算模型則更加通用一些。
列族數據庫的設計