From 5358bbc5304b8175bb3814746b4be68fb60a6e53 Mon Sep 17 00:00:00 2001 From: wangxuefei <10225501435@stu.ecnu.edu.cn> Date: Thu, 12 Dec 2024 14:03:55 +0800 Subject: [PATCH] modify report.md --- pic/test_field_1.png | Bin 0 -> 25188 bytes pic/test_field_2.png | Bin 0 -> 24977 bytes report.md | 67 ++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 pic/test_field_1.png create mode 100644 pic/test_field_2.png diff --git a/pic/test_field_1.png b/pic/test_field_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7883e1458d0752b2ce7e7a4fddcb7bd53c8e7d21 GIT binary patch literal 25188 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%0DT2jRean&54c0gg$b*gDW!kWlukQ?;n@m)8>+ zEP!EDVJL`<KJx9I(h zd4eS4XmU?BS*mYF&wL=1>h97sP*V0y$;mP9ym(Mx)-dr%1z#ur>2l~as8iVEInq2R zzMrsXbf*o43mg^a`D;zNJvXI`;i*K`-8-kNW@aj9SgEFwV_ZI&vM`cjRwP!Ew46a- zwCh#b(0tds+MSOw#W2`w#i_gbe*D-vuU4&YoG|U&4*gpk#j}PhHRvzLf23Ze6gKxt z1Nt)DWdu~e{c-k>s)$X~$|l~qyzR_ZX?gY?3v{Fwdf1iDx{Vk#n-u)Y+6Sb1+w!u! zhB{Pkfn^ZNj+zV*D6M>^HO#_8-B7i;6dCM&B|8J-Anvma0OgrjH?K-q8AURySlf+K zB6b9`FEQ^Kx)sK4-+FHF*4l7pl(IrRIm}e_w%Ds_jl_{(Lnpd8i>5O&+8ElaHI3z>+FJAP|3^kMHTO2^Ig+#BmT%9%=VOEayh9Tp_H0~ zV-#ILjI-~5$-EvI$n~dWC|)g~cNJtsx6^Rh3wyCuQn);VK<7jm@D|2q?YWlNHK}zL zX0_m)e!C0tuyo$6>5GKF2;tk68wayNP0H^?O8w$M32C3^y7Ovs{9>>X0eG(I;jZUj z{=^(urMQMZy@}xg5H#jxL0CAaI1uQ&_|387Tj)H%$C%R%AxwnW6CRX5g4jr;Dvk7M z`@6p|?ZHJm^ll?wbc9k&em`5Y$W>;yilBeH}R$E z$3_}|qZlmq=FF>|Sn)0ccTTsiiRaGI;B(

-dA^d$GrV7}X2qI2&-j!kUolICL|a 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 literal 0 HcmV?d00001 diff --git a/pic/test_field_2.png b/pic/test_field_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d07af4d7e19bd9a00bc425f17fc5c551ac9b5942 GIT binary patch literal 24977 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

@uXT{4_ zE~2aeGUTta-bCx2ry`P=4z}o)l!;=a<;JNjiCHJ|WtVVL2H#KPOj@hb%h=g;k=b+s ztp4^Tx77umE1X;Fcm1OJT4Xh?wydB}weOjas<^S%qpEM3jMSoZU2y_x=p1K`BRt6T zH!TTY-V@H`8E>f^JdbxNjaBxpw8V_`O5#0(6<>lBw&ToEpsr`tkaetp%Ooh zTGBqGSUdw^&a6w_4u8#?#0vT+k&twICO`-H_&yhCvjG2sUHRnn>=+chsVehH^MC2p z8^0QM!r8Lr=TDSO!lk5ip+D4%fBN@lBaiOi69dL4#-uzvS_Ix;=>1xkHw-_&pV2?L zHKy9|mL?tf$BzVUSy0;!VEwP_ z|Nn5n*^CyGI6w8qbj3eed@9fXN4b%aqv16FDf;aNMh_KE@tRiz*G6mH}>9+GhsT)}^Hb8U`e0&~(*f$~ZUVb4^2V^@S&X|!*o4aMIK z-9q?Xc|1<~?HL(|^|qXQwV!PFH?!dwj*|?byhj$Jj9Uh*z1ug^8l=GvBe7{vr%ch| z>K%SB=2l)NaFCJGg4cVl!V#E8NYNGO%Oxp*Ub_+Ic1L=R){BQWr?Vs0(coLjr3;tw z??4PnKOg{P;z&c=SoEDvQqF?(Wo7Bj%*-1eZ>HuMYRiBSoVD?hiqB=Kjimn*Yfg<(TggIJkM-j;st*fUl zzy+^1mb6jn2YRl2l=ROC;A1KIgFr7$V6f>Q-vif2YpDm)PhHDDJ-eEAmDjo zRjU$aWOQ}S&KAcQK-40Z!_B=txd1 zHs%KXd3(9p7Q+3aQibrhOvYna`D)6k$=L3M}ZK%w!{ZE1!P* z-ifPaikXqX>V57|nInt1iwSB+4B=E^KL$nEUZd0*S*>wfpQ#M#=_YZ=VXu-pwBuNM z9X&4M{5{LCN^3c;oj^MP#mycmI@!mOh5bSw78j3A4jvk2Mt7VuIUse|W6$5OTdA5X zB6Dsrv#df~0Tvby{t*ke$GUypaR=o=iCTUqjO$L!!^cLAT^R*_g+kySV0Epc~385`#)q+h@=eXBN))LBKZ9;g0AlB6>A z1KgVbA)7H(6n|=$#_|$8vmOb8++!TBuN#t3q?-oN7IpTMU;^GXkryz91P;WF@uqC$ zi6G)H)77tq1|rY&i;-j8?a0%}mZ33i_#*~?6N7~t8>6<9^h@^6{7e?_UU{2MPeCs~ zH4&LUUJ8{y(ZBrdyNyMx#+SL^$Vf?s+|15$Gc)Do(3;fDNQogwc1)4 z^N!A_S-%%}$-dn^iy^wB81Tn2$#_CcuF{JiEB=}C6(TXS0rEK8ML`A2Mo$o}FcM!c z&{Mwzq*wfr{0oTZgT&^a0s9kBxPA+Y?##U1EVj83g!kK2UIfshJFH@AEuqEz&)O;t zd**e$?=HH*-Er)4WaWwG>WUBt%8g~LIOn>nLbM+tncuas5Qdv&m!_a=SBPdQE2Yc} z%thdLj2lr9iq8UlK+aB=-}SNOaJbo_d}RoH64310mh)<34fMFx{krX_0u)zpbcbRx zTlg`!In)Ju9eNQzkz|UWJsiK{@pY3{TREH>?3{ZIwhWgka^Qb8xhA>q=;}S38SZ;1 z9xRP##!Ji@F%|h(gdPq{@2#Qvr)F%$p=EY>*0b5GLuP!*B_S{WA^DIFZ#Hje;aw{ z_9mxri*80A<~vpOZgNTA+ujOCjMh>fhOQPC^%`qYdny7{F@i;PU|+c?+sc5@iw8td7KHEEJXCb^9)f{Ity>;^+t>H622$7Y{f~J0l9mY?k7re& zM{rqg8?L~+sh49Y*iQaep+xl8aQj2sLWx$Z`8Jdu%{bD!y>&uh7Z@ls*NL92lB-dM z>uIqr)b+X{C^cAwCj0AaqW1yyWYrjA9tqtR+gAh%K39YQgGY`YU2g!WhO{rGS18)z zoM%?8laBO+?8~3r&E3Ps;X@*&e9k4EQU0KdJ@bs0nGejXnQ@8YQ``F^gR0E~doebM zQG~JLYD&&k$fNlDf!0KLxJIwTt9LrxX5~l6#nFcj&qi%8$cer;v@WiWVvwi$zUS6I z=dobF)85T-;)|stU-b45!xIRtF!_N$*43c;t_y(B$gR|m=}z!PRumaN%zA8L5q@*~1ut7pui(LaIDju1s}btJhNJXVWC z({dd>LmL?h=6-g#{d07>Ne#VF=dGAz4J>n@FM66|^vI%d?~iJ!RVS)?gbr>UJeQDP zZiLx8*lNPexEvxUL-ONCS1s*z7 z%YeRWAn$f%)&q3~sSkQo@Y3-GhyM?=>UFFLmMUD+AA(HI8@<5rAs@yuYsu8oON0v< zq6ZD#Za0M5s?{0JERnKWM~GC;S~E(gr`?Yew#@+q+u50dRWY}UipgFS0{*}yb#$DA z;LSP5at)?<7X`B252=gm_uX45EzcY#*m3k5SVG%xJRarrOsQr^AvV^lJg$@$)7daG^Q<>NUFQ4Qz|>V=v>n5BK$5+06gYE=7=0j zcM;%nrwTVS$wnPw*@&EjpJiKKiGM%w%pPFWgO|R*2K{+8SZ=gQf#PASq1Hahd%4T7 zVIr^>AI*`v;+dyT!V@@C?5JCHBKx};<+y#guJ`yrYR{)dJVt<@FEx+h(3_3xlo%?Z zq?^wN^vyf-k7kY{pAjGRC+|Y{(-tejm9AxsouoLXcHShv9ZDghXP9G4C(yV304cHe zD{LgIEyT@7?}kzxHt3(zbyU-zrw3oT0zeMDlU2v#y*cqst_*zHUbuL!%yZ|zt)Vx( z_6gST&Vo6!(YO4>ugu5VRI#^TF2qgl-xk-rV&&#}@*N|$JEh?R9hz%LKh92n-bN<&97 z`}^>264~MHe9zAepZ4%d)odX67K-_Zy*Gz54!1EGw~vUor;F%l-<7vii*k79oAB4` zO!mBN7n18AR^gU2ykNAlJqEi?`ye>k&H{ChAncM#3Vg^R!;ywNr$z4_PQ2j~+YWI{h)Vb=O9wh(g+ND_)H5PpUL~?!CZL?9keQI&(< zqs*6%$L5H}d7g?K;baAqjCqnT{BY-VflxoNdfmSSnraSWKYmu}@akt*@r>ykdVs{t zpe2mWO)<>H83E&VZ?&XM5*obje_!F>ZJ7);m4`Q>7)3f%=ChMHeAD-P*L~5@7+Tf!Wyjt1QU&s=jd6AxH7UTnGV?~!6i$hE_n__2 zeOj$HQplP8jW&;e_;hh_k_H32%f?@iqP`tiOZ0r0W_Bm>)@|4kmK+g{D0HmVS;S5; z`eHfs@m$a&MnlV!q_nq5@pQ9kt#kdTYMN()?KMW@~BxCo%L2rHfYoixgo*`tOh8V`@GZ6WUaBumD$Zi zSfvQONYH)UW*!IqvCO%T9@dx=4#8M&QR;!=01eAb3j~sB`-_kngZ*@k9^|^XIB++H zXSc$6{Cx+S9(t8`lFP!`VH_5`D@^o&f$r5xbK=wI61 zr{6(>n47;gR&uz1SuH*X$bK6t)|~{Y$}>fTJ04P<-ji}K_n|8P7bT2WRv~1 z`1kdr-FW5=MF4+oEi)$w_=D_~3!24s;`rI+OuWq#KaN4=Atd20psMLZ{zh~C#YmX$ ztv~U5u&+6o41RFRhaYc)EPT@V+~E(O7sgXJ^Djdv2iCmH_% z=@U6^!dZBSHBr6WHYM0)02u0nFvixwld)1@ED9ukloJUQ9inJdGgi#uY8yY4tAiY86MWAu~?~5t*%2xkw1r}mec;)q8_!Na6mu*lL)_dZq z*wZL@yw;u0FqDR!dfumdhgt}8s~NfIX4+vs=cXh4RAb>`KKAoM3OLU^Cux^Gv({|4 z%-Bp+U~5|~S4|<0)!TFM=y`SP>3-@GG+D&^6qa z-a&ZW8f+g9|4laDS8P8Y#&!KHeqprGa1jyq==a-bkLS2f2zYyeP%C0&i&JspQA!o^ zQ6jZ1d!i1{)sh5d0WvhOi;AEC=iUe`l9H!jGMRO8M){9vnms+y#2 z_>`m4>yWkJal6{mY`CB3b~?Q-as1hHg2R10i(kdc9*lFBX-LgvO0}prfl-QVZYJ5s z{vp?lR?eEQO$B0-x*!?V%P#s=&tA7nR&%n;%lgc%tF2C?(lU4OvtVEicjou{&o=== ze5~-oAJTSKi=cayZ-D61HMYJDelu*#bsL+$*jV*-ayXxKQf01Fh(;^CPz-&qcP~ERUdMZ~jKTHeyk{{JKfiA3J-SAf*k`FrG7^hWG1h^d&Pd z$hAU7N*lww%dML*8!Qo~W}1O+Pq%2}8`nG=Do88vH4AlT}YO9o0kh+0O*OxPKoEWdG+Jl*^8GZGEWN+ zMUUiAQ9EMM=F+!P^s;7BoC!NybJH&N2`|t2jq;Ks4X>^`DrZ(+U7k7~#OAVB-H&5N z@^Zqxe8+{4^gM;Nj|0t@#{2HQ$;_M8J2*&vU12WIj}YC;pF@XTTA#pC(x(r9))I(v zDW@CYoHPS8qdf;(lD02@F2@)~4966KGIBc;h*3`7A#I*^UiNnyo2R=#cAYCvdM|wn zynEoLQ2%6@`$H%(KR(cn-54PA+yrAEmKx+qz~97R25_wJlYKzAI*tV`SEn&XtK9Y7 zrki7|K5-JS*D1cw$&WMQwTxeq?cwzy-Wk!}nY?JAVFf_^&1S%t@9n^6@Rd?%LlS6y z`yk7d(ra|)fqA^^#8hW&2ky#3Wc01X3Vw??beUB>Ceu0^GJTK~yH6J-S-VbEaHYe6 zvr@o0_nuxlxr=EJuc2^Ucjp8hPsyffbyt8z|pqo1=S#8Aoz+ zuwz-;VnH0=$^D}@qE$vPKR?l8BWx^TiBJK6HDfqJtjT=xPLk;M43HHXebDkMnH^{r z@JkrD2~zw9y=Q>Y|5hVO!oSL6{@NTKc`~yI*4B`>ww$Cav+!Nxg+Se&EfSn%Aq?Ei zV%lwb;2*k)j{6ZUB21Q%57*Gz%$FCUdNcfLGqVBgKNN)7m6RSucN)r#wErP0-~Ond zYvR{Ss6$dmYr0_9^*s5?epVMava?x5;j;G$Mbge;c}vf$jbTk#>@PN@8gBS z?sQo@-nB~Ia8~ibz9gGn5{z#j9>1(mJtot^#DH%;BxFcHnEkwNihQN)_SkLVitsHu zGE87B*VEX@b2N@6okjiVoNxYXdlpX6pJ*P2^&7cdtB;4-``RLrlT*m|s-JRF>S}Rz zpUPrzKiCe+YA+#0xt zFf-6Bc)05DOyvW+PAjo<4*1CMh5s%AE|k4|v-Le)v-{N4pDVCG%_d2CSr0TmehQok z#-EsyuFGx&4Xgb%(ho*?^fK<)Aka1N)4nSd^4_ar2U!N3i$D?Sv!KP~Gb~v}Da!^C zHif7}%?hkG-z3|QgjRHTh`n+{GU?Y&9gV}&HlfYV_^aoo<*T%Ry}kabzVar2$tkO^ znN8N&Vd}VAKu`CS=tyjyrR8QsEaS282*KoDI#agjFt6`Arr^N^{%?Y12*`4|20oQ* zQe=sk^GS%kC8rTIpR}3_BzC@g$X1)QpSrq;uHK{K^LtE;+s2=*&e9)fen))*J#oxn z{WFZN%WYHtuS@^Cjg#c+;%RzQTU9<+D!3BUi<&kYM-p?nJ?r1L$Oj)P^8%#-xiHSS zf+%*emou!nvqd{NIIwej172r)`CiV9xauoiY%Cy!z-%mJBq@4t0%;k@SDdv#x(Oji``Eh{aw7P2o4yI>YzA zG|4tyYeP?lFZ9HEpQa6K*Nt$ z7L@0WubB^JL}`C!q(Zn@Cm(7*fg#);UHi#(240Yq+mDS8U0B3>hpQkk=fIJ-$CLk0 zx%&;*SQpyf3`K&-S9>;>6K=6}Cc&$!+LO8;$A?)G()kF=Ych-Sqh;utDSjpiZ%{4P z#lbf|P>0?gPzj|yR!F#3Q)eXJv;PhRj^=?@>NpIpN?6i^dqk$BEV@=D|7A>a%^MAI z|4@nf)xhe{4NnWVB~#6?r$b%0XBT$ z2&p0q24iKZry(|W5O-Ci3*(Js_C(t4p>Cp#k~Uiyq0Sy&|077Fs*~p^D865;F&?x0 zYXgEH@M9jH&ZbP!F4yUeS*4l#rmbC`C`d+$f$S|M3ZA)9XPu&;yN;oPGo$hLmtp(! zuMyY zhB&jOHR`I9wnBQ`xQju3NB{YPvC&B=8*j1AgdP^ z8;|*xOaAI+Aob#dUr;6)Ca632`ecLd6k%v)G> ztwa-pF~}9Mtp$Jq~%L=el*!um@6zn%~;#RvogH$DvmwZsVmv#{s!n@m)UMW zC|1)kGzR0nBmPneI!vk+WFvGI)it{D)P9;2wtMj|xt z?PF6f1){LZPVVuE!zix`-o<hfr^|(xaumBgM_=#k!wckE zflca^QC$&s7o*XA{=H8D48K4z*YeFUEO}*CcYNOhuPO47bw)n_kL_T}k3PJ`6d9*& z3}yX$M$MN9$zDc0K(y~)jY$sEXNl`1;ICiWW3B_bVKAznlh$Q>9JEkaw{qex;ED}= zUI|rML8D=ZY*${;EH=gp8m7H0%a5NMOCy1V1d0B%v@kje#Zoc`Ynw ztPF>n4FB-tf;X=4fr+l=Fme{YKr3;9*vcPhD?fwVR5fQgQBzpADf;i$^;(y+#EYg6 zFI(1hiHzvb7jCgsuub`<5Iivc2&p&5w*Ik`s*Uku0QchAjV1VDs@U1F4nSSE8b6P< z@`9no!s;zuVBAXn$!;U)YlpH#tzmVzcK36E29qO*rVtlA2*0!KJGdRNCFqBl{>1=P zDqgt(-)r+X?lEH1f8FsbN!^ZG^D+d4cKJOE_DSvgorpEG#@_`A2-p zkg8pIAN0y+gn`}z?h=Cz+PeIh7?AkUMj3(tY#Y^7H~NQ8)RCW1HBPRp>AGE)|AUvk`b(28)*l8$Yw%TDzll z2E@ulcO}G{kB~Q?B|y!fIa$mpmz-W#{YnA0Zk-=(Y~XRbIuwLE2Kj+|%Cj;z#`NeDh29t!3RQ$u@j=qX)o({jCkbKneJ}s2{$i^_;2AdqB4y zcW`QJVi$zE666TfB_SUq`s?A&TyqGxLGbad+Kq#SPrZjkIGVJoNR z@jhF)O|{_Llt}=O&w9=T+Xp$&#E!oz?aj66iW0By3oQh0k>8#l#rX?rOj9<&2N-vfj?}Ck zC#PoQJI>vxu;0E|TnY)^i0oPQmU>TF&j&*1MIuSB(>6O>zewkFS@UmRIyd1*iN+y~ z?Bj4=UEMRa`7vYW%}C6MqAoXXM}mjg*$z*h*A{Yq{k@a<1{XFR2_r6aq+2a7J%=a8 zQTPHOU2)r#-&2%@##0W(r@e=2Ry5{I5(4Q^kJSq@9(qjfcB7kT<7|M=x2j~wqIl|8EQ$^~xk{vFv8To#n zttvEp^~Lb>C*mPqXx_?p#X?XyC{*iYy$ckvI2W8*U<`cV2-tW4Q(nqpZdfd5+j>rd8EFUbkmI|L>tVdq}({(0OqI!9#O zSx8y{Ew%l}Sa0LAKAb977P*CK=kZ4TWqQob?pK=l-;d5NobEsmx{hLJFVv1-hcuK; z=q~X!!$k>uH^~*O)Nh+Vw)gQmU46G!I3bH_Ge>I;Bw34{!PuvGrnTVjX{Em2Z&n#= z1bhL4K7sZ}zAzJu`e55Xjj^?&O`6Qr7LoZ53~R_ap&Wm4==LeH)qE%5VTX2XqPBr? zEa*gu2RSpFZuZq_0^a{fec3dJSe`P6$R3b6MbzJx8AvAJNBdGjt0lG(7*9T<%edOT z8XDF629}rH?#forzRNv7j>}s&$0WfCos4U2aDT!4G&W+&w>c(>AabbKf3#V}ZDZ*$ zGCSq5-LCN2!(CnaGL9npU- z-1;N!-D_;tyJB8o@-HGkz>Dklb3Echg$E4pcYEC;*3LV`qtCc({F#P!cWK!^oq#)9 z=^t|d)R%zOS9Y66WP9)wmsHGO8*HtX1xEeWp{pp|pLH^xy@gm$d+=5gp6K!jNMl&9 zU0V%{v)Hxnq?kaB_!n#P13iB?ZL%)lbk=*N+XalT9&(mk88Ie$|!;)&Kk0`b z()Kop6MFb??K!n~y4#&c$y$}*(w(?|qZlHfiFGpi)?fY9N_&Gl9f1{jn?O^+)8)%T5?n&Vk7j-7O*Xzr02;pI({dA6@4lQVFbA zBB@%A-Af;R%f~V$BX!30$O2udrk1KPIn zA#Qi5@zgp&I|T6fzt~cbz3feU%A$XEo1%PSii^wKGU_DoK_~h`Yi+!h8u%I#LnE|0 zCMc?Ne+b22)&y!QG6|@C{MW^trvS*+KI^0b$k+Wdj3XIo)sk&~NU)I0!TlU-51BX5 zuKzTnPTW<^Dy9j=p0Doxx7w~8`fsD}KVnc?-Oc;Io5SJ$&;8*4|K2fyQ|ojmX(HH! z?@{YHNm(shn%~#G-`4#ipDYko?vf;=Pu^in?Uy<7Zw=lNtBDN}ZohF~>&JB-_wCI= zGTN_5OOu8Y1GBL1@%EHr4`xkrB%BIQ_X&SXwgt3(lIP#41l+Qc4q!~a0xo&x5MKZ5UzNwGr=|q((G<{&(Q%W+@Ha{W z6!Kin^vcXJ2xnc6|=`P6KBZ}(ju?`CsWwD}{ z`^ZPq3WfAB?UenkV)P&J#L|Z9iIc|$Hx9eGK=o|E!@|NNA zLQDa9YCLuO;NPmIe|4U2hO_0OF4`pmHhbA4Yku3G|F$!`t#Fd_9pN=v3+kL3XRHjs z8KF4n!!3*TG^FXa$%TfZJbF{Jawqt2yFTKy7Qy-5kZz8l$wpqyS)CWhkD^?0wX?@x zTPh7E{vfSj>hCg|GjZ2S8kHc6CwIwBC*7u*vgY-O7p4X>l9<#>Cb^Z3xVFV=!4E<) z*Dchg+gkwzxq3>v#&Eh7d23uKSLiU2lMJ>vCKcQ4U03-Cm?e4GwzC&8>>$x9=k-bO z_v8{rt3_K_%6b&hTG8Mxta~cC9(*o$LTOmzq3gg`oXvd3e6CcwH;S7&>f5V6-}v}w zZ4AC$s?hbQ1;_td7@^Rrh>54lAJp)dP{oe80&%|fKb@wn+T9E>gWD}h+^ZwqtXUw! zpDC32GU4-~Uf(cii~2~kY{l5s%4Uyra)px9$p1f%QX1f1dF&*p+Y`WGnnh#>5cD1JbZq$~+b@FgnzbM83)!SD_McIby z0*Z7iAdP^c(y7FNN;d-1T_UYBbc1wB4FUs5OG^yhF|>3eL&wk!!mtPUzP3L3laC#K;vzlUf^xo9QPf6QLbIUiHx>b}zzk)y^P5ipb4Dy<9 zxn3HR5oXCATs@JaDSp3ZxiC8Z=nT|v*E~V7HXJ*a9hO)YStD|`Mhaf~b#|rga^2v( zydX@|_;jJCm~(93nah2HZdQeYoqmj%l%LW+BdOJ~r4eKKPkqSjEOl3%={568-+t}z z_H;=>&CV<4-EkNAiZ}fGA5gT%W{OZ{H7{cI(I29o(vSDvFXJcPv5H>F*E(YN9?irB zO@#?8`3V{34V%3}@~xorHT}YRN$%-aGVv_^!y31X<9qwjA<@`7y%~bu{Q2|J0RhVm z2kXHJ4p6^xzTJNR68`32Lgr%TJo^WB&A8=}{H;(1;~xPL!O9pJ26`LSFHl4)M&ijv zbBK`d`UwdHbVN;z9u=ERl9pZ&rmOJu^JsATb5FtXo!%SHB>N09?D;266?_x-jHJ@> zUqRp!dXeR8YE)WlVo6QXFQ}sEyhE=O`b%83o!2yT4b*ij#uLS4)p`tKU=A9M&iI9P zOc?<`WR-t6kj{GEjXd`0^}SwH)CW&pz;-7s;EmT$EtD(l!l^{>Rvrg&Dc$p$1RXuq zISqLO;T1C)4@!2ZtT+t>KFW34eo_0o-GR9yBgRXQG)%U+*mOH-!`KHC-1rS-tXGbVx!^*Gy&PamD_W1R$nyg6B}x= zPk!JxE;@yabBpcIv~F)yc|SRlHUGYhqA*9WAlC)n3tbS~UTGiq6db{=%W)lemnYX- zG*vJ{K8*Rre`?$ms5lla6OD$HK7Rd!*5^ucW;h=$?Vuh@mF^jS1^v2+<_QLy>^7Iz ziTp?CIp}h`U{UmISQGkL1!b@_-DbqNFG!VXmsDw6Cxo*}Cn}4&_6xgfMt}4(t_)3T zzWgPes#*LLu}Zv`fNOl+SiHX80MW0fNT9NDRKHtHT$KKo&P9LQP0;&%uv1{N(_ES0 z!glu;$H7l?7EuGu^CpA~v68OUD9{G`pgJV%S=GYduZAWQuMfR2ha!!{w?2l~lrT|E zI7xT@R6KKY))(O|L-#uCEzojobV-t1JXngqAv&;zug{^k5QxB?u5jN++I5~9B7NS0 z<0T)yKZJ2D*$+)#@4sE1KV+>H*l+Fc%`HU)Des%>y*QAh1AS_eDzVqNf8s)88t5bu zE$FZ@N#*fN7|ok%DabrK55s2J1@f9OlM06KbGl&Yu=fH!bjs=C{LtnD`nZh7JFZJk z@0R8y-TgmJZo)Nfj%WF3ziGT4m!~1o>TGGE7zP{< z|Fn^OtD}_{guK9Sl`n$9x4{{u_N%;FE`ukvw-(TRVSI36mwwao1(xfSYnR-B)V2kH zt48BFio}3@Lznu4I>sC{R2N=#VWW6j+<;dHhdf)`TvVJLiKR#9;Jvm-hnE(oB7wfP zJj7KlOiBfaM2_8#15S#iu+bbB8#vmi;$IAEMsz!;#Fm4v3u$NL!CVDS;y7UTc$N|lSB zj}RtWFl%)*e+3$@FD!E_C&aGzz*rM)h)xFLm{xhL&6{LgU z_$(jfg{zi^EiE-mbhfZ|Jn6+n%Rh4r8!V=KRl15+9K2F&*jd9XUFyCDSU!`?aO`~G zQRadP-JSK-uXBPo@0;m0=A@PsevuLRMK276EycOZR}^^@?!R=$w!iJC~Aqqz4ShgSXyi%*a6VUaz)qTSiCgL!`%|#Y?A^ z2*=s(lQBKd`Y|EpcEnQax5rJm1zvLjb2tRgYsF4j3+<)K+!fDB$z0^ag6*-7YVud3l3V$Por!{W>MzvDV= z95K=W+$F>F)O;`W1C3=6Ha6FG_efJj3~t>MCN0b}a^jZ8Sh1AW4u6XH>t52!a!Ko4 zB3Z}DECGZi59Slr$xH3HBX=taRlydM%lKzW`KA^zaRKeTo57LY6?9=>W~RL#r)+Mx z^=`CRZwS zgkyi7C~Ep$$-kPQB_su%oUASBy1R`5zzXe%cCA%PJn6o3qvI&~OK2;W-1=c-?R6U>mH@oCe zqC5@SaUp_V38i~h_^BkC6{6hjcE<5WwO>Vuhd~a%jPw&rUSmV-*)Av%RStt-sT~XBMZYPAN^m(KG~cDDFgi?E?Ip<)Eb&C0a`Clvx{ zr;6U>VT9lm3#PTH_2USS3nm3ZgP;lI34aXRKw639MYzMN3#R2^n5xt?+US=sS2}v7 zJb!vaFM^jGaiRqLwO2Uhsrg|m0t0F4+30Sfr?^srO+INBm(*gAQAvZ_leAtqDidzK zm?@tCR-&y@cpqM3?L?tLEnxn{7$KFtL^LE^n&@5N=Ut`a0 zu(9~{sTw(9NuvKoNkcdVl8Z3b;7rV;^qguMpFYGLsNrZ2F5IF?Pr&MnH|zJoa)hX$8US2tSX01PVcVG+@{8gpl@#?^+FsiKrTvs{BV<{t$Og=~fSZD9i@35P1z zEwrOgx`q&w1hD%(%)G#SrEzz1+QCu6Pd_R+^PSnRXm}Rx(HH1+#4JZBEg5#^34GV$ zb${URed9f-@7$mtwY}MCbqq-ZO!R~aHiXykf)x)uGh3X~A^hg?$g^CTc*!#*d^?&lq5tygTk$OcBeCI7iNLHQ4KA9 z_xcG(H30bOY5ri(V#xc?{qOvHD2cy#q(&Ib{~OW5Y{H;E2lIFi(CrotaAIQb0C1y3 zDI;n>feiNzRUC-(SJR{~T+L%Jzae!%)agzHAisDh5fbxSutv;dY#S%lHv%5fTg_&O z5y84Wc`^j%`cWQm7KIEdA+jv^($iIi^;E(0o;U5t<4TYfYv)++&1rs!*0%wTj6_4c zs*D0&KruVy)XdNx@FB?TK%$Kt!fkWpg1@WoGgolBkYPqRrEdHBzH-ERyU>oUAUaB8qW<5c=4$eUP-LRzBf+}r-Xz0HGgg*Lu&-p^cXL2Io zySq`H?7|tgZON~|PPB9f)!w3ldWubQJcn-HXxc}inb!!t@An>PuY*SIoH~hnj zf029lQ|W78|G~OU!IN!;H(`TR*_)V?m9XTH*+A~vZvhx8lph_*+{+ZU%ymqZ_CK z46h8nqX>RI<+99AbOaJ6h$K|Xxg_pu!s3r;)K7^5y!)+XYJiG=3^_Pfv3|Ix(XA81 zBSlVyu(x?=n6N5Z`)v(P_6PXFUi^7G2k`Fnz80Z6J;4<}5IVm=O#43EzGpB%ByO|2 zvreokpv3R6Ihv>!PdSLi+l54bb+eYSuWml#99`5b=i=(w5x%41vlVC?%#I4%IZScX@$h z#|RlL(o_aUguaDE7BSMY;eM*5KUNmu6(QHp$QUYCRZPsk$cVqx4tKU=F`noA>(Cv7 zmfjubpEZXlb!t=EnyR7e1z!fw@z=qTk^GKX57EUn=}KfyIx?jlvYoyFgCiw@LF9R{ z(see;hnx}Fo0T1h66K{8E3wzgcn4~(i5BGzNx_$K!X+IYG2x)B#G*P9P)gc342 zHd3tf!uAMTxFFNP=7>nfHYIKO|6B$qjJFc%=rv_z(RJF8H)`BhE!0|jeb=Sk-7#i2 z3nd{Dk2!-(>yM|U;GUAN-8?fHntZYP$~&d{BS#>+E{KBatQ>xZ+3Hc_(_?}4vF8* zi1P!rnNn=oD-^u+NWwxY@Z#r|M5)sK^P|GtDIKZbLmn+%UPm;xBhHhEvk6Zy*V<3# z(mAvDxe1)#a)v(xy;A;H+$-|8uagojME9=kx*OC~9er*S%}7>G=YtrE?aXZ#=H+UA zacnP*Hkc3-*(4(Kr)a;K*Si^RK}tF>D^VVe7l`2l9k?!15WJmC4ZT7P1qpSW5O|cp zI;>~|TrM~-l(&rktJrJs<4h(0uHD2cQkHTV9Qw$<$?tTLBTr4IXgz8rT+6Yc;#Pzv~E2g{mZpE4~D0g^VeL5{!#la zb=Ph3%107L#~BzqG49N%UfzrritA{CAkjD90q%@{sOIt=+}$p|m|L?FO~Eux#;vbA zPlI?=L?k;xfLeyn`nMYmZl_wE`(_$|6eOs&wahp_GJkx-#6Fl!U$K$RGR|%_ejK-Y_0r2sS81Iy$fEGiv@1QcF)02k(Y!X?eT z8Pr1Ryvn5cQWA{ytFAWlpR*j?$1A>Ah{l1-9h=~A4NyC}?%MFhbnv-(&0SZ3Yd2AZ zbq>|{#9bc-WyG|UU*g$%TKd07`lq%xr}s|oos*{Yyu=;HJY5g5a24J=N0EmutZATy zdOq6ngz0V)hQK0A1F7~C!YlHiL;g0Bk?b5E#h6)=scg|tS)HZ`S@W2$p)`DCR%HG| z){F@wTRE+^=bW1-;DayG7a$wmbk72*}ECqh~{MH$P|CJeuI?40S2Oj$# zK9_Nf1sABkdwlRd#<61*jlg5zen*R$r_8$XNV1LL zNYym2D+l3_ir4O<^5ukg8;I~m7Bx(C((|*LqqK7BG2ZD6%2KD8=MSSV0aC(oKA^6-r?H7_qO*MBN=kxHuSD!gZZX zwzn=so+;##ci1=lTOaKc`r{y?#l3}hJr1nT?>!a7i7~e|X0Uz<-D--A9xxp$FQO)d z*>`B@hrHE=`ruXn5M~YPSjr5`$B^F;Gd<~Jk=fe{XH-^bCnEw%UmaDR z?G^oYENm`o5NEWX=b&jsU*4Jzg-ncwJd#;*Pi@YUjg4REri(D<;qMe(>RTea5Yz;loyGY~B{r1u{e#US&ji`G(<;`mTbN&B)aQ>kTxKg+>JD;Ls z>Wu@(oaiS3=XOkg2~w`~l~Ex;M@!jL2HLZmSGUtdaw|%MC zr-Y!nsWfUf)sS{1q~^f|B8T4QmmuWUI@_`TPvb`1Db$sfW?|o$>eX1Zg6Td&``k)Y zdWP*ed$vZBDQgHIf+c%m9hfR zaj%R}1^K+kF`kk|@@V#LgFAM&N=AI;5n2Vs3giKYD1e+x#S)(an0x}TUOEA2K7?XO>IfZgRPq-+`K1&Kaw}S!ms_OKC6c1l zS7O~=vYsoapt7`Ug^h@{ZL&K~mK~_|U3yStC3p@psp#LiF&wa)LN$+~U&^CRKf!pV zV09ZIiD9>%~He%k3PID1;U1YH<;V4 zuRe~J4%+MZ;2@Q3@zN!8?W31$cp+j7*-o_cDikpdg~-;a3?Gck=`>Zq zbcY?+C!8(Zp$WXTjr{*Y0QMf?j=MH~Ed6Y(=4*(fSvno1BvGxOw<)|r#Cw1o6`80>@XZ~2We5A5r*Bs_^p8-{faT^XM3~`q9 zmv;;a$j6eqAE7tr0vy}ot|Q-cA!}Ur@#yRSaR5~rp{Q{I!Nlm~wu4a!G3%xABXs)x znyi*2ubGnvy6w=d{sR2=Ush`cg|JTzcCKl{zif5=RiOv6-}UFh&qoYkVq!Cq$(whg z%5z&=$7UGoTl=-nV5bl~lYSy6J|4=s-{e)wuP8QYV*OZm#16}`u^p)o`om{FXW*J8 z+oZT%t>10d^G>Sgah4@T-YpIjEOVn}hV*kp{Dg~hh#qcWMH~aKM66LdO7QB#AXZa5 z(iXEVg&_KMU46q9Zq-ssoD$&RaOFC`x`XU5@2JU3W%eSZ z0Zm;Ss;#pEN|kHtdR+=QHKEn@7ljTqyrez16(wz`HN8xum%c9M4yNTJ_okX7(I6Et z>V19}(8{Qzxz!#*E00s2v$L;fWgAkbWX}h(o76(X*|Vo|Q=#^@e_3ox z3je-f_q?znIh0Qp*gor3Yxz#UcQPaI*e6PJ3IGshVpaMBjc_a)sxYjco}k@EXqgjH zq?UE6e#R#mp$xoCH}uf)7I2K8h}$?i^_5e&P22c|ly>ffo9Aw}8{_pF3^1bWCt_M*|r6bQ! Rf1`jVE2$(={MN|tKLGp%tlj_s literal 0 HcmV?d00001 diff --git a/report.md b/report.md index d6e9e8f..a8700c0 100644 --- a/report.md +++ b/report.md @@ -45,7 +45,7 @@ 4. 函数 FindKeysByField 根据传入的字段名和字段的值找到对应的key。 ### 2.1.3 实验进度以及实验结果 #### 实验进度 -已初步实现上述四个函数,查询函数 FindKeysByField 后续会进行优化和完善。 +已初步实现上述四个函数,后续会对查询函数 FindKeysByField 进行优化和完善,并将上述函数添加到 LevelDB 的代码之中。 #### 实验结果 通过测试 @@ -65,9 +65,12 @@ ### 3. 数据结构设计 `key的格式:| key | vlog_page_slot | ` -`vlog_page: | slot0:{vlog_no, offset}, slot1:{vlog_no, offset}, ... | ` -对于每一次读取,用户线程先读取lsm tree中key的slot下标,然后到vlog_page中读取对应的slot内容(**每一个slot都是定长的**),之后再在这个slot中读取value所在的vlog文件号和偏移量offset,之后到对应的vlog文件中读取value。 +`vlog_page: | slot0:{vlog_no(定长), offset(定长)}, slot1:{vlog_no, offset}, ... | ` + +`value 的格式:| attr个数(定长) | attr1_name的长度(定长) | attr1_name(变长) | attr1_value的长度(定长) | attr1_value(变长) | ... |` + +对于每一次读取,用户线程先读取lsm tree中key的vlog_page_slot下标,然后到vlog_page中读取对应的slot内容(**每一个slot都是定长的**),之后再在这个slot中读取value所在的vlog文件号和偏移量offset,之后到对应的vlog文件中读取value。 但是这又带来了一个问题,我们该如何管理vlog_page这个文件?当插入新的kv时,我们需要在这个vlog_page中分配新的slot,在GC删除某个kv时,我们需要将对应的slot进行释放。这里我们选择在内存中维护一个可线性扩展的bitmap。这个bitmap中每一个bit标识了当前vlog_page文件中对应slot是否被使用,是为1,不是为0。这样一来,在插入新kv时,我们可以用bitmap来分配一个新的slot(将bitmap中第一个为0的bit设置为1),将内容进行写入;在GC删除某个kv时,我们将这个slot对应的bitmap中的bit重置为0即可。 @@ -98,8 +101,14 @@ **输出:** 包含该字段和字段数组的 key,由于可能不只有一个,所以返回值为 vector -4. Put_Fields -5. Get_Fields +4. Put_Fields (待实现) + +**功能:** 仿照Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value),通过调用序列化函数,实现以字段形式插入 value + +**输入:** 数据库名,字段名和字段的值 + +**输出:** 包含该字段和字段数组的 key,由于可能不只有一个,所以返回值为 vector +5. Get_Fields (待实现) #### 4.2 实现KV分离 这里只展示和vlog以及GC无关的接口,vlog的创建,管理以及后台线程的GC设计到vlog等新数据结构的实现,较为复杂和庞大,这里不做展示。我们只列出与kv的插入有关的新接口: 1. 搜索vlog_page文件: Status find_slot(const Slice& key, Slot *slot); @@ -111,6 +120,9 @@ ### 5. 功能测试 ### 5.1 在 LevelDB 的 value 中实现字段功能 +#### 5.1.1 功能测试 +1. 能否以字段形式插入并读取数据 +2. 能否以通过字段值查询对应的 key ```` Status OpenDB(std::string dbName, DB **db) { Options options; @@ -129,21 +141,28 @@ TEST(TestSchema, Basic) { std::string key1 = "k_1"; std::string key2 = "k_2"; FieldArray fields1 = { - {"name", "Customer#000000001"}, + {"name", "Customer1"}, {"address", "IVhzIApeRb"}, {"phone", "25-989-741-2988"} }; FieldArray fields2 = { - {"name", "Customer#000000001"}, + {"name", "Customer1"}, {"address", "ecnu"}, {"phone", "123456789"} }; + FieldArray fields3 = { + {"name", "Customer2"}, + {"address", "ecnu"}, + {"phone", "111111111"} + }; // 序列化并插入 std::string value1 = SerializeValue(fields1); std::string value2 = SerializeValue(fields2); + std::string value3 = SerializeValue(fields3); db->Put(leveldb::WriteOptions(), key1, value1); db->Put(leveldb::WriteOptions(), key2, value2); + db->Put(leveldb::WriteOptions(), key2, value3); // 读取并反序列化 std::string value_ret; @@ -158,10 +177,9 @@ TEST(TestSchema, Basic) { } // 测试查找功能 - Field query_field = {"name", "Customer#000000001"}; + Field query_field = {"name", "Customer2"}; std::vector found_keys = FindKeysByField(db, query_field); std::cout << "找到的key有:" << found_keys.size() << "个" << std::endl; - ASSERT_EQ(found_keys[0], key1); // 关闭数据库 delete db; @@ -172,11 +190,18 @@ int main(int argc, char **argv) { return RUN_ALL_TESTS(); } ```` +#### 5.1.2 测试结果 +插入三条数据,name 字段分别为: Customer1, Customer1, Customer2 + +先根据 "name":"customer1"查找,结果为: +![图片](./pic/test_field_1.png) + +在根据"name":"customer2"查找,结果为: +![图片](./pic/test_field_2.png) ### 5.2 单元测试: -1. 测试插入后,是否能读取成功。 -2. 测试插入超过初始vlog_page等slot数量之后,是否还能正常插入,检查vlog_page文件等线性可扩展性 -3. 测试插入后,进行删除,等待GC完成后再读取value和vlog的大小,看看GC过程是否正常进行。 +1. 测试插入超过初始vlog_page等slot数量之后,是否还能正常插入,检查vlog_page文件等线性可扩展性 +2. 测试插入后,进行删除,等待GC完成后再读取value和vlog的大小,看看GC过程是否正常进行。 性能测试: 1. 测试插入的吞吐 @@ -189,14 +214,16 @@ int main(int argc, char **argv) { #### 7. 分工和进度安排 -| 功能 | 完成日期 | 分工 | 是否完成 | -|--------------|--------|--------|------| -| 实现字段设计并通过测试 | 12.8 | 王雪飞 | 已完成 | -| vlog中value的存储格式 | 12.8 | 王雪飞 | -| vlog_page实现 | 12.8 | 马也驰 | -| vlog的GC实现 | 12.29 | 马也驰 | -| 性能测试 | 1.5 | 王雪飞 | -| 功能测试 | 1.5 | 马也驰 | +| 功能 | 完成日期 | 分工 | +|----------------------|-------|------| +| Field相关接口实现 | 12.8 | 王雪飞 | +| value_log中value的存储格式 | 12.8 | 王雪飞 | +| vlog_page 相关接口 | 12.8 | 马也驰 | +| vlog_page实现 | 12.8 | 马也驰 | +| 修改leveldb的接口实现字段功能 | 12.17 | 王雪飞 | +| vlog的GC实现 | 12.29 | 马也驰 | +| 性能测试 | 1.5 | 王雪飞 | +| 功能测试 | 1.5 | 马也驰 |