From a4103ad5dad209a367c3a34a16847b7e5b8fd384 Mon Sep 17 00:00:00 2001 From: brorica Date: Sun, 1 May 2022 15:24:54 +0900 Subject: [PATCH] =?UTF-8?q?Refact:=20DSM=20=ED=8C=8C=EC=9D=BC=20=ED=95=98?= =?UTF-8?q?=EB=82=98=20=EB=84=A3=EB=8A=94=20=EC=8B=9C=EA=B0=84=201?= =?UTF-8?q?=EB=B6=84=20=EB=8B=A8=EC=B6=95=20(#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 40 ++++++ .idea/libraries/postgresql_42_3_1.xml | 9 ++ .idea/runConfigurations.xml | 10 -- out/production/storeDSM/Main.class | Bin 2800 -> 1202 bytes out/production/storeDSM/Model/Dsm.class | Bin 825 -> 853 bytes .../storeDSM/Repository/DsmRepository.class | Bin 2228 -> 4169 bytes .../storeDSM/Service/DsmService.class | Bin 3223 -> 3131 bytes src/Config/JdbcTemplate.java | 18 +++ src/Main.java | 18 +-- src/Model/Dsm.java | 41 +++++-- src/Repository/DsmRepository.java | 98 +++++++++------ src/Service/DsmService.java | 115 ++++++------------ storeDSM.iml | 1 + 13 files changed, 202 insertions(+), 148 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/libraries/postgresql_42_3_1.xml delete mode 100644 .idea/runConfigurations.xml create mode 100644 src/Config/JdbcTemplate.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b5ad7a --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### DSM ### +/src/Files/ diff --git a/.idea/libraries/postgresql_42_3_1.xml b/.idea/libraries/postgresql_42_3_1.xml new file mode 100644 index 0000000..e67cfdc --- /dev/null +++ b/.idea/libraries/postgresql_42_3_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/out/production/storeDSM/Main.class b/out/production/storeDSM/Main.class index 5c79df992cf16772334569db3e09d9c7226d855d..3669addf9bde7d8ff107e7ac897663d68b6f46cf 100644 GIT binary patch delta 668 zcmZvY%T5z<6vltk8Rqiu2yKCa^@3N_wsb^M6jTsfK&5QThUKJ8NDUOzsf{}}?pzo% ziLc;R!9XL?2k=GQ`UJ)^)o6^)BhaHpV*^cVEBx5WUli<^GLuyB4%Mje4*a zgl&z{m0zJ({_AB{!wQ-kYmMzdLsg#FgQxArPBXN)7x{_tQkD^mIhT3vYh?f5!)1XH zmj{%i7y8sv#buEti)ELGJhFJ~vO-lO^KZ3FhCvM{Y}LKR##Ruz3^A->RQ*OYV=O0) z(C>&aedk#_dS&LKujXVr^~CS^-j?6o^lI%^qq!MntxELP^rEWi>~dC4Var()sJOd$ zDsC#MBP%c>c2puyP!sISAELb%C&6*CW{0#N@NOpT@v$0 z=|tgs;}iC}o;AjTE>5kBIw1LHPOeu!fI&*;q{R-3$RSE%Q*)u?ML literal 2800 zcmai0TXz#x6#h<=cGBq-+RzrlwJ4W@Kq^{iy0DSI`ludG=+;m;>N=)1#QlnP(=y!-0bkR){Q~|@ zJ5FQsBc^5aW|9Mj)2|OC$O%U5n4Z|LJEo*_Ousv9rfDP6qnj3u`IDRl8k!EzcI8^@z=|3BJ59%kxwbRTs3}0vGGk1jzR1b0v6zu^P1}n? zcZL|%f;oZ^s7$-Mwi3Pv>?$C!q3ysF_fysqI5yvZ_p8YReUSc!);yoD1Q-o`t$x`QplTIi`B z!yUHc>G>6SH-M8G-oyJEKENprr?G|z-*?|X?AXU;XK45kXYyMta93X;Q-P*Z?}fT{ zxrU>&zy(naAK|Qmk2QRPPc@vwS%IZ@ZeRHG{FTN#XTJaI;%QD-{`lc!Yvbz8&G975 zU4%v7z)|*#g3mOZ#{~_a zQAQco)4j$R(_zAgSO?1^>hkg)s@b|yx{8U*NPBg8j0;9f1EXWt&f>ugO;Zufy_K!cH@R zYCRs0W>P7~NT-dsz@lRL!pUlrDn7$;3O65**It&}%@&BbWZR^aO>9$AC^0jT9Gae0 zJ458>-9OF|+Zv+csGi6eeS;nn zuYU^!majr<4!%J@ma zi<>J|J_ek9pcky+xRz9yv*295{wBnAF3QlvvBG02SjV-N6~KBtLaGuQu#r+!7UxJ+ zkau+oW!op<^WBDj3guI%=-oICMWEFm@=qfma2Xrqs#4$=sIBD_sG@kNd>Wd-G^zz| zVIDAv`Pc6KzVTPArFxCPH7sxSldR8^T5Ea8A1a?jFy#OF8mf9HxHpLg`rk2ug~3Js z+Xx->tz2PDVR3W{OD3`OIzNnp=)oa=MIFH)OwN8}Fop%WxsJ0;dJC#K&LdSrjaoEQ zq8oM8t*3Skbrw>qo{wb%P7vLbSd1%J;(^pbAeu>UBBJHgj*)tlSdT-&W<16fVZ!5R z;p`_ITlk$QXd#5HT=}q#dH*gvoG*80@zWg@&*=6{%U^2vV%9V{06FmD{jCi3(ohJqv}aia#rcPlbkZ_ XWOi~#;7fdsuNdp|qywb)^MBx9zTx5- diff --git a/out/production/storeDSM/Model/Dsm.class b/out/production/storeDSM/Model/Dsm.class index 6857faa6bff53faf43726f738e78c7c9b164eeb7..9d2d5c9b624c2bd96f9fd8896fdc63405341c1ef 100644 GIT binary patch delta 429 zcmZvXy-LGS9L3MQNp90vwI;^4F;#38lYkU)aFKwJ#TO{rsY{U#y4b11|NHH*M%R8^z&$+PFsYoG?RfqEep%=C2_pFv|2 zaHCs@Xgi0D!W>%EHgf3K97rrsS9lSa=~$$_$!rPBu(J=jr`d3_OR*{3Y|Qs2tbRzV6C!MO7~ zmkN5mz@%~1y!90(OF_dw?ba)P>%yzln3*m$t6r__wF24qlSb!0Xe*4BPKc@%-FAIH z;=796HC;PoH}YU51;}8Eo`Z=6Ys28NSny0NSRV$bW5Kh?@_uQ1j{^EQQs2DK==hP7tf=O$|D06p80qleN-NK5aG#TfmU?gP?bfWbv|H( n+MGfUnv+ZP@DHs6LjVJr*}hE4Nux5Rto$NAp~50}8kT+mZCg=E diff --git a/out/production/storeDSM/Repository/DsmRepository.class b/out/production/storeDSM/Repository/DsmRepository.class index d1870b1cf10253c7a7bd9d052c1ef95b868eb785..4417bcd3399b1373965bd900169b7a66506da652 100644 GIT binary patch literal 4169 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 diff --git a/out/production/storeDSM/Service/DsmService.class b/out/production/storeDSM/Service/DsmService.class index e640fb6f714da34b3eaee806ffc79ec923bfe51a..1fc385116db51e891a53863cb2a56d26923487b2 100644 GIT binary patch delta 1345 zcmYk4>r+)_6vlu1Y|h!|?DGnG2t^G;4NNW}P=;h>gcndi3?fS_l2c&nK_NA>u)K7! z=(01zZl={K%MwJUXlin%n#LLZQq$)?)IZ@k(eoa3>cd|9dDmLcTJQU;b#&%;`2!dJ z8UF#ejk7)rSnu(GPl)v~ih0mugHL$!u+ifopC}L8$RoZ?r^ll{hD}kr>_3@MogSYS zHv2rm7LTnyxoorbQZ6}l%Pi`(soOnv_{^lwtEJy(HhnhqWSn+(TC*$0Zl1F2J=Q#J z&E5nK&-x6o&*M3d=ZAk?>Nxv@aA?#y5R8Y~orA$tx4~URWw61`cS|S@cDV%uH&fwY zHh1pqtmsKqtmxU2G%TXVa1#p+cTnk&_6>!{!`v&|P2PMTe<%sZ@Vo|BlYy zreuG2s;e(2!b?$JHXP;^!>bH>yk>ZvHymP3sjlRfiu%5-wn*-qhJZoCTT~j3*mecM z_E15q;cbpOkjE!=piSf(6mi>S7HaTuni;2!)V-61*&f%XOBH!ddc3VcDwSV6?2FTE1-YV2WZ>$zd9| z=wy_E274=u^>?&iHL6h+{286s@*gKpdDF$3k>N~N2I5b0ELuXXxVOt|`z}>n^Rjhx z!CGSK3BL!eu@Yx6*c&Tam@G?Vk1=hCNP6OzJpUN+vTsN0Rt6vYXNqTd#Uc$H-5USfl@}jx;d~uJ0JmT=P6XX@TK9 z7xhdR`=~?A4L16#2WmL3tEYA0Q@ZdO?&K`X7~>wkr(TRkaaZs&E4d(ikyTuxf!|o2 zkztQSS;T&^?h-Pb6ZdXCKZgcb;j5Dxu%m*tv`&snYIqtTR7<~trm}CD<1oYmfg2otB)55l!tycZ z>YJx;{x~-xxr)*ge+-M3l@T|QDY1@x?$su?X$RUfaurI3d_BL8b(uY^ru*6gRV&pl zahr-vE~NF8%VVDzCv=6dNBd=M`Q)D8rwSbkg}9%u^!JterNln1Q9q`0wjz(q*PXG? F{0pB&=63)9 delta 1420 zcmYjQTU3-)6#mZqGxN{18~C_+W$BvWAM5JP07O&9HE z(&bomk8VzBRv1ix-Bztyc3G`@X{{byt6o}5U-GF3b4A~o>B7Um&p!L|{d<3VpA){Z zy!bbN&3*!44L-6^fo>BwSg@hnjdI**;wB4@^ktigumu-x)}HMaMURPy1&Lc+xK*FM zUgGpyXva3QB`#LIMq&ICtP+qr!oy*IU)0~!*B_AxpjKi9DkavVTEIKs+a3w`LZ8%2*wA2jAQTzujrPPcop{`ZCnTQ4QxXb?Ogt^|48{c9p=eK}-`^11sX;29 zm3U6OpO<(6FG{?GQ4=pqyn=CwSFuInHB?Ky&axNTOB&w5n*!PY78Go2+`T>lVR$1+Q>cSYSred^w-dq!8~9AeObuFLN1+Vl(eD%mtrkXfpw@Q#%guM zRnqoT_FyuCU=?G ztNPu(tgal(J`Pzq4ewe<0zq}iT^cVtj@*h#*pu)jkw?u;-|~$bPg*P3XNerkIZ$JH zGeU{Ej(IUFl30>}x0UD8&IH_ADejy|)q4uRaJzw1IL+-gpt~DIDdiG&x0H+&u|Jh> z)x~Q#(lwYOCDSD2Q#SWGn>)$IzQqQ7k1O#r8VS@w$Y%VCjrfiFX#{ZwSK)WGrf3== zY!$a`1L~7<} zuuzPT5u)bdZynf#HUgeWX;)Jt%l}N}8tUt?V2%lH6XhnPiFU&8(uS zLVjiZE}F$MAc^IPxt}JOW>2y1O+jpikFb7pa9_8k2rDKLJ`yn4NTXiWz<(yw0N2rF!}a)(r^V1I%&?X`^zoiS&kovdOUZqI E1Lqk1KmY&$ diff --git a/src/Config/JdbcTemplate.java b/src/Config/JdbcTemplate.java new file mode 100644 index 0000000..1db2ef3 --- /dev/null +++ b/src/Config/JdbcTemplate.java @@ -0,0 +1,18 @@ +package Config; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JdbcTemplate { + + private final String url = "jdbc:postgresql://localhost:5432/geor"; + private final String user = "postgres"; + private final String password = "1"; //password 입력 + + public Connection getConnection() throws SQLException { + Connection connect = DriverManager.getConnection(url, user, password); + connect.setAutoCommit(false); + return connect; + } +} diff --git a/src/Main.java b/src/Main.java index 5656f9d..40a4d6c 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,7 +1,4 @@ import Service.DsmService; - -import java.io.IOException; -import java.nio.file.*; import java.sql.SQLException; public class Main { @@ -9,19 +6,12 @@ public class Main { private static DsmService dsmService = new DsmService(); private static String rootPath = "src/Files"; - public static void main(String[] args) throws SQLException { + public static void main(String[] args) { long startTime = System.currentTimeMillis(); - - try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(rootPath))) { - for (Path file: stream) { - // System.out.println(file.getFileName()); - dsmService.run(rootPath + "/" + file.getFileName().toString()); - } - } catch (IOException | DirectoryIteratorException ex) { - System.err.println(ex); - } - + DsmService dsmService = new DsmService(); + dsmService.save(); + long endTime = System.currentTimeMillis(); System.out.println(String.format("코드 실행 시간: %20dms", endTime - startTime)); } diff --git a/src/Model/Dsm.java b/src/Model/Dsm.java index cf05fc0..afdb724 100644 --- a/src/Model/Dsm.java +++ b/src/Model/Dsm.java @@ -1,14 +1,37 @@ package Model; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; -@Getter @Setter @AllArgsConstructor +/** + * Dsm 파일에 대한 ReadStream 을 관리하는 도메인 + */ public class Dsm { - - private double x; - private double y; - private double z; - + + private final File dsm; + private final BufferedReader reader; + + public Dsm(File dsm) throws FileNotFoundException { + this.dsm = dsm; + reader = new BufferedReader(new FileReader(dsm)); + } + + public BufferedReader getReader() { + return reader; + } + + public String getDsmName() { + return dsm.getName(); + } + + public void close() { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/Repository/DsmRepository.java b/src/Repository/DsmRepository.java index 4d38a29..b50efd5 100644 --- a/src/Repository/DsmRepository.java +++ b/src/Repository/DsmRepository.java @@ -1,51 +1,73 @@ package Repository; -import Model.Dsm; +import Config.JdbcTemplate; +import Model.Dsm; +import java.io.BufferedReader; +import java.io.IOException; import java.sql.Connection; -import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.ArrayList; +import java.util.List; public class DsmRepository { - - public void saveDsm(ArrayList dsm) throws SQLException { - String url = "jdbc:postgresql://localhost:5432/geor"; - String user = "postgres"; - String password = ""; //password 입력 - try - { - Connection connect = null; - connect = DriverManager.getConnection(url, user, password); - - if(connect != null) { - System.out.println("Connection successful!!"); - } - else { - throw new SQLException("no connection..."); + + private JdbcTemplate jdbcTemplate = new JdbcTemplate(); + private final int batchCountLimit = 4096; + + /** + * DsmService 에서 수집한 모든 DSM read stream 배열 전달받음 + */ + public void save(List dsmList) { + try(Connection connect = jdbcTemplate.getConnection()) { + setPsTmt(connect, dsmList); + connect.commit(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private void setPsTmt(Connection connect, List dsmList) throws SQLException { + String sql = "INSERT INTO DSM VALUES(?, ?, ?)"; + long totalBatchCount = 0; + try (PreparedStatement ps = connect.prepareStatement(sql)) { + for (Dsm dsm : dsmList) { + long startTime = System.currentTimeMillis(); + System.out.printf("save %s ... ", dsm.getDsmName()); + totalBatchCount += readDsm(ps, dsm); + dsm.close(); + long endTime = System.currentTimeMillis(); + System.out.println(String.format("코드 실행 시간: %20dms", endTime - startTime)); } - - connect.setAutoCommit(false); - - // sql문 - String sql = "INSERT INTO DSM VALUES(?, ?, ?)"; - PreparedStatement ps = connect.prepareStatement(sql); - - for(Dsm temp : dsm){ - ps.setDouble(1, temp.getX()); - ps.setDouble(2, temp.getY()); - ps.setDouble(3, temp.getZ()); - ps.addBatch(); - ps.clearParameters(); + } catch (SQLException | IOException e) { + // DSM 파일의 하나라도 오류가 나면 해당 파일 전체 작업 rollback. + System.err.printf("오류, 다음 %d 개의 작업 rollback\n", totalBatchCount); + connect.rollback(); + e.printStackTrace(); + } + System.out.printf("\ntotalBatchCount : %d\n", totalBatchCount); + } + + private int readDsm(PreparedStatement ps, Dsm dsm) throws IOException, SQLException { + BufferedReader reader = dsm.getReader(); + int batchCount = batchCountLimit, batchResult = 0; + String line; + while ((line = reader.readLine()) != null) { + String[] s = line.split(" "); + ps.setDouble(1, Double.parseDouble(s[0])); + ps.setDouble(2, Double.parseDouble(s[1])); + ps.setDouble(3, Double.parseDouble(s[2])); + ps.addBatch(); + ps.clearParameters(); + if(--batchCount == 0) { + batchResult += ps.executeBatch().length; + batchCount = batchCountLimit; + ps.clearBatch(); } - - ps.executeBatch(); - ps.clearParameters(); //Batch 초기화 - connect.commit(); - - } catch (SQLException ex) { - throw ex; } + batchResult += ps.executeBatch().length; + ps.clearBatch(); + System.out.printf("%d records\n", batchResult); + return batchResult; } } diff --git a/src/Service/DsmService.java b/src/Service/DsmService.java index 6bc4acb..3a557ab 100644 --- a/src/Service/DsmService.java +++ b/src/Service/DsmService.java @@ -2,86 +2,47 @@ import Model.Dsm; import Repository.DsmRepository; - import java.io.File; import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.sql.SQLException; import java.util.ArrayList; +import java.util.List; public class DsmService { - - private File file; - private ArrayList arr = new ArrayList<>(); - private DsmRepository dsmRepository = new DsmRepository(); - - public void run(String pathName) throws SQLException{ - // 파일 객체 생성 - file = new File(pathName); - setArr(); - } - - private void setArr() throws SQLException { - try{ - //입력 스트림 생성 - FileReader file_reader = new FileReader(file); - - String temp = ""; - double x = 0.0, y = 0.0, z = 0.0; - int cur = 0, flag = 0, cnt = 0; - - while((cur = file_reader.read()) != -1){ - char c = (char)cur; - if(('0' <= c && c <= '9') || c == '.') { - temp += c; - } - else{ - if(temp.equals("")) { - continue; - } - if(flag == 0) { - x = Double.parseDouble(temp); - } - else if(flag == 1){ - y = Double.parseDouble(temp); - } - else { - z = Double.parseDouble(temp); - arr.add(new Dsm(x, y, z)); - cnt++; - if(cnt >= 1000000) { // heap overFlow 발생하기 때문에 100만 단위로 끊어줌 - dsmRepository.saveDsm(arr); - // printDsm(arr); - cnt = 0; - arr.clear(); - } - } - flag++; - flag %= 3; - temp = ""; - } - } - // 마지막 남은 좌표들 한번에 저장 - dsmRepository.saveDsm(arr); - arr.clear(); // clear 해줘야지 추후 여러개의 dsm 파일 저장 시 오류 없이 가능 - file_reader.close(); - - } catch (FileNotFoundException e) { - e.getStackTrace(); - } catch(IOException e){ - e.getStackTrace(); - } - } - - /** - * test용 x,y,z 찍어보는 함수 - * @param dsm - */ - void printDsm(ArrayListdsm){ - for(Dsm temp : dsm) { - System.out.println(temp.getX() + " " + temp.getY() + " " + temp.getZ()); - } - } - + + private final DsmRepository dsmRepository; + + public DsmService() { + dsmRepository = new DsmRepository(); + } + + public void save() { + dsmRepository.save(getDsmList()); + } + + /** + * DSM 파일들에 대한 read stream 생성 + */ + private List getDsmList() { + File[] files = findDsm(); + List dsmList = new ArrayList<>(); + for (File file : files) { + try { + dsmList.add(new Dsm(file)); + } catch (FileNotFoundException e) { + System.err.printf("error : %s\n", file.getName()); + e.printStackTrace(); + } + } + return dsmList; + } + + /** + * 지정한 경로 내의 모든 DSM 파일 가져옴 + */ + private File[] findDsm() { + String path = "src/Files"; + String extension = "xyz"; + File directory = new File(path); + return directory.listFiles((dir, name) -> name.endsWith(extension)); + } } diff --git a/storeDSM.iml b/storeDSM.iml index d75c2f5..19e3535 100644 --- a/storeDSM.iml +++ b/storeDSM.iml @@ -25,5 +25,6 @@ + \ No newline at end of file