iT邦幫忙

2022 iThome 鐵人賽

DAY 1
0
Software Development

ClickHouse:時序資料庫建置與運行系列 第 1

day1-什麼是時序資料,時序資料庫的種類與介紹

  • 分享至 

  • xImage
  •  

前言

在介紹ClickHouse建置與運行之前,要先來解釋與了解什麼是時序資料與時序資料庫,並介紹這類的資料特性與這類資料庫的簡易特性的介紹。
因此在本文章中,會注重在什麼是時序資料以及時序資料庫的種類與介紹。

時序資料介紹

時序資料,英文稱為「Time series data」,從字面上可以看出來,就是資料有時間序列的相關性,因此我們可以再進一步整理出這類型資料具有以下的特點:

  • 有時間順序的集合資料。
  • 這類型的資料會隨著時間越來越多,因此資料量的大小會隨著時間越來越大。
  • 在建立資料索引的時候,會與時間戳記timestamp有關,因為在查詢這類資料的時候,條件都會以時間範圍為主,因此對時間戳記建立索引可以增加查詢的速度。
  • 順序取決於即時的資料收集,像是從IoT裝置收集回來的測量資料,就是一種時序資料。
  • 時間順序的資料為依序排序,意思是資料可以依照時間的順序來進行排列。
  • 基於時間範圍的資料,通常在收集這類型資料的時候,會以一個時間範圍點來進行收集,抑或是搜尋資料時候會以一個時間範圍當作條件來進行查詢。
  • 通常這類型的資料,都是以即時的資料測量並寫入到指定的資料庫,因此會有頻繁寫入的需求。
  • 在查詢時序資料的資料表時,通常會有以下的動作:
    • 聚合(aggregated),意思是指在查詢時序資料時,通常會設定某個時間範圍的條件下的所有時序資料進行運算。例如:將此範圍內的資料的數值取平均、總和或是中位數等。
    • 降採樣(down-sampled),意思是會查詢某個時間範圍內的時序資料,並將此時序資料進行整理,像是將不合法的數值去除、去除掉空值null等。

下面的資料表綱要就是一筆時序資料通常會有的欄位:

  • ID,可以當作每筆資料的獨特識別的主鍵,也有可能沒有這個欄位,對於下面的measured_time欄位來說,因為每個時間點在整個資料表是獨特的,因此也會拿此欄位當作主鍵。
  • measured_time,為測量的時間,也可以當作主鍵,有可能是裝置或是感測器測量一些數值時候的時間,時間格式有很多種,可能是時間戳記timestamp或是ISO 8601國際標準的日期時間格式。
  • value,裝置感測器測量到的數值,有可能是整數、小數點等都有可能,取決於資料來源與資料表欄位設計。

從上面的範例欄位可以知道,value可能也有很多個,因為感測器裝置在測量的當下,可能不只會測出一種數值,可能會有好幾種,像是以空氣盒子為例,每個測量時間點就會同時測出八種的數值,下面是空氣盒子某個時間點所測量到的數值CSV資料範例:

"August 8, 2022 at 07:07PM",55,5,7,427,339,31.92,89.456,74

從上面的範例資料可以得知,CSV資料是以逗號分隔每一個數值類型的資料格式,若數值中有逗號時,則會以雙引號來框起來表示,從資料由左到右的欄位名稱分別是:

  • 測量時間。
  • MeasuredAirQuality,為測量到的空氣品質,即AQI(Air Quaility Index)值。
  • FineParticulateMatter,為測量到的PM 2.5值,為煙與霧霾。
  • CoarseParticulateMatter,為測量到的PM 2.5值,範圍為2.5微米到10微米之間的微粒。
  • Co2Equivalent,為測量到目前空氣中的二氧化碳當量。
  • Tvoc,為測量到的揮發性有機物數值。
  • TemperatureC,此時間點測量到的溫度,以攝氏單位表示。
  • TemperatureF,此時間點測量到的溫度,以華氏單位表示。
  • Humidity,此時間點測量到的濕度。

時序資料庫種類介紹

從前一小節可以得知,時序資料的特性與相關資料類型的範例,接著就有因應這類型的資料儲存的資料庫接二連三的問世,透過這章節,讓我們來了解有哪些針對時序資料儲存的資料庫。

有關於儲存時序資料的資料庫的種類,我們可以依照不同的儲存技術方式列表如下:

  • Wide column store
    • 為一種No-SQL常見的資料庫儲存的方式,簡單來說,就是透過多個行row與列column進行存取並將需要的資料拆解成小資料,接著進行組合。最後可以透過row的鍵或是column鍵進行關聯搜索,好處是有效的壓縮資料並在搜索同一層級的資料相當方便。
    • 常見的這類型資料庫如下:
      • Google BigTable
      • Apache Casandra
      • Apache HBase
  • Key-value store
    • 以鍵-值的方式來進行資料的儲存,對於簡易的查詢來說,會來的方便與快速,但是對於複雜的查詢來說較不方便與適合
    • 常見的這類型資料庫如下:
      • Amazon DynamoDB
      • LevelDB
      • RocksDB
      • Redis
  • document-based stores
    • 也是一種鍵-值的儲存,但是限制value值為半結構化的資料(semi-structured data),像是JSON等就是這類型的資料,這類型資料通常都已經有初步的整理過,但是仍有不一致性等問題。而結構化資料(structured data)指的是資料已經有定義良好的資料,並可以用SQL來進行查詢與讀取,SQL關聯式資料庫包含了行列的資料表,就是此結構化資料的範例;非結構化資料(unstructured data)指的是未經整理過的資料,也可以理解成原始資料,像是從IoT裝置擷取到測量的數值、社群網站上的貼文與留言、從某個網站擷取的網頁內容或是系統日誌檔案內容等,都是非結構化的資料,這類型的資料都需要先經過進一步的整理與分析之後才會變成上述提到的非結構化與結構化資料。
    • 常見的這類型的資料庫如下:
      • AsterixDB
      • ArangoDB
      • MongoDB
  • column-oriented
    • 是一種以列column為導向的儲存方式,通常在一般的關聯式資料庫來說,都是以行row為導向的方式儲存。

    • 常見的列式儲存的資料庫如下:

      • Apache Druid
      • ClickHouse
    • 下面的示意圖為row-oriented與column-oriented的儲存方式比較:

row-column-oriented

從上面的示意圖可以得知,在row-oriented,以行為導向的儲存方式會將每行進行編號並將資料存入到該行中,即逐一列的儲存起來,而column-oriented列式導向的儲存則是會將欄位名稱當作該群組類別,並依序將資料表中的資料儲存到該群組中,意思就是會將資料逐一項的儲存起來。

  • Graph store圖資料庫
    • 是一個使用圖結構來進行語意查詢的資料庫,使用了節點與邊進行儲存資料,該資料庫系統的概念是圖,直接儲存資料項與資料節點和節點表示關係邊的集合關聯。
    • 這些關係允許直接將儲存區中的資料鏈結在一起,並且在許多情況下,可以通過一個操作進行檢索。
    • 圖資料庫將資料之間的關係作為優先級。在圖資料庫中進行查詢的關係很快,因為它們永久儲存在資料庫本身中。
    • 因此可以使用圖資料庫直觀地顯示關係,使其對於高度互相關聯的資料上非常的有用。
    • 常見的資料庫有:
      • Neo4j
  • Time Series Database (TSDB)
    • 有的資料庫直接主打專門儲存資料庫,在歸類上會屬於時序資料庫,像是蠻多人所知道的InfluxDB就是屬於這一類,此資料庫運用了LSM Tree的資料結構來進行資料的儲存。
    • LSM Tree,全名為「Log Structured-Merge Tree」,出自於Google BigTable的論文,它的出現是為了解決大型資料的OLAP(Online analytical processing)線上分析處理情境,主要是專注在讀取資料進行最佳化。此資料結構犧牲了讀取速度,並增強了寫入速度,對於頻繁地寫入資料有良好的優勢。

在本次章節中,我們知道了時序資料的定義以及特性,另外我們還知道各個不同儲存技術與方式來儲存時序資料的資料庫,在下一章節中,將會專注在介紹ClickHouse資料庫。


下一篇
day2-什麼是ClickHouse
系列文
ClickHouse:時序資料庫建置與運行30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言