Vertica DBMSã«é¢ããç°¡åãªæ å ±
Verticaã¯ããªã¬ãŒã·ã§ãã«åæã®åæåMPPããŒã¿ããŒã¹ã§ãã Habréã«ã¯ããã®DBMSã®äž»ãªæ©èœã説æããèšäºãååã«ãããŸãïŒèšäºã®æåŸã«ã¯ãããã®äžéšãžã®ãªã³ã¯ããããŸãïŒããããã£ãŠããããã«ã€ããŠã¯èª¬æããŸããã
- Facebook 㯠ãå
éšåæã¿ã¹ã¯ã«Verticaã䜿çšããŠããŸãã 2幎åã«ã¯ãæ°çŸã®ãµãŒããŒãšæ°åãã¿ãã€ãã®ããŒã¿ã®ã¯ã©ã¹ã¿ãŒããããŸãã...ãã®ãããžã§ã¯ãã«é¢é£ããæ
å ±ã¯èŠã€ãããŸããã§ãããããããã誰ããä¿¡é Œã§ãããªã³ã¯ãã³ã¡ã³ãã§å
±æããã§ãããã
- Verticaã¯ã Michael Stonebreaker ïŒå
ã¯C-StoreãšåŒã°ããŠããŸããïŒãçããããŒã ã«ãã£ãŠéçºãããŸããã Michaelã®ãããŸã§ã®çŽ æŽãããçµéšïŒIngresãPostgresãInformixãããã³ãã®ä»ã®DBMSïŒãèæ
®ããŠãåæã¿ã¹ã¯å°çšã«ãŒãããäœæãããŸããã ã¢ãããŒããæ¯èŒããããã«ãVerticaã®ã©ã€ãã«GreenplumïŒçŸåšã¯DellãææïŒãæãåºãããšãã§ããŸããããã¯ãå€æŽãããPostgreSQLããŒã¿ããŒã¹ã«åºã¥ããMPP DBMSã§ãã
- 2016幎ãHewlett-Packard EnterpriseïŒHPEïŒã¯ãMicro Focusã®ãœãããŠã§ã¢ããžãã¹ãVerticaã«å£²åŽããŸããã ãããVerticaã®éçºã«ã©ã®ããã«åœ±é¿ãããã¯ãŸã æããã§ã¯ãããŸãããããã®ååŒãåªãã補åãå°ç¡ãã«ããªãããšãæ¬åœã«é¡ã£ãŠããŸãã
- Exasolãšã®æ¯èŒã®ã³ã³ããã¹ãã§ã¯ãVerticaã¯ã¡ã¢ãªå ããŒã¿ããŒã¹ã§ã¯ãªããããã«Verticaã«ã¯ãããã¡ããŒã«ããªãããšã«æ³šæããããšãéèŠã§ãã ã€ãŸããããŒã¿ããŒã¹ã¯äž»ã«RAMã®ãµã€ãºãå€§å¹ ã«è¶ ããããŒã¿ã®åŠçãç®çãšããŠããããããã¡ãã£ãã·ã¥ã®ãµããŒããæåŠããããšã§ããµãŒããŒã®ãªãœãŒã¹ã®ããªãã®éšåãç¯çŽã§ããŸãã åæã«ãVerticaã¯ãã¡ã€ã«ã·ã¹ãã ã®æ©èœãç¹ã«ãã£ãã·ã³ã°ãå¹æçã«æŽ»çšããŸãã
TPC-Hãã³ãããŒã¯
以åã®2ã€ã®èšäºãèªãã§ããªã人ã®ããã«ã tpc-hãã³ãããŒã¯ã«ã€ããŠç°¡åã«èª¬æããŸã ã åæã·ã¹ãã ãšããŒã¿ãŠã§ã¢ããŠã¹ã®ããã©ãŒãã³ã¹ãæ¯èŒããããã«èšèšãããŠããŸãã ãã®ãã³ãããŒã¯ã¯ãDBMSãšãµãŒããŒããŒããŠã§ã¢ã®å€ãã®ã¡ãŒã«ãŒã§äœ¿çšãããŠããŸãã tpc-hããŒãžã«ã¯å€ãã®çµæããããŸããå ¬éããã«ã¯ã136ããŒãžã§ä»æ§ã®ãã¹ãŠã®èŠä»¶ãæºããå¿ èŠããããŸãã ç§ã¯ãã¹ããå ¬åŒã«å ¬è¡šããã€ããã¯ãªãã£ãã®ã§ããã¹ãŠã®èŠåãå³å¯ã«å®ã£ãŠããŸããã§ããã ã©ã³ãã³ã°ã«ã¯åäžã®ãã¹ãDBMS Verticaããªãããšã«æ³šæããŠãã ããã
TPC-Hã§ã¯ãæå®ãããã¹ã±ãŒã«ãã¡ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒã䜿çšããŠ8ã€ã®ããŒãã«ã®ããŒã¿ãçæã§ããŸããããã«ãããã®ã¬ãã€ãåäœã®ããŒã¿ã®ããããã®éã決ãŸããŸãã çµæãå ¬éãããã¹ãŠã®ãã¹ãã«ã€ããŠã2 GBã«å¶éããŸããã
ãã³ãããŒã¯ã«ã¯ãããŸããŸãªè€éãã®22ã®SQLã¯ãšãªãå«ãŸããŸãã qgenãŠãŒãã£ãªãã£ã«ãã£ãŠçæãããã¯ãšãªã¯ãç¹å®ã®DBMSã®ç¹å®ã®æ©èœã«èª¿æŽããå¿ èŠããããŸããã Exasolã®ããã«ãVerticaã¯ANSI SQL-99æšæºããµããŒãããããã2ã€ã®DBMSã®ã¯ãšãªã¯ãã¹ãŠãŸã£ããåãã§ããã ãã¹ãã§ã¯ã2çš®é¡ã®è² è·ãçæãããŸããã
- 8人ã®ä»®æ³ãŠãŒã¶ãŒã1åšã«3å䞊è¡ããŠ22ãªã¯ãšã¹ããã¹ãŠãå®è¡
- 2人ã®ä»®æ³ãŠãŒã¶ãŒããµãŒã¯ã«å ã§åæã«12åã22ã®ãªã¯ãšã¹ããã¹ãŠãå®è¡ããŸã
ãã®çµæãã©ã¡ãã®å Žåãã528åã®SQLã¯ãšãªã®å®è¡æéãæšå®ãããŸããã
ãã¹ããµã€ã
次ã®æ©èœãåããã©ãããããïŒ
Intel Core i5-4210 CPU 1.70GHz-4ä»®æ³ ããã»ããµãŒ; DDR3 16 Gb; SSDãã£ã¹ã¯ã
OSïŒ
MS Windows 8.1 x64
VMware Workstation 12 Player
ä»®æ³OSïŒUbuntu 14.04.4 x64ïŒã¡ã¢ãªïŒ8 Gb;ããã»ããµãŒïŒ4ïŒ
DBMSïŒ
Vertica Analytic Database v7.2.2-1ïŒ åäžããŒã ïŒ
Verticaã®ç©çããŒã¿ã¢ãã«
Verticaã§äœ¿çšããããã£ã¹ã¯å®¹éãšã¯ãšãªããã©ãŒãã³ã¹ã¯ãæ圱åã®äžŠã¹æ¿ãé åºãšå§çž®ã¢ã«ãŽãªãºã ã«å€§ããäŸåããŸãã ããã«åºã¥ããŠãããã€ãã®æ®µéã§ãã¹ããå®è¡ããŸããã æåã®æ®µéã§ã¯ããã®æ¹æ³ã§ã¹ãŒããŒãããžã§ã¯ã·ã§ã³ã®ã¿ãäœæãããŸããã
CREATE TABLE ORDERS ( O_ORDERKEY INT NOT NULL, O_CUSTKEY INT NOT NULL, O_ORDERSTATUS CHAR(1) NOT NULL, O_TOTALPRICE NUMERIC(15,2) NOT NULL, O_ORDERDATE DATE NOT NULL, O_ORDERPRIORITY CHAR(15) NOT NULL, O_CLERK CHAR(15) NOT NULL, O_SHIPPRIORITY INT NOT NULL, O_COMMENT VARCHAR(79) NOT NULL) PARTITION BY (date_part('year', ORDERS.O_ORDERDATE));
2ã€ã®æ倧ã®ããŒãã«ORDERSãšLINEITEMã¯ã幎ããšã«ããŒãã£ã·ã§ã³åå²ãããŸããã ãã³ãããŒã¯ã¯1ã€ã®ããŒãã§å®è¡ããããããã»ã°ã¡ã³ããŒã·ã§ã³ïŒã·ã£ãŒãã£ã³ã°ïŒã¯ãããŸããã§ããã åŸç¶ã®æ®µéã§ã¯ãããŒã¿ããŒã¹ãã¶ã€ããŒã䜿çšããŠç©çæ§é ãæé©åãããŸããã詳现ã¯ä»¥äžãã芧ãã ããã
Verticaãžã®ããŒã¿ã®ã¢ããããŒã
ããã¹ããã¡ã€ã«ããããŒã¿ãèªã¿èŸŒãã«ã¯ã次ã®ã¹ã¯ãªããã䜿çšããŸããã
COPY tpch.lineitem FROM LOCAL 'D:\lineitem.tbl' exceptions 'D:\l_error.log';
ãã¹ãŠã®ãã¡ã€ã«ã®ããŠã³ããŒãæéã¯5åã§ããã 21ç§ ïŒExasol 3å37ç§ïŒã ãã®æ¹æ³ã§ã¯ãããŒã¿ã¯æåã«1è¡ã〠RAMããWOSã³ã³ãããŒã«ããŒãããïŒããã©ã«ãã®wosdataããŒã«ãã©ã¡ãŒã¿ãŒïŒ maxmemorysize = 25ïŒ ïŒããã®åŸROSã³ã³ãããŒã§è¡ããšã«èªåçã«ãã£ã¹ã¯ã«ããŒããããŸãã ãŸããETL Pentaho DIããŒã«ïŒå¥åã±ãã«ïŒã䜿çšããŠããã¡ã€ã«ããã³Oracleããã®ããŠã³ããŒãããã¹ãããŸãããVerticaã®ç¹å¥ãªãã©ã°ã€ã³ã䜿çšããŠããã¯ããã«é ããªããŸãã
è©Šéšçµæ
*åã®ãã¹ãã§ã¯ ãExasolã§ã®ã¯ãšãªã®å®è¡ã¯ãçµæã®ãã£ãã·ã¥ã«ããå€§å¹ ã«ççž®ãããŸããïŒäžéšã®ãã©ã¡ãŒã¿ãŒå€ãçæãããããããã¹ãã®äžéšã®ãªã¯ãšã¹ãã¯å€æŽãããŸããïŒã Verticaã«ã¯ãã®ãããªãã£ãã·ã¥ã¯ãããŸããããªããºãåçã«ãããããExasolã§ã¯ç¡å¹ã«ããŸããã
alter session set QUERY_CACHE = 'OFF';
Verticaã®ãã¹ãã·ãŒã±ã³ã¹
ã¹ããŒãž1.æåã®èµ·å
æåã®ãã¹ãå®è¡ã¯ã çµ±èšãåéããã«ããŒã¿ãã¹ãŒããŒãããžã§ã¯ã·ã§ã³ã«ããŒãããåŸã«å®è¡ãããŸããã ãªãŒãã¿ã€ã ã¯2ã»ãã·ã§ã³ã§581ç§ã8ã»ãã·ã§ã³ã§680ç§ã§ããã ç¹°ãè¿ãå®è¡ãããšãæéã¯æå°éã«ççž®ãããŸããïŒäžèšã®è¡šãåç §ïŒã
次ã®è¡šã¯ãæåã®ããŠã³ããŒãåŸã®Exasolããã³Verticaã§ã®ããŒã¿ã®ç·šæã«é¢ããæ å ±ãæäŸããŸãã
Verticaã®ãã£ã¹ã¯ããã³ã¡ã¢ãªå ã®å æã¹ããŒã¹ã«é¢ããæ å ±ã®èŠæ±ïŒ
SELECT ANCHOR_TABLE_NAME, PROJECTION_NAME, USED_BYTES/1024/1024 as USED_Mb, ROS_USED_BYTES/1024/1024 as ROS_Mb, WOS_USED_BYTES/1024/1024 as WOS_Mb FROM PROJECTION_STORAGE WHERE ANCHOR_TABLE_SCHEMA='tpch' order by 1,3 desc;
ãã®è¡šã¯ãäºæž¬ãæé©ãªæ¹æ³ã§äœæãããªãã£ããšããäºå®ã«ãããããããVerticaãããŒã¿ãå°ãã ãå§çž®ããããšã瀺ããŠããŸãã ãã¹ãããã»ã¹ã§ã¯ãããŒããããããŒã¿ã«åºã¥ããŠDBãã¶ã€ããŒã䜿çšããã¯ãšãªãé€å€ããŠæ§é ãæé©åããããšãè©Šã¿ãŸããã å§çž®çã¯6ã§ãã
ã¹ããŒãž2.çµ±èšåé
ããŒãã«ããçµ±èšãåéããåŸãå®è¡æéãäºæ³å€ã«çŽ30ïŒ å¢å ããŸããã çµ±èšãšã¯ãšãªå®è¡èšç»ã®åæã«ãããã»ãšãã©ã®ãªã¯ãšã¹ãã§å®è¡æéããããã«æžå°ããããå€åããªãã£ãããšã瀺ãããŸããããããã€ãã®ãªã¯ãšã¹ãã§ã¯å€§å¹ ã«å¢å ããŸããã ãããã®ã¯ãšãªã§ã¯ã ORDERSããã³LINEITEMãå«ãå€ãã®ããŒãã«ãçµåãããå®è¡æéãé·ããªãã»ã©ã³ã¹ããäœããªããŸããã
ã¹ããŒãž3. DB Designerã䜿çšããæ§é ã®æé©å
å æ¬çãªèšèšã¯ã21çªç®ã®tpc-hãã³ãããŒã¯ãªã¯ãšã¹ãã«åºã¥ããã¯ãšãªããã©ãŒãã³ã¹ïŒãã倧ããªãããããªã³ãïŒãªãã·ã§ã³ã§äœæãããŸããïŒå®è¡åã«ãã¥ãŒãäœæãããããã1ã¯ã¹ããããããŸãïŒã çµæã¯æ¬¡ã®æ°å€ã«ãªããŸãã
ãããã£ãŠã9ã€ã®è¿œå ã®ãããžã§ã¯ã·ã§ã³ãäœæãããŸããããæ§é ïŒåã®ã·ãŒã±ã³ã¹ãšããŸããŸãªå§çž®ã¢ã«ãŽãªãºã ïŒã®æé©åã«ããããã£ã¹ã¯äžã®ããŒã¿ã®åèšéã¯ã»ãšãã©å€åããŸããã§ããã ãã ããæ°ããæ§é ã«ãããåé¡ã®ããã¯ãšãªãããã«é ããªããããã«å¿ããŠå šäœã®å®è¡æéãé ããªããŸããã
ã¹ããŒãž4.æåæé©å
ä»ã®ããŒã¿ã¢ãã«ïŒäž»ã«ã¹ã¿ãŒã¹ããŒãïŒã§ã®Verticaã§ã®ä»¥åã®çµéšãèæ ®ããŠãããŒã¿ããŒã¹ããã®ããè¯ãçµæãæåŸ ãããããããã«ããã¯ãããæ·±ã調ã¹ãããšã«ããŸããã ãããè¡ãã«ã¯ã次ã®æé ãå®è¡ããŸããã
- çµ±èšããã³ã¯ãšãªå®è¡ãã©ã³ã®åæ-ã·ã¹ãã ããŒãã«v_monitorïŒquery_requestsãquery_plan_profilesãexecution_engine_profilesãquery_eventsã
- ANALYZE_WORKLOADïŒïŒé¢æ°ã®çµæã«é¢ããããŒã¿ããŒã¹æšå¥šäºé ã®åæã
- ããã€ãã®è¿œå ã®æ圱ã®äœæã
- äžè¬ããŒã«ã®èšå®ãå€æŽããŸãã
ããã¯ãã¹ãŠéèŠãªçµæããããããŸããã§ããã
次ã«ãåé¡ã®ãããªã¯ãšã¹ããæžãçŽããããã¹ãŠã®ãªã¯ãšã¹ãã®å®è¡æéã®çŽ30ïŒ ãããããŸããã
ãªã¯ãšã¹ãå
ïŒ
select nation, o_year, sum(amount) as sum_profit from ( select n_name as nation, extract(year from o_orderdate) as o_year, l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount from part, supplier, lineitem, partsupp, orders, nation where s_suppkey = l_suppkey and ps_suppkey = l_suppkey and ps_partkey = l_partkey and p_partkey = l_partkey and o_orderkey = l_orderkey and s_nationkey = n_nationkey and p_name like '%thistle%' ) as profit group by nation, o_year order by nation, o_year desc;
ãªããã£ãã€ã¶ãŒãã³ãã䜿çšããŠãªã¯ãšã¹ãã³ãŒããæžãçŽããŸããïŒ
select /*+SYNTACTIC_JOIN */ n_name as nation, extract(year from o_orderdate) as o_year, sum(l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity) as amount from lineitem join orders on o_orderkey = l_orderkey join partsupp on ps_suppkey = l_suppkey and ps_partkey = l_partkey join part on p_partkey = l_partkey and p_name like '%thistle%' join supplier on s_suppkey = l_suppkey join nation on s_nationkey = n_nationkey group by n_name, extract(year from o_orderdate) order by 1, 2 desc;
ãã®çµæããªã¯ãšã¹ãã¯çŽ4åã«å éãããŸããã
ãã®çµæãDB Designerã«ãã£ãŠäœæãããæ§é ãš1ã€ã®ã¯ãšãªä¿®æ£ã䜿çšãã2ã»ãã·ã§ã³ã§ã®æå°ãã¹ãå®è¡æéã¯531ç§ã§ããïŒæé©åãªãã®æåã®å®è¡ã¯581ç§ç¶ããŸããïŒã
ãªã¯ãšã¹ããæžãæããããã¢ãã«ãå€æŽããããä»ã®å®å šã«ãæ£çŽãªãã¡ãœããã§ã¯ãªãããšã§æ倧éã«æŽ»çšãããšããç®æšããªãã£ãã®ã§ãç§ã¯ããã§ãããŸããã
çµè«
ãã®ãã¹ãã¯ãç¹å®ã®ã¿ã¹ã¯/ãããžã§ã¯ãã«æé©ãªããŒã«ãšå®è£ ãªãã·ã§ã³ãåžžã«éžæããå¿ èŠããããšããã«ãŒã«ãå床確èªããŸãã ç§ã®äžããããå¶éã®ããtpc-hãã³ãããŒã¯ã¯ã次ã®çç±ã§Vertica DBMSã«ãšã£ãŠãäžäŸ¿ãã§ãã
- ãã¹ãŠã®ããŒã¿ã¯RAMã«é 眮ãããVerticaã¯ã€ã³ã¡ã¢ãªDBã§ã¯ãããŸããã
- æ£èŠåãããtpc-hã¢ãã«ãšãªããã£ãã€ã¶ãŒã®ãšã©ãŒã ã¢ãããã¯ã¯ãšãªã®ããã©ãŒãã³ã¹ãæåªå äºé ã§ããå ŽåãVerticaã®ãã¬ãŒã³ããŒã·ã§ã³ã¹ãã¬ãŒãžã¬ã€ã€ãŒã«ã¯éæ£èŠåã¢ãã«ïŒã¹ã¿ãŒã¹ããŒããªã©ïŒãé©ããŠããŸãã ExasolããŒã¿ããŒã¹ã¯æ£èŠåãããã¢ãã«ã«ã察å¿ããŠããŸããããã¯ãç§ã®æèŠã§ã¯ãDWHã¬ã€ã€ãŒã®æ°ãæžããããšãã§ããããã倧ããªå©ç¹ã§ãã
Verticaã¯éå°ãªæ©èœã§ãªãŒããŒããŒããããŠããããéçºãšç®¡çãæ¯èŒçç°¡åã§ãããExasolã¯ãã®ç¹ã§ããã«ã·ã³ãã«ã§ãã»ãšãã©ãã¹ãŠãå®è¡ããŸãã ã©ã¡ããåªããŠããããæè»æ§ãã·ã³ãã«ãã¯ãç¹å®ã®ã¿ã¹ã¯ã«äŸåããŸãã
VerticaãšExasolã®ã©ã€ã»ã³ã¹äŸ¡æ Œã¯åçšåºŠã§ãããç¡æã®éå®ããŒãžã§ã³ãå©çšå¯èœã§ãã åæDBMSãéžæããããã»ã¹ã§ã¯ãäž¡æ¹ã®è£œåãæ€èšããããšããå§ãããŸãã
Verticaã«é¢ãã圹ç«ã€ãªã³ã¯
- ã¢ãŒããã¯ãã£ãšäž»èŠæ©èœã®æŠèŠ ã
- ãšããã ã圌ã¯ãã·ã¢èªã§ã®å®éã®çµéšãããããAlexey Konstantinov ascrusãå ±æããŠããŸãã 圌ã®ãããã§ãHabréãšããã°ã§åœŒã®åºçç©ããã¹ãŠãå§ãããŸãã
- alexzaitsevã®çŽ¹ä»èšäºãšå®éã®çµéšã
- Nikolai Golov azathotã«ãã Verticaã§ã®ã¹ãã¬ãŒãžã®æ¹æ³è«ã®éžæ ã ã¢ã³ã«ãŒã¢ããªã³ã°ïŒ6 NFïŒã¯ãVerticaã«ãšã£ãŠèå³æ·±ãäºæ³å€ã®éžæè¢ã§ãã ãã³ã©ã€ã¯ã Higload ++ãHPEäŒè°ãªã©ãããŸããŸãªã€ãã³ãã§åœŒã®å®åçµéšãé »ç¹ã«å ±æããŠããŸãã
- å€ãã®äŸãå«ãå ¬åŒã®ãªã³ã©ã€ã³ããã¥ã¡ã³ã ã
- Verticaã«ã¯æ¬ ããŠããããå€ãã®äººãæ¢ããŠãããã®ã«é¢ããçãèšäº ã
åæããŒã¿ããŒã¹ã®ãªãŒããŒã®1ã€ã¯Teradataã§ãã