Row-Oriented and Columnar Database 的差異與該如何選擇

閱讀時間約 2 分鐘
在網頁服務中資料庫擔任了很重要的任務,用來保存客戶的資料與提供分析的數據來源,而針對不同的需求會有各類型適合資料庫來負責。

這篇文章中會針對 Row-Oriented (以列為儲存主體) 和 Columnar (以行為儲存主體) 的兩種資料庫來分析任務與資料庫間的合適搭配。

Row-Oriented 的意思

Row-Oriented 的資料庫在儲存上會將圖上 同一 Row 的資料存為一組,因此只要知道 Id 就能快速的撈出他所在那 Row 的資料。
如圖所示,我可以透過 VendorId 找到商品的 Price 與 Cost。
而這樣的設計在統計分析上就會有一定程度的效能損耗,原因在於說我如果是想要統計所有的 Price 的加總,我雖然只需要每一個 Row 的 Price,但還是會讀取到其他的資料,導致存取上的浪費。

Columnar 的意思

Columnar 的資料庫在儲存上會將圖上同一 Column 的資料存為一組,因此可以簡單的針對某一欄位做運算。
如圖所示,我可以直接將 Price 做加總而不需要涉及到其他欄位的資料。
而這樣的設計在一般用途上就會很不方便,當我想要透過 VendorId 找到商品的 Price 與 Cost 時,我需要將 VendorId、Price、Cost 的欄位全部撈出來,並且找到相對位置的資料,在查找上非常沒有效率。

Row-Oriented 與 Columnar 的差異

現在我們知道 Row-Oriented 與 Columnar 主要是儲存資料時的結構差異。
Row-Oriented 代表的資料庫有 MySQLPostgreSQLMSSQL
適用於以 Id 來找關聯資料的系統如: 電商、會員管理、庫存管理的系統
Columnar 代表的資料庫有 Google Cloud BigQuery、Snowflake
適合用於統計分析的場景,如報表系統

如何選擇

以上可以看出 Row-Oriented 與 Columnar 沒有絕對優勢,而且通常在一套系統存在大量存取時會同時使用兩種資料庫,比如電商系統在交易時採用 Row-Oriented,而在分析時將資料從 Row-Oriented 轉移到 Columnar 來做複雜的報表分析,以提升整套系統的乘載量與穩定性。

參考

6會員
10Content count
分享網站開發的前端、後端、資料庫與部屬維運技術,並記錄在工作上的心得
留言0
查看全部
發表第一個留言支持創作者!
Hasura 是一個開源、高性能、多資料來源與嚴謹權限控管的 GraphQL Engine Service。
Neon 是基於 PostgreSQL 的 Serverless Database,具備了 Serverless 帶來的高乘載量、划算的費用與 PostgreSQL 強大的效能的一款開源資料庫服務。
Discord Bot 就是在 Discord 群組中可以回話與管理群組成員的機器人,依據開發者的設計能有不同的功能,這篇文章想要教的是如何向 Discord 申請一個自己的 Bot,日後才會介紹如何開發自己想要的功能。
不論是 GraphQL 與 RESTful API 都需要生態系的支撐,才會好用與完整 這篇會先介紹 GraphQL 的生態系工具。
這裡會針 GraphQL 與 RESTful API 這兩者介面所需要做的事情來比較其應用的場景。
fast endpoints 是一個支援 .NET 6 以上(Nuget 版本清單) 的 API 輕量框架,雖以簡單與高性能為主打,但也提供了很多常用的功能實現,如 Swagger 整合、Jwt 認證、Api 版本控制、APi 速率限制、Api 回應快取…很適合以此為基礎打造 Api 服務。
Hasura 是一個開源、高性能、多資料來源與嚴謹權限控管的 GraphQL Engine Service。
Neon 是基於 PostgreSQL 的 Serverless Database,具備了 Serverless 帶來的高乘載量、划算的費用與 PostgreSQL 強大的效能的一款開源資料庫服務。
Discord Bot 就是在 Discord 群組中可以回話與管理群組成員的機器人,依據開發者的設計能有不同的功能,這篇文章想要教的是如何向 Discord 申請一個自己的 Bot,日後才會介紹如何開發自己想要的功能。
不論是 GraphQL 與 RESTful API 都需要生態系的支撐,才會好用與完整 這篇會先介紹 GraphQL 的生態系工具。
這裡會針 GraphQL 與 RESTful API 這兩者介面所需要做的事情來比較其應用的場景。
fast endpoints 是一個支援 .NET 6 以上(Nuget 版本清單) 的 API 輕量框架,雖以簡單與高性能為主打,但也提供了很多常用的功能實現,如 Swagger 整合、Jwt 認證、Api 版本控制、APi 速率限制、Api 回應快取…很適合以此為基礎打造 Api 服務。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
題目敘述 題目會給定我們一個二維陣列,要求我們計算內部元素相同的column row pairs總共有多少條? 註: pair的定義就是row i 和 column j 彼此內部元素值都相同,這樣就算一條pair。 題目的原文敘述 測試範例 Example 1: Input: gr
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。 題目的原文敘述 Example 1: Input: +-------------+---------+--------
Thumbnail
青蚵仔嫂中"別人的阿君仔是穿西米羅" 。(歌詞全文見[註一]) 這西米羅是什麼?原來西米羅的原文是 Savile Row,是一條街道的名稱,這條街是倫敦一條以精工客制西裝而聞名的街道 Savile  Row Street(西米羅街)。所以穿西米羅就是穿手工精製的西裝的意思。猜想它是透過日語在台灣民間
Thumbnail
是時候討論資料庫安全性的時候!還記得上一篇Supabase的資料庫和表格文章中,建立一個新的表格時有把一個RLS的按鈕打開,這篇文章就是簡單的說明一下RLS是什麼,以及RLS如何設定等等範例。 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,
Thumbnail
今天 RPAI 數位優化器要和大家介紹的就是在 UiPath 進行 Excel 操作會使用的:Add Data Row 功能,可以告訴 UiPath 我們希望在 Excel 中的 Datatable 新增一列或一行資料,當我們需要將值加入到 Excel 當中時,就可以考慮使用這個功能。
Thumbnail
除了在演出舞台上的精采出色表現外,其實在音樂產業的商業世界中,Snoop Dogg 同樣經營的有聲有色。在全球這幾年因為疫情關係導致文化藝術與音樂產業的巨大影響下,他依然出手將其出道所屬的廠牌納入麾下,接下來還會有什麼表現與動作?值得一起了解。
Thumbnail
如上圖資料,想要group by g_id找到最大update_datetime的row:
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
題目敘述 題目會給定我們一個二維陣列,要求我們計算內部元素相同的column row pairs總共有多少條? 註: pair的定義就是row i 和 column j 彼此內部元素值都相同,這樣就算一條pair。 題目的原文敘述 測試範例 Example 1: Input: gr
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。 題目的原文敘述 Example 1: Input: +-------------+---------+--------
Thumbnail
青蚵仔嫂中"別人的阿君仔是穿西米羅" 。(歌詞全文見[註一]) 這西米羅是什麼?原來西米羅的原文是 Savile Row,是一條街道的名稱,這條街是倫敦一條以精工客制西裝而聞名的街道 Savile  Row Street(西米羅街)。所以穿西米羅就是穿手工精製的西裝的意思。猜想它是透過日語在台灣民間
Thumbnail
是時候討論資料庫安全性的時候!還記得上一篇Supabase的資料庫和表格文章中,建立一個新的表格時有把一個RLS的按鈕打開,這篇文章就是簡單的說明一下RLS是什麼,以及RLS如何設定等等範例。 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,
Thumbnail
今天 RPAI 數位優化器要和大家介紹的就是在 UiPath 進行 Excel 操作會使用的:Add Data Row 功能,可以告訴 UiPath 我們希望在 Excel 中的 Datatable 新增一列或一行資料,當我們需要將值加入到 Excel 當中時,就可以考慮使用這個功能。
Thumbnail
除了在演出舞台上的精采出色表現外,其實在音樂產業的商業世界中,Snoop Dogg 同樣經營的有聲有色。在全球這幾年因為疫情關係導致文化藝術與音樂產業的巨大影響下,他依然出手將其出道所屬的廠牌納入麾下,接下來還會有什麼表現與動作?值得一起了解。
Thumbnail
如上圖資料,想要group by g_id找到最大update_datetime的row: