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 來做複雜的報表分析,以提升整套系統的乘載量與穩定性。

參考

即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
分享網站開發的前端、後端、資料庫與部屬維運技術,並記錄在工作上的心得
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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 服務。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
Ruby on Rails 是一個使用 Ruby 語言編寫的開源 Web 應用程式框架。 PostgreSQL 是一個強大、開源的物件關聯式資料庫系統,擁有超過 35 年的活躍開發歷程,並以其可靠性、功能強大性和效能而享有盛譽。 PostgreSQL 提供許多特定資料類型,以下是 Rails 支
※ ORM 是什麼?ORM 的優缺點是什麼? ORM 是什麼? ORM 專用於關聯式資料庫 (relational database)一種叫「物件映射 (object mapping)」 的技術,主要是用程式語言裡的「物件」來包裝資料庫的 SQL (structured query langua
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
Ruby on Rails 是一個使用 Ruby 語言編寫的開源 Web 應用程式框架。 PostgreSQL 是一個強大、開源的物件關聯式資料庫系統,擁有超過 35 年的活躍開發歷程,並以其可靠性、功能強大性和效能而享有盛譽。 PostgreSQL 提供許多特定資料類型,以下是 Rails 支
※ ORM 是什麼?ORM 的優缺點是什麼? ORM 是什麼? ORM 專用於關聯式資料庫 (relational database)一種叫「物件映射 (object mapping)」 的技術,主要是用程式語言裡的「物件」來包裝資料庫的 SQL (structured query langua
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table: