天天看點

《Spark大資料分析:核心概念、技術及實踐》一1.5 NoSQL

  本節書摘來自華章出版社《spark大資料分析:核心概念、技術及實踐》一書中的第1章,第1.5節,作者[美] 穆罕默德·古勒(mohammed guller),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

1.5 nosql

nosql這個術語用于非關系型的現代資料庫。起初,nosql指的是“不支援sql”,因為這些資料庫不支援sql。而現在,它指的是“不止sql”,因為其中一些資料庫支援sql指令的一個子集。相對rdbms資料庫來說,nosql資料庫有不同的設計目标。一個關系資料庫保證了acid(原子性、一緻性、獨立性和持久性)。而nosql資料庫則權衡acid對線性擴充性、性能、高可用性、靈活的模式和其他特性的相容性。

本節讨論一些廣泛使用的nosql資料庫。

1.5.1 cassandra

cassandra是一個分布式、可擴充、容錯的nosql資料庫,用于存儲大資料集。它是一個分塊的、可調節一緻性的行存儲。其關鍵特性是動态模式,每一行可以存儲不同的列,而不像關系資料庫那樣每行有完全相同的列。另外,cassandra對寫操作做了優化,是以插入操作是高性能的。

cassandra是一個無主的分布式架構。是以,它沒有單點故障的問題。另外,它實作了各行在叢集中的自動分布。讀寫資料的用戶端應用可以連接配接cassandra叢集中的任意節點。

cassandra通過内部對資料複制的支援來提供高可用性。儲存的副本數量可以配置,每個副本在叢集中不同的節點上存儲。如果複制因子是3,即使一或兩個節點當機,整個叢集依然可用。

cassandra中資料通過鍵空間(keyspace)、表、行和列形成的層級結構來模組化。鍵空間在概念上類似于rdbms中的資料庫或模式。它是表的邏輯集合,代表一個命名空間,用來控制一組表的資料複制。表(也稱為“列族”)在概念上類似于rdbms中的表。一個列族由分塊的行的集合構成。每一行由分塊的鍵和一組列構成。特别要注意的是,盡管cassandra中的鍵空間、表、行和列看起來分别和關系型資料庫中的模式、表、行和列很類似,但是它們的實作和實體存儲是不同的。

在cassandra中查詢模式驅動資料模型。cassandra中的一個列族或一個表基本上就是一個物化視圖。不像關系資料庫那樣,cassandra不支援連接配接(join),這意味着相同的資料可能需要在多個列族中複制。

1.5.2 hbase

hbase也是一個分布式、可擴充、容錯的nosql資料存儲,用于存儲大資料集。它運作在hdfs之上。它和cassandra有相似的特點,二者均受啟發于bigtable(一個由google發明的資料存儲系統)。

bigtable是一個由google創造的分布式存儲系統,用來處理跨越上千台商用伺服器中拍位元組級别的結構化資料。它不支援關系資料模型;相反,它提供了一種簡單的資料模型,賦予用戶端應用對資料存儲的動态控制權。

hbase把資料存在表中。表由行組成,行由列族組成,列族由列組成。然而,hbase中的表和列與關系資料庫中的表和列有很大不同。一個hbase表本質上是一個稀疏的、分布式、持久化、多元且有序的map。

map是一個被大多數程式設計語言所支援的資料結構。這是一個用于存儲鍵值對的容器。對于通過鍵查找值來說,它是一種非常高效的資料結構。一般來說,鍵的順序是未定義的,應用也不關心鍵的順序:它提供一個鍵給map,然後擷取這個鍵所對應的值。注意,不要把map資料結構和hadoop

mapreduce中的map函數弄混了。map函數是一個函數式程式設計語言的概念,用于轉換資料。

map資料結構在不同的程式設計語言中有不同的名字。比如,在php中叫作關聯數組,在python中叫作字典,在ruby中它稱為哈希,而在java和scala中則為映射。

hbase表是一個有序的多元或多層級的map。第一層鍵是行鍵,它使應用能快速從數以億計的行中讀取其中一行。第二層鍵是列族。第三層鍵是列名,也稱為列辨別符。第四層鍵是時間戳。行鍵、列族、列名和時間戳組合起來,就唯一辨別了一個單元(cell),其中包含值。值是一個未解析的位元組數組。

hbase表中的行是稀疏的。不像關系資料庫中的行,hbase中的每一行不必須有同樣的列。每一行有同樣的列族集,但一行中的某些列族可能沒有存儲任何内容。一個空單元不占用任何存儲空間。