天天看點

TPCH測試工具

tpc現有的測試标準為:tpc-e、tpc-c、tpc-h、tpc-app。根據這4個測試基準,目前tpc主要包括的4個技術小組委員會:tpc-e 技術小組委員會、tpc-c 技術小組委員會、tpc-h技術小組委員會、tpc-app技術小組委員會。前期tpc使用過但目前已經停止使用的測試标準有:tpc-a、tpc-b(資料庫處理能力測試标準)、tpc-d、tpc-r(決策支援系統測試标準,類tpc-h)、tpc-w(web處理能力測試标準)。

tpc測試标準分類

聯機線上事務處理系統(oltp)測試标準:tpc-c、tpc-e(最新)

決策支援/大資料(ds)測試标準:tpc-h、tpc-ds(最新)

伺服器虛拟化(vms)測試标準:tpc-vms

oltp測試标準

由于資料庫的應用一般有兩種,一種是oltp,即線上聯機事務處理,另一種是資料挖掘。就目前來說,oltp仍然是主流應用。是以從一定程度來說,tpc-c和tpc-e的結果對于資料庫系統采購都有一定的參考價值,比如銀行、證券、稅務報稅系統、電子商務網站、電信業務等都是比較典型的oltp應用。

tpc-h

tpc-h(商業智能計算測試) 是美國交易處理效能委員會(tpc,transaction processing performance council) 組織制定的用來模拟決策支援類應用的一個測試集.目前,在學術界和工業界普遍采用它來評價決策支援技術方面應用的性能. 這種商業測試可以全方位評測系統的整體商業計算綜合能力,對廠商的要求更高,同時也具有普遍的商業實用意義,目前在銀行信貸分析和信用卡分析、電信營運分析、稅收分析、煙草行業決策分析中都有廣泛的應用。

tpc-h 基準測試是由 tpc-d(由 tpc 組織于 1994 年指定的标準,用于決策支援系統方面的測試基準)發展而來的.tpc-h 用 3nf 實作了一個資料倉庫,共包含 8 個基本關系,其資料量可以設定從 1g~3t 不等。tpc-h 基準測試包括 22 個查詢(q1~q22),其主要評價名額是各個查詢的響應時間,即從送出查詢到結果傳回所需時間.tpc-h 基準測試的度量機關是每小時執行的查詢數( qphh@size),其中 h 表示每小時系統執行複雜查詢的平均次數,size 表示資料庫規模的大小,它能夠反映出系統在處理查詢時的能力.tpc-h 是根據真實的生産運作環境來模組化的,這使得它可以評估一些其他測試所不能評估的關鍵性能參數.總而言之,tpc 組織頒布的tpc-h 标準滿足了資料倉庫領域的測試需求,并且促使各個廠商以及研究機構将該項技術推向極限。

---------------------

 tpc-h 基準測試是由 tpc-d(由 tpc 組織于 1994 年指定的标準,用于決策支援系統方面的測試基準)發展而來的.tpc-h 用 3nf 實作了一個資料倉庫,共包含 8 個基本關系,其資料量可以設定從 1g~3t 不等。tpc-h 基準測試包括 22 個查詢(q1~q22),其主要評價名額是各個查詢的響應時間,即從送出查詢到結果傳回所需時間.tpc-h 基準測試的度量機關是每小時執行的查詢數( qphh@size),其中 h 表示每小時系統執行複雜查詢的平均次數,size 表示資料庫規模的大小,它能夠反映出系統在處理查詢時的能力.tpc-h 是根據真實的生産運作環境來模組化的,這使得它可以評估一些其他測試所不能評估的關鍵性能參數.總而言之,tpc 組織頒布的tpc-h 标準滿足了資料倉庫領域的測試需求,并且促使各個廠商以及研究機構将該項技術推向極限。

tpch 裡的表格對一個配件銷售管理系統進行模組化。細節參考 tpch specification

tpch 的 query 定義參考 specification 的 2.4 節,裡面詳細說明了每個 query 的内涵。本文過一遍表定義,記住這些表的意思,有利于了解 query。

suplier

供應商資訊:key + 姓名、位址、電話、國家代碼

其中國家代碼需要和 nation 表做 join 以獲得詳細國家資訊。

create table `supplier` (

`s_suppkey` bigint(20) not null,

`s_name` char(25) default null,

`s_address` varchar(40) default null,

`s_nationkey` bigint(20) default null,

`s_phone` char(15) default null,

`s_acctbal` bigint(20) default null,

`s_comment` varchar(101) default null,

primary key (`s_suppkey`)

) partition by hash(s_suppkey) partitions 128

1

nation

國家資訊:key + 國家名、地區代号

其中地區代号需要和 region 表做 join 以獲得地區詳細資訊

create table `nation` (

`n_nationkey` bigint(20) not null,

`n_name` char(25) default null,

`n_regionkey` bigint(20) default null,

`n_comment` varchar(152) default null,

primary key (`n_nationkey`)

)

region

地區資訊:key + 地區名

create table `region` (

`r_regionkey` bigint(20) not null,

`r_name` char(25) default null,

`r_comment` varchar(152) default null,

primary key (`r_regionkey`)

customer

使用者表:key + 姓名、位址、國家代号、電話等

使用者表按照 key 做 64 個 hash 分區

create table `customer` (

`c_custkey` bigint(20) not null,

`c_name` varchar(25) default null,

`c_address` varchar(40) default null,

`c_nationkey` bigint(20) default null,

`c_phone` char(15) default null,

`c_acctbal` decimal(10,2) default null,

`c_mktsegment` char(10) default null,

`c_comment` varchar(117) default null,

primary key (`c_custkey`),

unique key `i_c_custkey` (`c_custkey`) local block_size 16384

) partition by hash(c_custkey) partitions 64

part

配件表:key + 配件名、廠商、品牌、類型、大小、包裝、零售價

create table `part` (

`p_partkey` bigint(20) not null,

`p_name` varchar(55) default null,

`p_mfgr` char(25) default null,

`p_brand` char(10) default null,

`p_type` varchar(25) default null,

`p_size` bigint(20) default null,

`p_container` char(10) default null,

`p_retailprice` decimal(10,2) default null,

`p_comment` varchar(23) default null,

primary key (`p_partkey`)

) partition by hash(p_partkey) partitions 64;

partsupp

配件供應表:配件key + 供應商key + 供應數量、批發價

create table `partsupp` (

`ps_partkey` bigint(20) not null,

`ps_suppkey` bigint(20) not null,

`ps_availqty` bigint(20) default null,

`ps_supplycost` decimal(10,2) default null,

`ps_comment` varchar(199) default null,

primary key (`ps_partkey`, `ps_suppkey`),

unique key `ps_pkey_skey` (`ps_partkey`, `ps_suppkey`) local block_size 16384

) partition by hash(ps_partkey) partitions 64

orders

零售訂單表:訂單key + 客戶key + 訂單狀态、訂單總價、下單日期、優先級、收銀員、發貨優先級

create table `orders` (

`o_orderkey` bigint(20) not null,

`o_custkey` bigint(20) not null,

`o_orderstatus` char(1) default null,

`o_totalprice` decimal(10,2) default null,

`o_orderdate` date not null,

`o_orderpriority` char(15) default null,

`o_clerk` char(15) default null,

`o_shippriority` bigint(20) default null,

`o_comment` varchar(79) default null,

primary key (`o_orderkey`, `o_orderdate`, `o_custkey`),

key `o_orderkey` (`o_orderkey`) local block_size 16384

) partition by range columns(o_orderdate)

subpartition by hash(o_custkey) subpartitions 64

(partition ord1 values less than ('1992-01-01'),

partition ord2 values less than ('1992-02-01'),

partition ord3 values less than ('1992-03-01'),

...

partition ord77 values less than ('1998-05-01'),

partition ord78 values less than ('1998-06-01'),

partition ord79 values less than ('1998-07-01'),

partition ord80 values less than ('1998-08-01'),

partition ord81 values less than (maxvalue))

lineitem

訂單明細表:訂單key + 配件key + 供應商key + 流水号、數量、價格、折扣、稅、明細狀态、發貨日期、預計到達日期、實際到達日期、運單處理政策(原返?拒收退回?等)、運輸途徑(火車、汽運、郵寄等)

create table `lineitem` (

`l_orderkey` bigint(20) not null,

`l_partkey` bigint(20) not null,

`l_suppkey` bigint(20) not null,

`l_linenumber` bigint(20) not null,

`l_quantity` bigint(20) not null,

`l_extendedprice` decimal(10,2) not null,

`l_discount` decimal(10,2) not null,

`l_tax` decimal(10,2) not null,

`l_returnflag` char(1) default null,

`l_linestatus` char(1) default null,

`l_shipdate` date not null,

`l_commitdate` date default null,

`l_receiptdate` date default null,

`l_shipinstruct` char(25) default null,

`l_shipmode` char(10) default null,

`l_comment` varchar(44) default null,

primary key (`l_orderkey`, `l_linenumber`, `l_shipdate`, `l_partkey`),

key `i_l_orderkey` (`l_orderkey`) local block_size 16384

) partition by range columns(l_shipdate)

subpartition by hash(l_partkey) subpartitions 64

(partition item1 values less than ('1992-01-01'),

partition item2 values less than ('1992-02-01'),

partition item3 values less than ('1992-03-01'),

partition item4 values less than ('1992-04-01'),

partition item81 values less than ('1998-09-01'),

partition item82 values less than ('1998-10-01'),

partition item83 values less than ('1998-11-01'),

partition item84 values less than (maxvalue))

總體上看,圍繞銷售資料可以做各種進銷存查詢,圍繞客戶資料,可以做各種銷售分析。更多 bi 相關内容,參考 http://www.tpc.org/tpc_documents_current_versions/pdf/tpc-h_v2.17.3.pdf

作者:maray