From 65a4efc2f266fb33bef1cdbae64ded1fee447153 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Fri, 21 Jun 2024 07:30:04 +0100 Subject: [PATCH] Autosave: 2024-06-21 07:30:04 --- .zk/notebook.db | Bin 3829760 -> 3829760 bytes ...DynamoDB.md => DynamoDB_data_structure.md} | 63 +++++++++++------- 2 files changed, 40 insertions(+), 23 deletions(-) rename zk/{DynamoDB.md => DynamoDB_data_structure.md} (66%) diff --git a/.zk/notebook.db b/.zk/notebook.db index 8a6c79a4acff179fd54e2ef932fa670604e232fc..e5ff35dadb96bd39a4d28b3fd3412da4ffcaa9db 100644 GIT binary patch delta 24530 zcmeHv3v?V;nP%TxRsE=EcdPY&wWZSg)!lluB*%^)u^l_HW5w10w!)afC&tHm|=&EIm0@qu97+5&$Kqe>5F3Zl$ z{{O9(+$~GCoP^=*94jezbywBBx9;P=-~Zk3zh_?iIXMHz)0IlO&Bi@%v)LNpXnCeN zOv*n${7H@Xx<2Q+ideu+2t)n(2hQ8!y#X)C%OU7w)Xx zV~1b=ITO0HP#f}B{!wzggy*{GWO6n>GZamZkH@34iR9#rz3tL#cj|s;NWDVffs2>q z;q4kpE$mO4r0CKwlI3patM;cLY5L0r`AnDaxHv05y0GQUKQ8nd30=8MsZzXRzu2h+ zl*X0+TX@CjyY!~{>Y^_&u^ffL*K_Q0;K;x*%`mE<$bMAy75_d z&qC+>N*CV$z8W%i>9g`O;6{VrTGrR!Mj`JIG4H!P%4SjM{AEz8~U!a7K@?GotLV ziGP!O*0!77$1=Ohe#7GZW$r4ie-h7}%ExUYJbP*810SRg`}4L}`8MBz^Xb6C;L~p` z1fF@cNBXJsL+N|cpGjYm{hJ}U}h@L z!)YfGDSR{$Cw};e13$_M&#v2fA`_mn56=3a)YV{fTzd1vK`OiMv3ZF?Wq3kd2!5o( zCw<0NO5F4W=AjY|lX6@d`p7PJi$=V33V&I6`A_=Wq<^(Z#7E^bwpNyWDW2An68tE$ zE_g^0eiIkUK6;GIFP#18T$#j^5>gsCIToL`=gyDC=V$m!o{#ykN`%UUbc&p9gx%wM@|2CTdx(t|6QPuF=HER> z{AB9#1>(3MG()rAYs#BwtKD`H&c9*av5D>o8gTk6IEJ8$B_N@Fa2$eT7Jj=6j-7C9 zg#+(_duhpXyrwmNcxHj!Pnb#Pz)-*Ye5HUCIE z&tK)?5a6&s&tG-;xzD&B%{pFp+(VqMCtZ)bX5s6Re{{H=&5ozqcpD|;3oge~t=8EA z$5SoV*>1;E&DNPc`-i`AB+s=#USZpJsd`xTDBmHUP|n&vD*rF}CGvB*PWrFXZpkjb zBEH-855#A-o^e*DzH8U)KUOx_AD{v9ppX{UyDIoMo!j{r`BA=>`vJGW-Ro%O1bT&@ zloMjN^sMx3{@d7W+j&Ew-QoUtI2s8B^f08|dy1kBs&Odivudqoe&JeSM)= ztUKBl9qI20gt~)~o`J|{IO>W=djmZ^QSycC`7=(LJO6`>6AoAQ2N|)g%D2Bx^ymIg z=gv-N&%7x90Wqt$1fAKx_=MO&%@;pYRO*3l)9#;)CuX55`QabY{P}^-dg3>g2Rd7c znBDiM;-6EpH%kt8{)jf*6QAEaJ3E~inFH%sH|T$irCzr;GCi9>D+$-@22Ju%XV|>& zqF7!Amru9DKXrT9wWVjx@4eJnWPbgkxY>N^qUbl14|d+o#V2Ft2QG?Row2#;2&RVL zD#;!*a#3uOV)2>ibYg1p_pSVVJTh(m?M1QOoO(g*z2jZ*b?0O(eyR>L#J{?gOUo`T zEAg2NVyzt$tZO%~z91Hx7cPpL`Rxm$Cf4mwPS0BJ1$TwaAHE>E*kuJ1DyZIP$mSov z z9gjuG7tTNa6FK|%Pn7g`J~iCnzWj>H`zu7^qUvd-MzZl=a|N7b!bR>yx`ViE-&^>` zE0@ggy{7hO?|q^5i`@CI{k;l@mi^k_ySM$>_E;ZeG1A`~?2g9zW6@}IB-R%QcaMbo zdZLk@aBv{j+tb(G8;FjK1Y$ki(fGhXZzLRwL`Ngtfsr`*0vi?PzK+IC=b!wv2M#YB zMcF4m?K>4tDKLVFO}E+f$oT$vG&vcIOwY3>XMOQOZ1(34So05W`+B?0rv5|>90R); z9g9yyG9kiqv-4B%NgU&mnc2z6L?+}S)HuS?*?7hWrx}gX_^kEoG{>EYk7s-e+~G;r zQ!|qg%FRD+(HnN2#;3d-ote$}N(p`ZtWr`XCaMMYdmZJHkyyr8MCcQT*7+2d3x6)} zc9D%Z8PEJZ7J%uCG zSu51I;In=RzZpjb%Ecp-nUI6f5{{opPA4)xJU-Q!0x4N&?$z8|ISrDWht#23jL1 z4=OE2%|X{tHB?xK==RiV?bWJN5lo3)$`zgF3HeGUS@wQ@Z`m9s~MGx$o*fIp= zGDtH=qO2wOZD-h@FAvwGey!aL4R&CObG)oK3cHoYcA=}D_Whlz74G93W`3cUsk4Y)Ku z2{i}L-;E8NaB4i(BwRaRFVF<^TgdrjOOeN62kUt(4h4rvKE1Dr+M|g8{IL=~v8|pu z;?pz9$po}1zHaFjo}Y~*phjGzoIbIh(nRd62arOLC4O(;X~;5WZg1C{)?w)zSPKQI zJvlRz7=cE`M(M*=oaZ=ms$Fj@7ZMW@=!_v~f<|vyy~`zO2irWyd1`*FUEe@Xn^(hn zStlz`W!iCCgML%*RVAK(6yP>1Rr=mOC%y(7v5-NAm_KXRqgF>AF+X@-uL>WZi(@A6 zw8z-kQp9nI=rLA52MIqNnLKKBs2)z3O2ihMQKfeC!4AE39Z#&1r`L1bcm(PZDlZc; zwqf(xJ(>C;^YiC*pSjSXH^@9U9iOq9smJ_Mhu+c%6_2BCP~c$hW6z##NQ;~RlVkjZ zRU`0}`9_Dn@xWiI#R;O*skb91L&DPY4m%!fMlF0c!5(R^R0ewWBiOj#rC-R5^Y^-zOA zXUEQZ;MNk3LSeC&7`=tj`PQ0oFDm$UOmdp(k4oAs6v8nABCQA6p9E>kMQ_3 z+O^QJ<7cDgd<|55`henBus;l|cA;x#HaTT=bnS_~b|HcDG1}cl`+9CYmiUnQAHJfO zsdO4fJbZ1(o+Fw6@hf_uMxcwWrt!jDbau`%02vqdJKp5Js)q$U)y%=K>gR*Z;KrS# z%Nhln2$U8(B$Uz7I=FrBx=w+QFWUL^9vF*%^;Nx^2xixldT|TOeHZ5b5F1GFREuUz zR2+N&-^^%#*l5BxJLWO}FXWr5>4xi)ORy{U@>#rW3xcub>Q>~v7!b(?l%tdWP%kvoe=n$`1lFdOvOA} zCv5DaMs+5|TJ~N(#p(;%uJnkpWr*0h(Ilh>g`YnSO=vvC(-~+dNH#;Z;Uk$2E?0<% z(R;S1rJ)8>EE0`Jl_7Y&)~fbO5n2>x7P#4f=_v`%v!M*;VD9LcWm(RJvBd^Ce)?EE z0#*UO@WP_0E}>ik`!5vgh@o#~ooAOIfR(~w3CX7Kquj*YDK@higT<790c|35NR=z@ z>pF6*s`gmTU~*HP7suSe(S4Oe@L8r9HuJk*)0=l;>&|WjgP3F%;dpwGa`RJGe(5f! zfKMIp8^?$^2OVvCW;QYj77erQ2UBo-jy;t~Z{&&TyrOTbs=)@)?rxH#4a|a7b2O5( z5xwT_D|%fGwo1BG17n&?sDg5{iE(S>15CZ5H{QWT#vx^>%gqLnj9oAT=U&!O0AD1c z*3G?OL?f(fGp*QRtFW83na^F(E0_t(RGMGDqW4NLzgR=fc*OkW6}>dYy0j`#up-Rr zyLr{=mL%1!NRqd#)TfG~BER8;QvdSq29mfWJ^@hTokmVHvOTUC2yze|!l zMY5*4Dpb`idc30Ic6$_url_Sp*{haGUa7TI)yid`tQEsNDJiO!lDuM-CM&Y+mK2w& z%8IAP>-7{X#SLy*l~q-eL@#76tEG}$>lWP-WKbeYMP5ZLQWT}!<7*bZN|EGs*F;Oa zqU_T=-a1M4%A!wITHK09E-6yFq#8-CmSja0-LhOP`@~{Nl4Or!J5OKt!BGrHNtV7| zO5G&zA)%~^s)s(*UbbH7pzz2%LEM$K{%9>@e!}O_TJ2&_D^p5uQ2IC_m z1EYahY^0|<66p{0^u-58Mq}aNNPif<^oINTdcq@pJ)@!Ca4Zz;i^Ky1BR$b@FM#2X zt7UMM!%+c8W%lE0)o(WoC*}9cM)u=-t6r1Vx$JE&o)SvFaKPT0JKJq<$(`Bl&F7zc zs0xm1IBMXig~JcWy6kfg)y02I+D&0oeYZKdsXmY$+f={XA-Ep0Z71fdyX!Y)|Id#4 z5yERTwjJ5wo%MfecL;abggf|8J+ryQ`P{+h4m=I~NVauvy;n$m=#HltZ^GL?`yQK3 zw5frv#Kh6A*gTlKWNd`lHk}ZFz4e54y0$mkCA15-?@K zU`p?Ib@ALBz*IzknSRR0VhAhnODAPL73~Xc;b=$Ff>K7AK&&xj90o)QBNfvL8kHPB z8=ubI^B(i-`zuOP+Yxm!3-cHUh!*EcFV;+f9s>CiWJ$Ev->#R-tThQ;V&gQ zM9Trd9}mJD41bb?@+Tq*cwFoo&e&vA39am%O~_Ygi7nT4JKMvQA|Ga9^IGh*YCxzoCo8T&BoDNeSy?OkS zqUod5vD80{2@E1iotuml;p5-|v99x=nBG7I$Ss%rosc(j6V^N4NBIfXSZJr4?3ALx z#}4;^yBQn|Kntw)s-a6`Z^A409PFpUsR%%#6f1w)+fIbh_$=m!1+1qO=Ft%N0!Fx| zTN^miqVjw^an$Om)jZ*j<~+j80V<3qM{smteWx7i%%T^X13H-AG^I1StXqsmLdT$< z@%9cbMQ5x$4F?C@AS>P@L-PGNgTOaz=k1hFo?OI_n+eR{tP}Nl3_EqiU|vm(!cS1e zkD?32%3s6=6}05K?c4W)SI05P1r2FDVHIgN zv5;jLoKW6{@L#Y?nwW9`X{JbGS-H=1yoqz=d5GAYdz+TK<$1n101a@qSsiVIIzmsH zy?uyq6Onv3ImF!Ke79JDTEmh#Q&7P@Fif$s@vXsHpWhFq@6Hq%FGmyv5bS&pm!ut;sJNT5q)v-GZT}3P=xQfeNLl|RV-ywsB zW&R$uPv@LG0KfT8UK1xIS90TE{6R%#fQ31cgIC4~5tjLI`HtJ6WsVzg9l2)DxolV= z;Hqu6s0=9MV4(w6=y0X3d0ec)*XU~@TY(uF3F8pu6HC4o_N3gEYt9t*l*gzr6^|xz z~#>4`nWjHLQ($!CSDb7J4Ae-N0Ki zz18Sw;J~oFi+oRl1IO7KZkdvl{rF> z4ene74LQIMP(PK!`hZh%b6FwOCjbOih4u{2V{=py?qmdB7rQdBJMks>4i%5|5@x;u znFwn>Ga8LqcyGKbg^$z&i)3BdYLsmOQ#OaQGIlSYQ9&4~ZB0{2Nm%rsvBGA-!hqX> zt+}gKttZmEkL6)Kj`GE&2-aov3ltHNz9yF!`(%&m29&KTlA@&)#Okugt!b+0l9dv0 z1XKX>n(9S35B`NBD~cwnnk=hDvZ%^(eG%Y$MHVGh)+AAMD+=Ir(JRXU)>YBt_J~@A zrU7mT&p=eYvZojx1$P8|2SqJ{OzTDFE6DJ(RsyLiq9)0bM;7rHSYgFI?ZpFtZl7Bn-2x4`4Bhsw0p4O$EWum+l7qL<5CCsO z>v@X64%>2wW2PPMxgP4`Fb*13HEY1S(774bP2aU5+J(zGw7b}EZwz*USIYyt;E`A? z#}e92A+r6qMY}Nm8QN_`xSPV!%;4^Tcr(090Gmz%?#0@E^cwEPR(Z>~H-+#K6J9gs z^@6EFHwa6y?`HTHfi)6}cyn|GIP5~KaWg#pyM)838{pyla(H+V4s-led=i`pe3`kG zurW+Ei`cjT8dGjM31|?XyFUk$0RSYFb02}&S7aBUxip2EM0CGP7(04jzPWRqshXBs2svZUk|Si!^~>ojS_AVYNN0B zdxhFFsrgxN-*8;r}#U!OiWY;aC?=nQ+0HH+{;kT9o zkS$j%;%`k;B$o{T$eIZFTh^8%a0OIHvJ)^kq@c+Fo^vSNCnG-&C>#JYplK2QZj8i> zR2PHdz1L%LsZmr!MS}EX)gvN0*BpybTvHXz15o?|K=G{bTElO(%dgd6>DmGm`2Yws zLfx@=q$kwZ10N%xC<#XcLC|p9jX2ja1Ke>@Zgo;?tc_x1J$Mn*#6a3~h+?*o0( zWw(CtAm#rkdw5iTVJ9dVPS~U!%NZYa*K3pgGC3FS^p0m$2)FR|HNRjXtDd8!~12Y8~n(eca}b}I*Rw{3Iilp&&>qFQb%Gd7Sbx`4skUb%{G}TMlS< z0TNhT39`gaNHN_ScWj4AbZ3q_UWqw=D@<{r94KB$6t@=WebRG$YAr-DHt0-vjgYnU z29VWaWe?gNO_nMrgigG1D%$g5TcGzlCr@VK&8q%85eARf`Q?2fPKS3c>0;16XF{b$f?xTsnDhYdeVJ-gEi z2H|a=L9n;5cCdG2*}@Xk%YbAvw-9+fVJmrIhy_o*U8o16ia|ZYR)F=6-xTYCG9e%9 z5ew&ms|;)7IhDd%Y1<{hH~&rmzLX_Vuqa#iS^!_$tpmP7NkUgX-~$Q3Dv|`4w?LB6 zc#V+-t|EOCMZ(JXFDFF6=daTtfb8~nFGRQj7=-rE2@$T5t;^8hH82P$^%ivqAQoSS z263*+lOd!~hp-A3jNVv!01b3wC^)kQD42Rjg$Juc!Q%z815`)vZQ?=flDbKRK)w{= zmgEO(M1*YoL7Sv^GQk1%(M7?*%GfXu8m>WYUkDe&%i-cdSL*HKML?uCf{WK_(hGzJ zDG;HrL1|EkACDK}$K`tQHR}vOAf75vh_5CzfW=!>p}?EoP-yTLbOtF9buTgWH^7hu zn(dWk2G{T;;3K9oxF*D21xadrO0dM%Zy8ELofJUHra~xLh$KNVy$ng_){9mnI+>LD z<_d$=q2ww^GAAewDFF4?CNEfl*F;>0!YB(Fzco!kYBf~kXlrY=9C22Kqe>#$`qe(C6I|IGfzdpU?!>vmcz^<2^7qWI1>p{Up~@A5kdKe zLKOi(O;izxD`8DwE(@?GNC>ifKGtxFX310o?>B`rq*k?Jk0A;y08wDSFoS-5{h)lk zKGsgAEV*`<-7zyiGaH`(IXrljnS*tpB(W|fIJ))iOiFtXQ{w`;qb;m|isnZ+w)GQ}1AvkFr&{K7wi?chW3Prrv z=c4>b5>%s@{n`CTP<8*nqL2Xv_M5k5rkKE9GWXW$6~!oiN4+kkF-yXq*$Gi0ksiIo zoU7AYSkyp=nC?AziUmLIQw!iRFN`H28h}|n&{(4O1%nRWLm_g3 zk(GI>UY47T+FoC(0~E8antQz^T4z!1{?>7$PBLnZVvMX{9O@8Kdo@ORnTLfbKz*Js z2lE8p5tF@3E6F5$VE@C$!|Swh_n;vdn^4f71L7FcU^lwTfnlD($gU2W+Sf2xwk31N zF^qe#)D-xBcNkg@rn9&Q7SOcCtf<#p4)FquY-LMV*VGj&1NK|M>*m&aeSHg-HK!`Z zP=J9#)DC)+39HLU=HvBxWd{obu-S#{)W+Bs&N_@P))%Zeh6?j}$U(MTOL#>PAe%p` z*Yyt8thHsVS@s~Q%R*9SPD~oxWvmq@&~Rg|`0g7pi*>zj6Fvg6WGrHTp*9)gsaTBE z=JaWfTT&{wfz~Mw;ds!1XCH(3u0KAj_Yk}JfUftfzlmU3K$SE;cy8}9?J`78eMr~0 z*|8Qjy3GHg>kXSZI+bAYC!k%;Q#Kd45tL5Nv3u$$KOK))qv_mZ zjr!)=nmq4__3BLpjJes^1aYW~I4TnaJODatR)7Y9K!7bI3FlhDq{8l0<|D$ z%o==|N6oA6*VjEvPO`*|ZV2vLQj%j%z);Q3VgbR@_M^0%CEkmP1K}TKiC3=R>S58& z?I~jR#;kAFn^O1)x_lU|CHL-Bz?6;8S(DJ&gV=1_(VVgL)Ay{tL{Q)t3OtB{=h!m_ zgfc^%1&ldJ>Hvqq4%lz1g{Gdz`XG{yr;lt1nrE8zfgw9xlCYx{3mslB0Cu;El9mO2 z8c?m3<^e31$k`z%1-d2s?d;<`@Qavqu~BA-16ZZi-8_4UiHWv zvHbKTMg_x@9(=FpN?xs2>Gp}R&|BTA)Ow1_l`<9Aq)~qf>>(^Li<^o{ATTQhtI?&B zSON5(=wWA@kIZgTfK>|Hi{mpqzVXMRan?Xb>l?KyLMo%!}Uv!$!a1w!3kXI=_% zy1mYP)2OD^?egt)X3(p_oOf&M%#PdZ%m4=eU9U3(L@6K#Z?7{m<^<&5EaK?)I`dmz zXa1DC*&V{2)yDiMA;`*)s&)T(GI^|HZfeGVe2(dx{ou9vaYq#~ehNb!5+_XmfZ)5m z7aDAs<@Yb&z3rXZ3$2E99~g`KhxZh2{5CV}k4(q?u&WVnHs=Sr54N3K+$kzPV?JXx z7Nz{K6##4>G%vy~Ql0+IGk&B^Aci*{!-r<#{#eovQS*Lq|KZ7=2=0;A*>kghEl}+;B)$;5OtqQ%+7a; z;!giq@R_vPM zQ4D!mdh-O($TR+td3-D}?YACm$IHpoNi6e39N!3|W9R*`1PeHt$NO=YI(!F_6>JOw zVeoFaH97`SRIC(GTd)h!4AcRrP;O~l#NoZ`&4vNNy@mQ=%fYv`okrnScKw5a{?0&e zcYiq87h+r4nXr}Jfy;qr`zGFRv-x3%+@{F-*|O!K)jEtk)<5&^vHf=88?W49?%LbAPtBHqRMpnfQoZhru9t_N z|J(aJZ*Q-dw;|+PFe%RLz(bw?X~s^}mu>3Hi|unt=udBDYdaiodqRZ$06Xk#7gUQ& z&4@!*p+?sf%U#s*VkCOjp<6`F1D4_$|1WB*!2YWVL9u8Rkv&F zPaFmE5H{=rp2-*xJRV*vhuGWd(jwIZTm6)I6xaxH)Mopg+d(jc+1;NIKXbb)zrC)k zUB6T4|Hrc<2i?MiZZW%6r1rNPA98Jq@W5`Ty@R3t&hGBs{$O`sU%&aij>Za{BMv{$ zzutLOB;=zu@=@}t@=LG=A0+Bm4=>u>FW>W(b+>Kq-oj0I--6Bk_tjB<-!N|PI|<`p z=j_bot6lsVUbJ=FOmT0ZHruo}Ff355IQ!lQ0#CWj4?04xWq&;s&@Pb94++7azx+?Z zza-`v3i~~OlLp^wr{Zt2yIsK-NS*Xgwq{VS!q(VuR>RH?z?qMo?S?ZkTPX#9dY1&~ zi*m2o#NTkQ!I=9#mwj~~^~>jmgXe}r=Z3p45BEq{xgU})i)F75^nRIScbx2dgg-yn q*P9*e>-)}tlh|-qZ^sUVcXem_eyp7r&h)_%hNC|#oEiA-ul^t1;3CvL2RXy(LSQWmzBq3Xn(w20%Uh zf(D={#Z42da(dfsV!NAX6E}9EL}-&u?4<3cX|t)^Hs5~f=KJb=O_OGmrcRplvFWD! z&s>nQn|8Nt`q=$ek{}G`&Yd}P&Y3wg=lnC5Ui&7wgwNA$u6mnIdcVzP>%*t}+Q1m8 z|H!HLcx0dUqI$#OeTiKEgzv(QVBJ^kZrj?*n9WANUKzzJjW;@5I~DTN*YED!t9pLV zruEovT<;tWv|Z26HOkTmUC0(wg@+T_xw%xLn8_{_)TSG+-Q62-gx#MesOB>_oTs*X z$RpPeWliF`@vUr&*YPFwt)PM)zwW#=VjtIs^(Xb>^{GqWC1RNmK*RKq!KX(a##&3N8$|mZY ze478@ZO7g!QrEXUHP|ktpI^y-_?eZ|W>J)0zxq@c$=vwhQy(N#And>g_;ZTX9+5&- zQt&-IPeI<#i?{Da^;`cF&%;w&@nb8gqt~B#>!}hR-t(KaEV}d8S5ilRpQmIzyPka67bz3T_xQ{Qd#e9!als`F{`jOXtCy1Yl1ZL9AudAPgm?(?65=DIj!+wEAd2~i&yfJ>y!kw_Kd*G5if^0FDLSaq z{|RwjH8)Pt9icx%@;f#g*~cFveGfi6@p(5s@5P6Y*Q5AGJ}*PRRsGl$-Q#h&zGI{0 zi#EqM$QNDTx$&7-ULn=j4ut|vjB#4$wQburu_;mRB+PZ_5Zht4=RNJF?{Fw-erEq< zi}`2whX!ciLDQ!PdmI6MXlO|937FG)Pb1OINB&f<-=a4rgTc^jBsrFh%p_95(b?4K zXfl$Vok&f@BjNb?Od=WyMZ(EcFc?Y3!trQoJUo*~j!jGiBjK6wc*H#52{xF!j)$83 zqk+)aWF$Bl3=M~)6OnLiENXst`;gy!SE<)9M+Qe!b4U-`&F7AX8qMSPgbeem$3xA_ zr|9x2>EOF*Bo;Ekdm6p=w3qEBeoyZ^;FJ68?QWpy|;gPT)wKaD^z`yklwPU#e$*S`WlHq&RHLV! z$fLngyaWp0Zt8TNM`8k}R@2J2)E5`kd3 zxV@5;EvBt%C?%+44WVP~aF=J!JINF_MF}WrLety&CY!fZHlCH_LN;N&&6+6z+2H#z zb|QM9(kaQsctX@xqUA%foSM(!IohdgCh|-?Vd+?+w6CcG*rPWLN5uDa%LL3G>y2(mCyyq)gnZ8ZT2W0Xw0ylw1^jVrR}RuC zR$Zz@Yso9aR9(#HQwt~t&Q~t5VOB@fWIToOU8&y-;(DZc7Gwvgnu=pd16}3RJSi!& zaZDjXKIOCQKACdbpw(<^xl5%Pi@3`DlAKF%zHkNKZ$6z;+Diu4qztG;MQlcr&Sjt) zouGJ!td?{2zPdVDSE!Q73uf>_F*}`uRziS}+NEsXnzt(9NvLal#_H}By+tNaLG*m8 z?1Y>Wi}RvaoLaBM<%CE3SSQ&cqa)U+V0TMOelEjD7m8KtsFbV`&W5SHuu}K(!!A`x zjU+SHxMhmDFsrm2Iw(_43MVj6)eGPbCzAi{k)`>ZrB<8R>8-3)vZoS-VmxngWvThL zO6(`{Y-SGBb%B62<{!)|t)(N9lrNwt2ySNgPz9?=J`(VgEkHv-Eedxu=nC7?zm@eE zd)Oj{+~);{9;f!j1+n%Nv@D$_%IVZXt&2-;DrL@DI?LLrGMAl+Tl}l+RWXkE4_688 zL=73*6VHK9kZJjevKJ#YCu+Prj%j5P=?0XmXZu|&dXdmHCO~9p_NDFYf`5}FEhMdq z%hPodmN3?CU~S>EQS4)8m*D)4iQl#gTR)R9K!F{cN58z%P1lyeAmm$yi2GIK7Iv<3}x zNkUyg(;B5el8-4$CO*eyjk-J8QS(|FMygAeikv$rwKUycc1~gh#;x&QmJ~U^$OkT$ z{ccIcbPZ(?KbIC|k`-??Fb~rwDE|eHE={P4n0XA7_OtxMjch?oyZwaL zZ?x-dye)U&DlLJCx3r1*$D z7cbU$t5P|2jz8c7)L~xAC~dU-r1`Fl(sZUyri&LuXLFktF?oY<2=cP6v0cxsQMgi| zn`rOy-mZF=rb!Z}Oi@wgNSmr~8v&kp$`c7~QX-bos$8_D1CVi#L>H{g%YL)-jM5PH zuPF~o^lXhXpO|sMxFw%Vxy|G1*1|Md&g2%+4%dZA^Yj@dR0@K#@npORO@m~Xb{?nd z${GX)dikth4@k78O{~M}30IH1eUh}uCpcd9UU}`RIIdwLw0+{E(y+&u95!3hiw!+u4&6vBu?G`RJ--*OdDu&J{HM5UZog;`~f) z^p$gjW}&l~3wIj+6ZMV3ZJm9K*&fyop+ktUJK0I|iL;mjPEjehGG@;T(~asX6RIR7 zYuQ&^l5#q}P}9@$x^XHO)BG71@xjM2mz}HqDmPqiRqW^UnPRbKY%4p7BNxxZ^l_cw zops5Qm@Of(du38nn=7qU#c*9+Y;Ej;5y-Dvq06I~Op;hK;ida1w5_IyOPWL%AxXY! z+7F$5=H?zOKTl;5o3`j z2P7qHt)5`(6}ijTJmqDJOO3L8Iv>Z_MiXu9N!eS3;Yef`iZF$z^J1#vZx1`9bZrJ$ z>U9{_P?^t$k~KA3+TfOoi`H0L8g!`Ea@cCQTZWawFhG}>&D=e&bZ+gIY0{eR%eta* z?xu3_+G=ZQ6pI&bc_E9+F}6*%1`+R|BuVpG7*WuA#bbVW950m9^VqOaEF9g_0MVrl`lm}}4@dY>fcg%l?6(`|lrSESi| z;!o3H$(yT6?ycf4iWpb+_xzdY=n>J(pA0U1lV!ti%57 zWL9Y;hPgP>J4}4$d$P)qVYu8*SDo8gXEd2#$tu0XSiU7M-%^%usW)%g<$&~F?Psd? z*X_HB1C#th5@xe{{JVCqV}PcTl@ksKY>|)Z6DpKRme0lK7Aq&bgsxLA+DGiX2i2eX zYkPKiopjwcX1hY&$J{>GZ;=zOCH0-ozjVGt-tFu*{+qGKQ1w^zN3}n-ebF4eltg?IaSM7#)p|V#_%;lZuSRqmgJh6pW5fOeACRi4a(ph(u-+v6)Cb9*NH+ zf{EZ*bT$==&Cbls#KNicl`mHu_-NHHSM>Gm?$pJ@7jvoZ$w2qL(}(UgAN$tuw)Ka& zy6s#@rY>}E&;#O6_wLliLy2^1K8~Uf)-nTu$IPy84>y=ozpS@;QR0nNb(?IauAbCN z-1?C2Fkk$j-Z;Rk0&XD{bn(>H8q=A$Z#i| z`RYraFJE-yGgx{^1ApG$$!&?s-AiwABuppW#nY#P4|nng17Z=NciOH{&~d zrp$vc>g&zder7~J!n!dpizd3wQ$Z_R`7j=A$>I*MApN?*cC6mdq z&`cVX&LFG#a0~ol6H?HcC6!J6x5W=2H(jI?Zo= zc+hA}V~HQnC(;)K*;%1P`wndg6wN2|{ln0t=dbs7kbwE}_5LRO`sy?N5%Z-&e|t<% zrgFvfWRC2;-2kcM4Kxh#2C!Zve?y9kg;f60vm;0F_3)uw{K}`k=ElcU{nXdI+kS2P zSYjra91BKfqmfuRIXV#v$48UN(P%0(Gaj5sMJD2-krc{=LdoPfmq%-Ed8H!Q#2c=Pop*-J*=p)~iuW4QS)`zPrT{|i6a1!6w`Ri{$@7HJ-ElDC=l?&h7- z;dne4PR%4Eqhs;Jcp?^zhsVbvq1lOeVs>^sHXDnCgRzOxNO*QUni`GGMuW4l5Y%Nn z6bmJ0Q&5j*-Oc#4;M0mvTlHCY`wyp;pK>zi`RcR#+g~%xU)B=WhwBxe|pALLF z@d@D5RsH0N?wx-`hD>FuCrq^y=J-@kuzF^yXSZGP6fg~%U)<9(RsA13dS-~sc~d>L zv**34-Q~Br{PO#*O*cB8yZ@O>m!3QDban7n&o`Z=%PGt6E!%!-FBJ9zG#Fp<)x&er zt*D0TFf0enk`EL9A*v>md93-wul?M~B2sIx0uu=tYj%;CBy=VvQe$u_h(sO1%6LH} zV^}pOt;f4ck^*N=1`l9cHezX%%ZM`DDa|d4Q~>*JvDp>BI$&c&!h=n#Nc3A`8&WR_m-nG{BDC}%$Zqe$*R!N3~WnPpyh*d^0zK{?0bEkEJm-jmbIed1H@jNQI>pg zxluytpge4?{=}P7Po3K!N{&;Y^XW{&YIidzkMa$7(-lEf>Q(clr~5kYIEwE$itjjz?>LI@IEwE$itjjz?>LI@IEwE$ zitjjz?>LJ8Uvd=Re7;8szC%$utG%~+rVZ&W{->*HLwT26RbK1))sZc!WGFn#AwaY6 zvQ5m)j*X9pCK9Q!L_8V~CuYO5qtWnaDlt1c8sgrYP$)J708lI%j0Pj|v0$9~ZhCv~ zzn@C=)nl{0FYHu_vBPHUfXm|JfdP+N9r@34vr^sh$=*-Dr>eZ<{-Nh)u1^UluDv$b zUbt%vYBtRD{Yfd5h6{b`q)fs*QQj((NE&{0_89Yf8~hZ%keymX<*{NYnC1>`;2*{x z6{!%R;UIs$eUgw!*@k`hh#u53fSS%>=~oHU|f zp(JT=M(`-mVqR1qkkr!x4zPp@$vONF_d=QnbB;DO^{{4C-?)t^9Q&3KFLVN=BFNpr z1Bs~xUN5^(AW}d8JRga(RuAssQSt?J2lO!8PAV^E=8E^H!5|4iK&wo@a15mhYepf7 zg%I7(X9T5b1SwN#!Xw6~0c)^|Qyxky6nGt)@FR)JV|9voHb0Ph7{n_;Z=}H)#EH_p zU5Cu^1R}W~o*m2Ggr3S6eMO-gYxFSe&1~c&3nr7H}1|JM8#FNJ?C>VW;T+ zU2Hv7F2oV#=X~U4HyU;D-oe2IC#@*5sU5MkOrgf~X-Ua(Po9usx~UVPTk|Uy2U^D^ zKu-i2cOxcVOr%Ac2h-rNPLm2^vlI%49_d0}U925o4g~hhqmK>rlrjLb%n9MK0|3#? zi|UPXt0;R9^C(&|GoONQZ9XS>HA1A*@G*g3^>)?_PWI~d9zxPw`O1oi^-&q>1A-t& zKkMhAX79zt+Fyy0Sif@W}= zSB0oyE(<+C+M|eZwGP8B-2(Wg1YKq)S(C<^fu11>p=+7!Sl=v3Ip`Asyat#DQF$wZ za_Q_skNAOrbb*Tj-C1)qYUiUJ5=C`qa%j_h*TKG)5|PfPpa@)2+wCq$3jV^(Stz@p zpopko3YyG=^!OrVp6g&)bt-F51ptib7fiT7AuOl{>fhZc**R#SYy-3ujz6spdd?97 zTv7%cj+m%XK^KUEi_ObQ-C_;`>$BFp6JhN_ZCQ-!nM6KYNFhR;c}U$M>M= zc`+|6H1(WBta_%VE5PX?Ow3Co0>6M+2-4ViLg8=&LFo*9n+U85?wsT;PfBogf`b-d zfajyH@OfGyIm?}%d@8cEuYiCfAC=t>wo8`H;p2V1!w{y>twXF$=oUNCF8C~_qVfXQ zQzgfPTb!te%;^(-?e`HCfzz|KQ3iJ9h4z=XX_naIvb~r|EY8KPY4SXnUjP-9W}r~0 zr3LdtCSi5roH=%~Z=gw%vxs~1Cg9Y)$h%rz%bJP#@=NaZ2kj6Oo=}1*FjEj!Alh5B zDtL_J#gaf!3H~Hxf`Q8iYv!D&<)R3Xa}5AgE{;i;YwEq`&_~@}YvG%Q!dnxu4^TQp z!-Wov*zNEZTP$=*=BpodHyr0-Zqag*KqonUAXI1%fRl=to_H4(OWH_1ct9EE%&W1! z8OR}oJh^ULG)VB-ifO?7@W{3cAwdL*w@{>NE|tj4X1JzI1m~N+h zWa` zczch4Uc>^@X8W(YTl=5|GKMeb*9o|tMPjR^+P#t;V3P$*aMiu@eK%;8Jm2@{{iN^8 z4?f2~YpXx_T)%hRZtKRG2j}dy>H5`m$CtFK>>c_7P3k92=7m`L&tcXj~8xdHF~ssDwnP0aEq;~no&bM``Zfo&mW z9dpp#=3SRs)_5q%S%vpYu6#CUKC;a>P@+Zw<`Dk?H0v*`sC!V-5r0^OxlE>NRCH1K zBF2G5Qa>RhOh*SU&&oh{VOpJUHavsl(>-J@(NTd;@t@}6oSjTCtS#wTil|5B>?Gj% zv;y@SVV#&`^?>78$vZfK7adTy@&mfJiT7o*f%h*en1#+iF}BI;@ba2=uJ!XTpM#B~ zk|iq1GjrL~OvejX$0ZH;iNyH}MsdL^uPfSCsx3#|yXKVVlgg)_ij7SOFU zu>(e#wA(MDeh!l#MP{!mr;FJf%OgFj%5#P6EX#waWldG*d8{nMGLXsAq4KO<=Fm1a zMamxZhz&Y44uF`+Vvb=&ye_NIwWQ$ml2^4OUNx7Q4;46joK7;z6Xsv-Z*`Z}^1jaK zs#JJnj%|ekEZJC^O|rFETV+N<4-a)m=sLehmsA?bb!+|judgY{3LJLMhbYagp` zJ^`TrJZ4{1!D|mvy?8N~1(Yk7wkUH#UO83896z@z$Oj}1fp*jm)Ux$nK-Tgjg?wTp zp39YS@&sU|!SX%k+rO(dneEm3W^?2~tD&6-AFd`(YjN|P>B(T92a2A`N=eqil{xq* zjtFGIdUnw5=3RZuLCGBqnwd}352%tm1O%Mavc-Xzjp+W9~O^~^2g)iaf^m&h7XKr4=!hx+uH%bDLb%8_nSOz3K zmD#O=WRX03p9;c6a(<7w_dsjYVZM%EYT=W{3D%AHEJ&DS!{=L((bYMQhn%Lv<)c`W zQv;DzIyUWuJ=OfKzXMpSq3)*mG3?2^s=@|MOmB^Kkfwctb$cnU;0!n&1( zgoLoJ*nXBhj9Z4c99D>oZvgx`-s&Jf%OPfRwvluFjeo_+cxq?QZi$XYL@%!1t3w<@ zY6slz0Z!JF-Jr1>l$)vTjh%rEJC3nhPEAWBCPpwxq z{>E8J4Ngo%V1M}dzIs%0j86p7@`TvDmz|KUFpX@MmLR=6s;E3(&QW@HM)d#cK0-$M ze8r9nexKx$x;(@sm1O;p6a;d2E0+rLdHW|UA-TAarZ%bKrIwnIwqD-1sXkICgcRp& zuM|8e#xgQDTU&rjj`3-3J3GNzg}@H6eK^QQD~~-0mRMaV19u)2ih72V!isIEp}aV< z4m56ft9!J$Q1Tq?qsD+t^&9QYbiT z$+}abk($`u5=M}Z{2gfiJrST|ahc}jj5}n{l%=t^xhy)AK%?b`=Sip-Smy~CArBHKVU1?E;4r0#LAHh4M|PN-`K1Hs zgBW1PH;b{v&1};QMk-q?wLQj;NN&7%e=}7>k?0u45g!OwPXg64TIMKTSV_!pNO<|+ zF9WR~Hox#psHKE6EH!Z~ITSh;vwGd4(D89AIVelvAnLG`2~UJ07Tc~qASuz{MAXvc$^}^-oe0)Q zUN6g$NR8m7yEITdKCz!x2 zufGr)E&&ZZ5e`K|R+CqcQF4x#We*b);|rR{xp=Phi>}S{_0G~LpDy`&;(9`9R7*{jTnG`&m?P7V{;4`8buvLLqBPaDa!U3AUBzZzmXKBS+>|aJ#M|B+3$BvZFTuP-bTFxOOQU7v%%?fyEWab z`*D!S<8=AFKAe;A*Lm7CS5v*$t$Ui?bq&o;hkZ@D(c&C5TKzt)u~g^r7zPV;AZuE8 zxpb}5-{SG=PJ^j>o3DOdpw6$k@c;m1L-zxfWB8oL<665{^LRlRU^z~08y*3h<8iy) zez)GG1GM9Ix!i6K5{9Acn(onBQGi#gbC3?sTP`Fn1^@@T;=VM1&$_Dn(%_$Wwm6R4 zG~17;`*qh-&imABjxQUZxBs5>S=*0*iTqmid+!~*u2et$;lVA$y!@fTD|M)?WTQ48 zaF1+=a#&(D@WSA;)Q>h^24K;~5s^z>0ERKrJyE2BQ!x^-*1UOe*BBUGHc9jSigGb1k(_eZf7UU~MB z_3!`SXGZ=V@V#Vrb>hVEZx>*QKW!tQrVVzg`~Vwbvp3N7BXixUws*?=zi{c2`Rr@t z&>gS)9k2TxulpUZ`yH?Q9k2TxulxU>UiTgUD6hNa(#I_k2mz*Xu-EN$gzTzIcF22K zv$IuE3TE9W-MyuB3pUMx?tN;&D0(|tGj^g5HFi<=p%v;tJh{Mu`g|)|o`>&ERJ*?j zcW@4{alW6~&N_&^xRALZV!p?4lpt?~!4cQR4zR$3X`L;B?)y6#=4~v+W%!;bf}Pkm zRr*Rq9BUH+3ie<-j`?M>i#(Ep7~Of?JRzERh#6K;VGj?5bFbPiKWh<{;eHHB>Yqc4 ze4W0DN@)bhIaxaqESEqcr<@%ZWglS_?7#woXMqd+t7#`9n)$OLYY)OIb4iihW`292 zueXFK*&>e;@{;$-yqz?n<`*xDXbYQf>N`p7z{$hmn?m?pwlAc_ncT7sKX7nRgtX)) zkKf}|4It)$l-GQ^ip4jO^7vmf_$plMbGrogV1bf350FxtAu4WGNdNo&-d4Q{8$i$%QQYjt|+ef7ZT8&03@bk+szPNz@td3NKCD z1-lEh(NO30XsYJv(!AbgpQd+ub?hgau$gG6ce?y_*mWSojsuS_HD}Z07Mt?2vQBPs zt4_bZ$?;wX0v4W-Cxq4c;rdF&Upd0}0^1HaT$d5HTSI=<+&4kn&2yXmozn1pvg+R3 z6(tQwts8cpa{Y(fr=DE>=2t${`z7<0`oVX5!en{n3ENva%=ZRM)nEEALq{n;j`TO? zU;TCO`|5p_6a1jmrcF2~<;RIE@=n{O>%p#ObNB(Ww%YI;L(e#FzCJA9a!@j9bG$?* z0dN^6rME4-AZ~b)ZSOi|v#H-eWJg5Go16LJ>=7PY=eknf3ZHF^>s+~m;lPaLD21K? z@WLOTzU|V}uswc*=Pe2UsTc(l)_pI$__56^j;B(FgK2oRYgk~_8?=I%Ilh_DsKCWM z-dRJ#Jg}Jn^s*kXnC{;0kXmo|OxbaNfNF0uJRAYDf_gc@5K}_9nL}LK_1+$Kz1n;Zf@;AV~tZu_Oph_30c-vY#L-&v_Zza0W5A44@^skJ?%!(V09+{?68R0^Ws zDGMM1ni^TIBQU!H0pTj4BNWeXWe_uFr%DuYLXmg61v8Fdxn6FupdPUDY`5<5)i-J$ zj~p<11FjOa=ih++SP<9`)XUcXUBt)XRm4ZHMiAUZugiUKgCYLGyUo(8aE|PLg{YZ% z0nR|FCI>>-3+Xj0xQxf_tXU9x zh1j3E4TXSp;m5o}Ib#>1!U5aks*0KJT!D2J@?qt%l5TBWQ^a z&3XACl@@CjyHLX%aE-nDL5?^8{IA2?+nwP01xm!i?e~-tDSZ| zY9-@MkTU{YFL;Uw6=8&)`r z`{1`P@Lu=>ZQZ>O_TIIJ;F2t{ZUMCpz8qRzxjc%vJZR@m@6&!SYjC-4uTW+&eXg!h z&RZ)JRM5bV-CmNMv6dvfdo!Q{uoomt<(B3kmmpt3Z38$9AR4^5FRqC73P#5|KGj<5 z6{vpe>XN1GX<)85Em?4Y4~P1ESejrhqHC=lADn~Sl*7HL!I5axdHu-gj2U_zZZj}i zJi4#MOL+VS4gtDw%+JFY7Eax8BeKcAJWYny?C@wf9H?nv4PFIEC{R73l7_-Mey4+`Di~p89Lt&T_FgH~+Ym<*MER{{ItCr$_y-MZ=uL+84R+PCst^8{RsFZO zsnlNjceSZ}RKMA#^1=OMHkDgGZc|t0?|&(iih4``VkQ-K?oB53|7=mY6~(He@~>!7 z*Sy)HzR{jq=Cs7;gCDb}Tnhi%_S7<`rGKtH<@VLGrz_T!565|I{r@q>bk&yf{H~jCRkue|Lc!`C-enU{VWZ=MWx1HRQG717f84LYJ-fZC;6ymzglml z4%@H#t<)a-)jGM_W`w@JwMzEWzx6Di3N4=+T|O1Qc`9PulKzm4AbwTt4n{vghQ{sW z>Y;bmcGA~?&XoR!21DYOfdn?JOFjF7vstz0;4@PHbMim;ys1_<;Fp*uG)#KJ3MDqXNoC zC!Fq;TkZr&aiRzmqD8jP{9HJ?FV;$MPZ$7VRwf{rxK{!rR@^HQz|UGIZB)tU()`K} zP|lp@OA&il2a;)r2bgHLcOinz^ znYSkFK?S`y=`mf=XyJ%TzBU1G5RMzY*Uk?dRl9SsK6~{mq3B6@@Q$k7Q5CK#CRC+$`BH58(%AB) L@%LStc>R9?P{}A| diff --git a/zk/DynamoDB.md b/zk/DynamoDB_data_structure.md similarity index 66% rename from zk/DynamoDB.md rename to zk/DynamoDB_data_structure.md index 441badc..0d11a6c 100644 --- a/zk/DynamoDB.md +++ b/zk/DynamoDB_data_structure.md @@ -25,8 +25,9 @@ non-relational meaning there cannot be JOIN operations via Although the data is stored as a table, one of the attributes is a primary key and the rest of the attributes are effectively the "value" associated with it. -Because DynamoDB is schemaless, neither the attributes or their data types need -to be defined beforehand and each item can have its own distinct attributes. +Because DynamoDB is schemaless, other than the primary key, neither the +attributes or their data types need to be defined beforehand and each item can +have its own distinct attributes. Each item in the table is uniquely identifiable by its primary key. @@ -40,7 +41,7 @@ There are two types of primary key available: are attributes. In a table that has a partition key and a sort key, it's possible for multiple items to have the same partition key value. However, those items must have different sort key values. You could then query by - either key or both. For instance using the `personId` along with `LastName` + either key or both. For instance using the `PersonId` along with `LastName` ### Secondary index @@ -64,39 +65,51 @@ project: ```json { "TableName": "TimeEntries", - "AttributeDefinitions": [ - { + "KeyAttributes": { + "PartitionKey": { "AttributeName": "activity_start_end", "AttributeType": "S" + } + }, + "NonKeyAttributes": [ + { + "AttributeName": "activity_type", + "AttributeType": "S" }, { "AttributeName": "start", "AttributeType": "S" }, { - "AttributeName": "activity_type", + "AttributeName": "end", "AttributeType": "S" - } - ], - "KeySchema": [ + }, { - "AttributeName": "activity_start_end", - "KeyType": "HASH" + "AttributeName": "duration", + "AttributeType": "N" + }, + { + "AttributeName": "description", + "AttributeType": "S" + }, + { + "AttributeName": "year", + "AttributeType": "S" } ], "GlobalSecondaryIndexes": [ { - "IndexName": "StartIndex", - "KeySchema": [ - { - "AttributeName": "start", - "KeyType": "HASH" + "IndexName": "YearIndex", + "KeyAttributes": { + "PartitionKey": { + "AttributeName": "year", + "AttributeType": "S" }, - { - "AttributeName": "activity_type", - "KeyType": "RANGE" + "SortKey": { + "AttributeName": "start", + "AttributeType": "S" } - ], + }, "Projection": { "ProjectionType": "ALL" } @@ -109,9 +122,13 @@ This defines the attribute `activity_start_end` as the primary key. This string (`S`) value is a concatenation of three attributes, which is a way of ensuring each entry for the attribute will be unique. -I also define two GSIs. -- check that these are correct for getting entries by -range! +The `NonKeyAttributes` are all the other attributes in addition to the primary +key. As mentioned these do not actually need to be defined when setting up the +table but they are listed here for clarity. -## Usage +I have also defined a GSI. This is derived from the `Year` attribute. This will +group all the items by their `Year`, allowing me to query directly by year but +also helping to chunk the entries which will make look-ups quicker and less +expensive. ## Related notes