NoSQL數據庫類型說明:列式數據庫
為了滿足對數據存儲不斷增長的需求,以及以最高效的方式容納數據多樣性,企業越來越傾向于選擇非標準數據庫類型。多年來,企業主要使用關系數據庫。然而,隨著需求的變化和存儲價格的下降,人們開始轉而使用非關系型數據庫。
列式數據庫符合這種描述。這些是NoSQL數據庫,專為高度分析、復雜查詢任務而構建。與關系數據庫不同,列式數據庫按列而不是按行存儲數據。這些列被收集以形成子組。
這類數據庫的鍵名和列名不是固定的。同一列族或列簇中的列可以具有不同的行數,并且可以容納不同類型的數據和名稱。
當需要大型數據模型時,最常使用這些數據庫。它們對于數據倉庫非常有用,或者在需要高性能或處理密集查詢時非常有用。
列式數據庫如何工作
關系型數據庫有固定的模式,它們具有行和列的表。寬列數據庫具有相似但不同的架構。它們也有行和列。但是,它們不是固定在表中,而是具有動態模式。每列單獨存儲。
如果存在相似(相關)的列,則將它們關聯到列族中,然后將這些列族與其他列族分開存儲。 行鍵是每個列族的第一列,作為行的標識符。此外,之后的每一列都有一個列鍵(名稱)。它標識行中的列,從而實現對列的查詢。值和時間戳出現在列鍵之后,說明數據何時被輸入或修改。
與每一行相關的列數或其名稱可能會有所不同。換句話說,并不是一個列族的每一列都有相同的行數。事實上,即使它們可能共享它們的名字,每一列都包含在一行中并且不會跨越所有行。
接觸過關系型數據庫的人都知道,關系型數據庫的每一列都有相同的行數,只是碰巧有些字段有空值,或者看起來是空的。對于寬列數據庫,這些行不是空的,而是對于特定列根本不存在。
列族位于鍵空間中。每個鍵空間都包含一個完整的 NoSQL 數據存儲,并且正如模式對關系數據庫那樣,它具有相似的角色或重要性。然而,由于 NoSQL 數據存儲沒有集合結構,鍵空間代表無模式數據庫,其中包含數據存儲設計和它自己的屬性集。
當前最流行的列式數據庫之一是 MariaDB。它是作為 MySQL 的分支而創建,它很強大且可擴展,可處理很多不同的目的和大量的查詢。Apache Cassandra是柱狀數據庫的另一個例子,它處理跨多個服務器的大量數據負載,使數據高度可用。其他數據庫還包括專為分析設計的 Apache HBase、Hypertable和Druid。這些數據庫支持Outbrain、Spotify 和 Facebook等平臺的某些功能。
列族類型
- 標準列族。這種列族類型類似于表;它包含一個鍵值對,其中鍵是行鍵,值存儲在列中,使用它們的名稱作為標識符。
- 超級列族。超級列代表列數組。每個超級列都有一個名稱和一個值,將超級列映射到幾個不同的列。相關的超級列關聯在超級列族的單行種。與關系數據庫相比,這就像數據庫中幾個不同表。想象一下,你可以查看單行的列和值,這是跨多個不同表的單個標識符,并且能夠將它們全部存儲在一個地方:這就是超級列族。
列式數據庫的優勢
- 可擴展性。這是主要優勢,這也是企業使用此類數據庫存儲大數據的主要原因之一。它能夠根據數據庫的規模分布在數百臺不同的機器上,支持大規模并行處理。這意味著它可以使用多個處理器同時處理同一組計算。
- 壓縮。它們不僅具有無限的可擴展性,而且還擅長壓縮數據,從而節省存儲空間。
- 反應靈敏。加載時間最短,查詢執行速度快,這是因為它們被設計為支持大數據,并適用于分析。
列式數據庫的缺點
- 在線事務處理。對于在線事務處理,這些數據庫不是很高效,不如在線分析處理。這意味著它們不太擅長更新事務,但旨在分析它們。這就是為什么我們看到這些數據庫用于保存業務分析所需的數據,而關系數據庫在后端存儲數據。
- 增量數據加載。如上所述,通常列式數據庫用于分析并且可以快速檢索數據,即使在處理復雜查詢時也是如此,因為數據在列中緊密聯系。雖然增量數據加載并非不可能,但列式數據庫并不能以最有效的方式執行它們。首先需要掃描列以識別正確的行,然后進一步掃描以定位需要覆蓋的修改數據。
- 特定于行的查詢。正如上面提到的缺點,這一切都歸結為同一問題,即為正確的目的使用正確類型的數據庫。對于特定于行的查詢,你會引入額外的步驟,即掃描列以識別行,然后定位要檢索的數據。訪問分散在多列中的單個記錄需要很多時間,而訪問單個列中的分組記錄會更快。頻繁的行特定查詢可能會降低列式數據庫的速度,從而導致性能問題,這無疑違背該數據庫的設計初衷,它是專為幫助快速獲取所需信息而設計。
NoSQL數據庫主要是為滿足特定目的而設計,不應用作一般類型的存儲。寬列數據庫是列式而不是行式,它主要用于存儲和查詢大數據。該類型中有很多不同的數據庫可用,在尋找最合適的數據存儲解決方案時,你應該探索它們的功能。






















