• 沒有找到結果。

第五章 系統測試

第二節 資料庫效能

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第二節 資料庫效能

在第二章提到HAWQ 是一個極大量平行運算的資料庫,所以 HAWQ 應該 在遇到多人存取時,能維持其效能,並透過平行運算來降低複雜SQL 指令帶給 伺服器的負擔,以維持其速度,因此,本研究針對HAWQ 面對多人存取及複雜 SQL 指令兩項,設計測試的內容。

測試資料使用第三章提到的ETF 資料表,經由 Yahoo 奇摩理財的 API 爬取,

資料大小約為1GB 左右,資料表欄位有索引、ETF_ID、轉換後日期、開盤價、

收盤價、當日最高價、當日最低價以及調整後收盤價。

針對SQL 指令的複雜程度,本研究設計兩種 SQL 指令,第一種是 SELECT ALL,將資料表所有的資料抓取下來,是為複雜度低的指令。另一種是 SELECT CONDITION,對資料表的資料做限制,像是限制存取日期的範圍、選擇特定的 ETF,是為複雜度較高的指令。下圖為本研究設計進行測試的 SQL 指令,

get_all_etf_ndarr()為第一種指令,get_etf_ndarr 為第二種指令:

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 五-3 資料庫效能測試程式

(資料來源:本研究繪製)

本研究準備三個不同的環境進行測試,分別是安裝於單一伺服器的Postgres 資料庫、3 個節點數的 HAWQ 資料庫及 5 個節點數的 HAWQ 資料庫,下表即為 測試結果,根據指令複雜度的高低分為二表:

SQL 指令複雜度低(get_all_etf_ndarr)

測試環境 使用者存取數

單一 Postgres HAWQ ( 3 nodes )

HAWQ ( 5 nodes ) 1 名 26.4 s 17.5 s 33.7 s 2 名 30.8 s 18.3 s 36.8 s

單一 Postgres HAWQ ( 3 nodes ) SQL 查詢速度遠高於 Postgres,足以見識到 HAWQ 平行運算的能力。最後可以 從表上發現,HAWQ 的節點數增加反而使速度變慢,這是因為增加節點會讓儲 存的資料更分散於各節點,因此 HAWQ Master 要向底下的 Slave 訪問的次數也 將提升,最後直接反映在效能上。不過,當使用者數目再繼續增加的話,能發現 節點數較高的 HAWQ 速率慢慢追上節點數較低的速率,可以推測出使用者數目 達到一定量後,節點數較高的 HAWQ 效能會高於節點數低的 HAWQ。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

透過上述分析,了解在多人存取的狀況下,HAWQ 的表現優於單一伺服器 Postgres,而增加 HAWQ 節點數目讓平台能應付更多使用者同時存取,最後本研 究得出三個結論:

l HAWQ 分散式架構適合使用於多人存取的環境 l HAWQ 能平行運算處理複雜度較高的 SQL 指令 l 設置 HAWQ 節點的數量將取決於平台使用者的數目

Celery 讓平台裡的任務可以跨層傳輸以及遠端運行;JupyterHub 提供使用者熟悉 的IPython 頁面;Docker Spawner 將 docker 虛擬化的概念深植平台裡,使得各個 服務平均分佈在分散式架構中,減輕單一機器負擔;HAWQ 極大量平行運算的 功能,更是突破大量資料存儲速度過慢的問題。此架構具有以下之優勢:

l 高擴充性

Ambari 作為 Hadoop 平台上的搭建利器,只需經由瀏覽器即可進行 Hadoop 叢集部署。圖形化及一目瞭然的參數設定介面,讓開發者可以 快速新增節點及其他Hadoop 上的開源軟體,如 YARN、Spark 等,有 利於平台進行水平擴充與垂直擴充。

l 資源隔離

利用 Docker 容器化的技術,將原本 JupyterHub 生成的 Python 實例 轉變成容器使用,由於容器間彼此都是獨立的環境,讓使用者個人配置