From b952203a156462b79e3109e46c2cd95b4bcb16d3 Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Wed, 1 Feb 2023 07:29:51 -0700 Subject: [PATCH] update README (#21) --- Cargo.lock | 2 +- Cargo.toml | 8 +++-- README.md | 30 +++++++++++++++--- docs/sqlbench-h-per-query.png | Bin 0 -> 20787 bytes docs/sqlbench-h-total.png | Bin 0 -> 15970 bytes ...-h-workstation-10-distributed-perquery.png | Bin 34891 -> 0 bytes raysql/context.py | 2 +- src/context.rs | 8 ++++- 8 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 docs/sqlbench-h-per-query.png create mode 100644 docs/sqlbench-h-total.png delete mode 100644 docs/sqlbench-h-workstation-10-distributed-perquery.png diff --git a/Cargo.lock b/Cargo.lock index 8fafcf4..29477dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "raysql" -version = "0.2.0" +version = "0.2.1" dependencies = [ "datafusion", "datafusion-proto", diff --git a/Cargo.toml b/Cargo.toml index b77c1c7..6c2f47b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ description = "RaySQL: DataFusion on Ray" homepage = "https://github.com/andygrove/ray-sql" repository = "https://github.com/andygrove/ray-sql" authors = ["Andy Grove "] -version = "0.2.0" +version = "0.3.0" edition = "2021" readme = "README.md" license = "Apache-2.0" @@ -33,4 +33,8 @@ name = "raysql" crate-type = ["cdylib", "rlib"] [package.metadata.maturin] -name = "raysql._raysql_internal" \ No newline at end of file +name = "raysql._raysql_internal" + +[profile.release] +codegen-units = 1 +lto = true \ No newline at end of file diff --git a/README.md b/README.md index 27d2b6e..566b4eb 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # RaySQL: DataFusion on Ray -This is an experimental research project to evaluate the concept of performing distributed SQL queries from Python, using +This is a personal research project to evaluate performing distributed SQL queries from Python, using [Ray](https://www.ray.io/) and [DataFusion](https://github.com/apache/arrow-datafusion). ## Example -See [examples/tips.py](examples/tips.py). +Run the following example live in your browser using a Google Colab [notebook](https://colab.research.google.com/drive/1tmSX0Lu6UFh58_-DBUVoyYx6BoXHOszP?usp=sharing). ```python import ray @@ -40,11 +40,31 @@ print(result_set) ## Performance -This chart shows the relative performance of RaySQL compared to other open-source distributed SQL frameworks. +This chart shows the performance of RaySQL compared to Apache Spark for +[SQLBench-H](https://sqlbenchmarks.io/sqlbench-h/) at a very small data set (10GB), running on my desktop (Threadripper +with 24 physical cores). Both RaySQL and Spark are configured with 24 executors. -Performance is looking pretty respectable! +Note that query 15 is excluded from both results since RaySQL does not support DDL yet. -![SQLBench-H Performance Chart](./docs/sqlbench-h-workstation-10-distributed-perquery.png) +### Overall Time + +RaySQL is ~30% faster overall for this scale factor and environment. + +![SQLBench-H Total](./docs/sqlbench-h-total.png) + +### Per Query Time + +Spark is much faster on some queries, likely due to broadcast exchanges, which RaySQL hasn't implemented yet. + +![SQLBench-H Per Query](./docs/sqlbench-h-per-query.png) + +### Performance Plan + +I'm planning on experimenting with the following changes to improve performance: + +- Make better use of Ray futures to run more tasks in parallel +- Use Ray object store for shuffle data transfer to reduce disk I/O cost +- Keep upgrading to newer versions of DataFusion to pick up the latest optimizations ## Building diff --git a/docs/sqlbench-h-per-query.png b/docs/sqlbench-h-per-query.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b75d7d307a0ec0c0a82e24721d1fe788f32549 GIT binary patch literal 20787 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�!}nB|1Jw^~4DUd3jC$iRul%okv=dtdk}aGYZ~xCk77j=Z&6} zZD@G7NcH%~rRD2>YCX>p=yt;*IhotCDZ_I7oMi-;vYlb0W2<3>W~3Ld$@83?8xawj zAzZ?PoUM($eSJLp_T}s=OuYB{wZcKKMNXW?S_)dCx97$B2M6!v7vs(K8`8b3^PMB~ zcb^h>{HATtZC7`c2rXZJv?M&#A1o{Ee%$@Qssl zX&-ANs(ZmG!k?gbmh3><+l(e+k1?2T1_qp+7W1qTY_YAbTm173J(9v{aCdyy!DvZtI5(TuhU{LuTRk8Nw(J3c;!k zp7Z|uNDAxf6__vZg}G-DGa}ny+rd1-UgAI_9%F_@=XEXUPu1%G7RF?S-sr-=0Fsdy zjXeH{U0qsm2A*UjI*IGAoh5(zHdD&L^^R4t87AtBkN{EBOg!jljD6RHy04pSomOWJ z5DmMeY14CKVwQksf|v_5|CZWhrU+$+CkI_u!gVb+dd0y3_j@HdE|d>bh#<*M#LlCj zv4cOXUsp$G8(gzOLPGH)2*FL5HL)FSJM`~jsO(T&T$~AJ9YPF$HXAdu5nv4a-V4FW z|J58le9v0|rv4RdN*x^?*I@o4>I!xS#9CR>3JrbFRSn+1+zKQs_A(mm-Mg3YIS=<) z$wR(IKvN714CYbyiGLaP@yf(I%lAQ7A>YUsq!wN#J&UN5G7n##2Yr5Ft{m&;H1n_4 z-#C@Qp5AV%`D_lXMj7-M()q;7lMM@|7lg-5Ea^Nks6%nG;ULB zYz(uK#kHJAyZIcCeFK{e2D$8O?cur-_C1L*N!6vE>auGLV%?s0Oi1^Pw5>UNIV<*L zp_wK7M_pN$s5bDCo^n33 z_HA3iIW!1K=_OROv9rFTbJ;g}3lt^;{)JI`KE7dON)~u@PcFG@?&@$?fDq#)&d^(@ z4ZhhcN%yQ=dU#I`#Q-cBhd=Lj4Q(kwpTw)C|GQZ-ZO~k?Yy48|86-G4Yj^zXce1#3 z(YBiOu{V7F=iu58w06bZK_l&Q4W(MULylUU)r}dSSUSS1Er|BvdxV@!1cXj=f$qY@A_UVKN$*32l(1G|T$sf+G?>8(N z%ztfGyKvyByE7fsEWWE>+P3(_&NJY$uhhs3FNed-|Bd@0}f3mSQ!ji$x=2M|Ln44@kwTDA?Sc-FNX3 zdRXDm{@Z*~kr|!IKN%bFn*N^ko=+c)aw|MYkSR)+j#Y{6&@Z`hlQ*@?yuT{^e|=r$ zjIz%4f-PqCJ>5Di9vfn2pUMO)Sa{El74+dt)ucIQ`2+%eEWJuy2P=+l5A?z9W9dkk zy^$6Z_Tsiw-qiF%<<#)EH)N(uWXx@O3qX+dH)ZkyRuJ9!p!?K`)*WhxcJ?LAmg#KT zY4fS#T82G~>>bG;+#*^#wel4-Hq`rP*c>}FlXh!XA~E_QOpb6#nt%j9di=OIaw&M5 z)R7m7TQ~la*xYUU7a6>x?sy7z9GsrICt2gOOXLMl=25DyeGBW+s5p@ zzFjYBce-aG`Op5%H@^Nzj3L#vQaF-k{AYZu`tW}l=qwV+0RyaET%=&jWzIc$;)Icf zMG*Y#5?YE+x0?C21T_bO1`!bG(W+}>5XWhP!G&lZzYi|>p5ET1W%&h?4wD=M#|MRQ zqEEuIGBaMq#bQMm`uY^@S~5iSeY7ca6=vxYtC>g&>o4v5aNkGziiOPMbUCWlIOQ-C z2&{RwohvD1eu@knLIiMd;HYyj!xYjq4rWPWc?fQ@jGC-fKScMF%obM2FYl-lgnIi?2S0NkY#oQO6I>LqFj2+y(tSW zz?RAdkSXOcW1BXeZBfsUQb%TYKq;dKw@#aM#AF_P2e05;MdctBAZ=2U2c#bi=in6e z(k459{2*Q)*vcwDr>JxW3Sx?o&{E;yjQR!!j4=HREGQ@{?mo0DNrMJ&wo8Y>^*i-;K!1aT=--sOs0%Q#sQ$lKjD2W{@h1CqE1pj;YSmEK07?}fruYF;r zB5u=0TIR!ccA4)NBBo2!)V4@O+`jFNJ|Y&a`|)8Iq0#wcIAt9n7NM3VwrIOfM$Q+L zPl9r)gcCsVk9*S4!Zb{uw~lV7UcX*5KVu@))YzCC^fHlR(dL@8mw56|Yqr@DszZ&AiWv#bE(QoPi*82)7P^A$6AY^fR&Z<^g>Bmo4lAg^B@J`?J!V9J z%lu(o0aRiIKUx8e(on$D&)?q^<_jtN9%|5tWE_x+mbLDLU z;~67jj4-AOo>xuObtW@~z+bhA2rs`zM*U9WW@ec)?#Qf6kQiCV5UR#N+olM|j zt_|#k>D<&X|DiJg=KLw2%u58;rCcDAeN%6c(;3IKj37C<8f2*>$ak_39ez9}%-D z{Zb{f`hA_4mVFMx>&QiUX4fWn;gn=JSHPOIN1pmMu zVug$^Au_Nku*u?J6Y&iKjCn5YY;aTjDACD>RQ zAOQP;7nNgJjp1E|{_nXN9sT`$nB${{Tbp6E90RN$0`OD5s;pFmD76vG>I>Lgxp>^V zy~ys25UX_PO(U%DLI@S1JUpPg`(1dqFLc$m_4lPp1MjQ|F-7a8dV@x)d zBl;CwM_?9VxqSKZYE1BU!mP4!XlMxU^F{E`;E3v%bCD-HVMx+U%D_fn2f{}l?p{C4 znXN;M!3HkP7aDgbj08c$&>Ws6#y#WTk7c69Qjn&P7uJ^3q%l42xlaC1l^s4@4gjsu zwv_VzKq$I6?~srXP}&MVQ(koIm`n|QD~HQRb0njvd!{$ikOmfE^~=*>iS&rONnwy1* zz8iWiINtZl%{bG$FbxMJ!{X@DqADhM86k1;534XFdvQ|9F<||C(HZa$FKJ3hhh_u? z2Q#C7_!bov9iK~nXIEs~>5XBjwUxt=@Mut-G~KN04~0Uw@djN6&mIo3I$vK1V^%cC z2B}#j$#{4a*ObC4{aJcGn$5Nv=b8_za=l*?Ewsn}b z-q_~)V+#sV%m*u6U%L9XJwigPpyXMuJ0SwSalIJ&&d4&jaN*hVK#1Ri2Z{Ystjx^R zNR-TQ5Gt-KVA)b-Q}Ra%liF-(a`=#f^)cpiqsu03Cn5_VfJ~$B`hbxpGR0Jb^uxd8 zuNRd(e+cp&4X9667$6ZSvE42Z9*L}sd6OVA^lOY}rX1IA*`lpjH9i?V_j};Xifbgb zsZA{lVW+aL->BH9XrBKY0acy0-HPL>CVtG!U>SpaGv#S&IM{1U^XlOUM zhJ=}==VFKwNUq*UQp8sSza1?UDOOlu)Grz0ZzM9H{PXnFcyE*1zn=!zpYl8-d8;xu zsZHsE*0^!eKEp=u(~Cckp+*EwOdQrUY&7Yp^Ro~U7x&#pO+;v9dlAoBhdnyaDF|yN z9UXQkgzG89Nr}a677Y#f|l=#wNO0!bi&OeGjA?-o{!$Cws-$oX^uNFvG&3em8%7k_Us(K z@z$)!cHQdNitDt&h=pEM_+~aebbJ1jhwR=1s~%NfY4iUTF z>(8c}#(JgiLwI|hHHPDe@?P_Ek}&hw(*^oAz)t2iHj(z+%C4@`#Dxk}^jFG5adOc8 z5hB@kO({-JQIU#}Z3kF8q{6T>pkq`*$LrS$*5mB81C2p+m6C-iy+;RKnUJe0;7;W| za4+s)PF7a*)2FMk?up6CBvlb@Ah)^i!ymMXN<|az1+16uuqwMgg0Y+!l`w;VX>%gz zfiSqWrCMz(CcT0|;dH{A{ruZy*yj8qBO_J3wmS8BjAF`En|R;{+%Zd%ut?XmIb-vb zhNh|?otTtlm-o2P6|~4fSWkk%5A4q_d34Z1oC6BK34GF|MDKdy(N#Bh z?a{$CYuECEO#pcy>dQdfU=Ym;hr2)Z;lUX`}eQwtuq%VPmeGS zJG3U^xF4v+yActckY~2ubp9c2^77kr%=lsEr#iIrL@M0>(U6L9c4VLvCBMb3;hWl4 zC<#GGC?-Hn>=G8t!AiW>K6!q7yl~(P#F$e)GHF_5)_c^x$lbNowg-+G5>$YmPy zoYmhBwoSmr7*kTR6-5rci@kKzUMm$m)Z<)+@`)3{U#oUV-cyQu1@dehzOf@n6+rEH zFv4r7rUpU17F(el`{Aw}FnC*i={tI$=YZV+muqmMBpRRr7Ye@ZeT^q}ko$+~E()mP zft6#&OkS35no4HDdsBEepb(FNz1@a~VjTWFX{kMT=RhWB{i>*g^cOR09BZ30O^Fe$ zuCb9;6I#UzWEu2PngLS)! z-iNiuB(8bF0kM&h_NcM3u~TuSkVzkNcr-su$HvssDo1>Qql2N+Y5%=P2d^$nHh%fA z77uwSzr91nw!elup)0>R2TCI0@Ap5Z$3HVOGnbxl<FwH+&}T53_APOiV3^XXFs4wek96toTW2z&Uc>9}Ob zGdfn=UJ1GlSyI2mV-x(p$V^{$i5H&}KFRySrd=jcga6Xf@bK^#W`2-#ua0auo~)c4R?>bUBU3u6g-c(oGvP3dSCFqhyTy4|GNDeU#k#t>3R=^1^(8r77ytY~|Kbgtn_&9xqbWE=?57&Yn((&{wd7-* zl(E%%*RC+2N-WZ?^xbe}!8@muyP$8qbt4nga|kq8ta*IH41$h`_5R=Ae(V-ZpSmLL zily6rb*6LefbePL8{(*S*l&=V+0!!)C$$ph@yTE{o;rb9tCH`Cf~J<1U^D@s7+SNR zMD;h?&z^D4?5SH7B}1PuIdi6r2D$Au#!f1MGb_=SDQalkB}}O=gXCIv@^}IcW7j#K z8K8L;9Op0}3ZkhVTgrvh2Kb3@nr-rYJPvm4 z{Dp>-8bkdtS}F07-!3}|Xq`G0O8jVOz`M|7u;`{~xdnIuhwz{unwguUefez<&|FJU zFJD;huewy)sR`s6MR|E|V%Nr@F;rTvS~mjQ%F*Zqr8j2t0K zm|O{hr6R%P-61Y04pbEKbeV)MYHryuJPITVyTAOrSRh)*g!Z*PJ(*AUug44I<7%ZQ`?}YCh`T5fR_wf#+dcYj??1|)jkX>-^3K(Pg=?85;!!k-SvJB2 zJ!L8nalKEd^Z>WrZQxe%^RGX?mS27v7;~WCvYl=>6YcWTz|^<1{(TzQ(LH~k1{SXK z*H6Qf`Io`{?>RtSb#_+PHc?SVIXOARB^FGl&`I#}zVF2{;ykhEhD+Q%DGCbb+rgBP z=TzY_G)5SEVBdF{{kV$C_!kx77$hw;!6l9UM-}QU$Ke-H6VAaw&6;F#jH1GpjT@|Xc9SV*A_a8kyM!^4sLPXuT z4pqnqtp$aG=W5^>vFYjbc}zxb)q65U~v^$Znw<7z6<@6vqF)W z{EkUVde=Ec97fQk;qQX4Hw0E>UI76WUF%F8SP-dRexpm%x(SyEn z{@1a9e6bo%`Kef{4F|`rRSfIt>W;ly%T;D1f`3LZA|ZKynE=8029IF_^FqcZadqQ( zFoxSRMg@gwY6L~>xjh)4#WNOWKvNx9m@oIECG^bBQ;$fhfNp+7x1qV2-}BJ{x=PTLn zaVJcWA)Mzq!gR0_{XA(Dk)q%|S&0fsQVFqPUb4tU%`F-$rzOucBZJ5oA*SZ0wCr&Z zWTpLZVK16wJmp0c{aE2Rcvv+j1#DzbEpVL$ zwszRR<+oe0I9K{E6b#JMFsmM#WX9U|XD%=?wyJnIEYGPh2Ri@1+>M}ugZ_{CU}+WQ Y=JTcaOB>tq)I-WK#ZwCD@ literal 0 HcmV?d00001 diff --git a/docs/sqlbench-h-total.png b/docs/sqlbench-h-total.png new file mode 100644 index 0000000000000000000000000000000000000000..02bbf358a8f1700a8945b6313fa9c40547bc8862 GIT binary patch literal 15970 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 literal 0 HcmV?d00001 diff --git a/docs/sqlbench-h-workstation-10-distributed-perquery.png b/docs/sqlbench-h-workstation-10-distributed-perquery.png deleted file mode 100644 index e2cb062233786294bd49bacb4bdf19c55b2c459c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34891 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 qlC&&U+p5iYZvp@R#s7 Self { - let config = SessionConfig::default().with_target_partitions(target_partitions); + let config = SessionConfig::default() + .with_target_partitions(target_partitions) + .with_batch_size(16*1024) + .with_repartition_aggregations(true) + .with_repartition_windows(true) + .with_repartition_joins(true) + .with_parquet_pruning(true); Self { ctx: SessionContext::with_config(config), }