|
|
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Сделал прогу которая заливает эти данные...В файле около 40000 записей , заливка занимает минут 5-7....Переделал эту прогу в сервлет, и теперь через томкат запускаю....процесс замедлилися в несколько раз, теперь на ту же оперцию вместо 5-7 минут требует около 30 минут...что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 08:13 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Искать узкое место в твоем сервлете. Что здесь еще можно посоветовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 09:15 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
А как это делается! У меня там все как бы просто! Через ODBC драйвер цепляюсь к scv файлу потом как из обычной таблицы вытаскиваю данные из каждого поля в каждой строке...и каждое поле в строке присваивается опеределенной переменной, затем все эти переменный вставляются в базу, затем новый цикл-следующая строка и тд...Локально ведь исполняется быстро! Как оптимизировать.. даже не знаю куда копать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:10 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
попробуй вставлять в базу через batch. Порзиями накапливать в Statement stmt.addBatch (); А потом порциями в базу вставлять stmt.executeBatch (); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:18 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Какая бд? У оракла есть замечательная штука sqlldr, который может залить 40000 записей за пару секунд. или меньше. Велосипед изобретать не надо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:45 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
База DB2, восьмая версия! Батч попробую сенкс! А ни кто не подскажет аналог sqlldr в DB2 и с чем его едят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:48 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
То есть у тебя на одну строку таблицы уходит один запрос к сервлету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:51 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманТо есть у тебя на одну строку таблицы уходит один запрос к сервлету? Нет сервлет запрашивается один раз и файл целиком заливается в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 12:11 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Покажи код сервлета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 12:21 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Только не долбите сильно, это моя первая прога не только на ява а вообще...критику буду учитывать! import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.*; //import javax.swing.*; /* * Created on 28.07.2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ /** * @author struts_e * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ import java.text.DecimalFormat; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class parse_to_database extends HttpServlet { String ESTMC, NPVD, NAME_TMC, ED_IZM, ALT_ED_IZM, TYPE_TOV, SORT_RAZMER, GOST_TU, NUM_DRAFT_OBOZ_GOST_TU, PROIZ_MOSH_GRUS, OSSOBENNOST_IZGOT, REK_ZAVOD, PACKING, IZGOTOVITEL, TNVED, /*NN_AKTYU_ZF, /*NN_AKSU_ZF,*/ NN_DGOK, NN_SSGPO, NN_EEK, NN_SHK, DESCRIPTION, OBL_ISPOL, GROUP; int npvd, num, group_int ; long NN_AKSU_ZF, NN_AKTYU_ZF; String NN_AKSU_STR, NN_AKTYU_STR;//для преобразования long в String. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DecimalFormat fiveDigits = new DecimalFormat("00000"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con_db2 = DriverManager.getConnection("jdbc:odbc:estmc","db2admin","snortman"); Statement st_db2 = con_db2.createStatement(); //st_db2.executeUpdate("Create TABLE ESTMC(KOD_NPVD Varchar(10), NAME_TMC Varchar(100),ED_IZM Varchar(100), ALT_ED_IZM Varchar(20), TYPE_TOV Varchar(100), SORT_RAZMER Varchar(100), GOST_TU Varchar(100), NUM_DRAFT_OBOZ_GOST_TU Varchar(100), PROIZ_MOSH_GRUS Varchar(100), OSSOBENNOST_IZGOT Varchar(100), REK_ZAVOD Varchar(100), PACKING Varchar(100), IZGOTOVITEL Varchar(100), TNVED Varchar(100), NN_AKTYU_ZF character(100), NN_AKSU_ZF character(100), NN_DGOK Varchar(100), NN_SSGPO Varchar(16), NN_EEK Varchar(16), NN_SHK Varchar(16), DESCRIPTION Varchar(100), OBL_ISPOL Varchar(100))"); Connection con = DriverManager.getConnection("jdbc:odbc:csv"); Statement s = con.createStatement(); ResultSet rs = s.executeQuery("select * from книга.csv"); int count = 2;//номер неверной строки! int counter = 0;//количество выбранных строк! int kod = 00001; stop: while (rs.next()){ //while (counter < 100){ counter++; //rs.next(); try{ NPVD = rs.getString(1); //ESTMC = fiveDigits.format(kod) + NPVD; } catch (java.lang.NullPointerException e) { NPVD = ""; } /*try{ NPVD = rs.getString(1); } catch (java.lang.NullPointerException e) { NPVD = ""; }*/ try{ NAME_TMC = new String( rs.getString(2)); } catch (java.lang.NullPointerException e) { NAME_TMC =""; } try{ ED_IZM = new String( rs.getString(3)); } catch (java.lang.NullPointerException e) { ED_IZM =""; } try{ ALT_ED_IZM = new String( rs.getString(4)); } catch (java.lang.NullPointerException e) { ALT_ED_IZM = ""; } try{ TYPE_TOV = new String( rs.getString(5)); } catch (java.lang.NullPointerException e) { TYPE_TOV = ""; } try{ SORT_RAZMER = new String( rs.getString(6)); } catch (java.lang.NullPointerException e) { SORT_RAZMER = ""; } try{ GOST_TU = new String( rs.getString(7)); } catch (java.lang.NullPointerException e) { GOST_TU =""; } try{ NUM_DRAFT_OBOZ_GOST_TU = new String( rs.getString(8)); } catch (java.lang.NullPointerException e) { NUM_DRAFT_OBOZ_GOST_TU = ""; } try{ PROIZ_MOSH_GRUS = new String( rs.getString(9)); } catch (java.lang.NullPointerException e) { PROIZ_MOSH_GRUS =""; } try{ OSSOBENNOST_IZGOT = new String( rs.getString(10)); } catch (java.lang.NullPointerException e) { OSSOBENNOST_IZGOT =""; } try{ REK_ZAVOD = new String( rs.getString(11)); } catch (java.lang.NullPointerException e) { REK_ZAVOD = ""; } try{ PACKING = new String( rs.getString(12)); } catch (java.lang.NullPointerException e) { PACKING =""; } try{ IZGOTOVITEL = new String( rs.getString(13)); } catch (java.lang.NullPointerException e) { IZGOTOVITEL =""; } try{ TNVED = new String( rs.getString(14)); } catch (java.lang.NullPointerException e) { TNVED =""; } try{ NN_AKTYU_ZF = rs.getLong(15); if (NN_AKTYU_ZF == 0){ NN_AKTYU_STR = Long.toString(NN_AKSU_ZF); NN_AKTYU_STR = ""; } } catch (java.lang.NullPointerException e) { System.out.println("Строка номер " + count + " неверная"); } try{ NN_AKSU_ZF = rs.getLong(16); if (NN_AKSU_ZF == 0){ NN_AKSU_STR = Long.toString(NN_AKSU_ZF); NN_AKSU_STR = ""; } } catch (java.lang.NullPointerException e) { } try{ NN_DGOK = new String( rs.getString(17)); } catch (java.lang.NullPointerException e) { NN_DGOK = ""; } try{ NN_SSGPO = new String( rs.getString(18)); } catch (java.lang.NullPointerException e) { NN_SSGPO = ""; } try{ NN_EEK = new String( rs.getString(19)); } catch (java.lang.NullPointerException e) { NN_EEK = ""; } try{ NN_SHK = new String( rs.getString(20)); } catch (java.lang.NullPointerException e) { NN_SHK = ""; } try{ DESCRIPTION = new String( rs.getString(21)); } catch (java.lang.NullPointerException e) { DESCRIPTION = ""; } try{ OBL_ISPOL = new String( rs.getString(22)); } catch (java.lang.NullPointerException e) { OBL_ISPOL = ""; } count ++; //num++; //счетчик //форсирование данных для полей NUM - количество групп //и GROUP - группы try{GROUP = NPVD.substring(0,2); group_int = Integer.parseInt(GROUP);} catch(NullPointerException nullpointer){System.out.println(nullpointer); GROUP = "";} //if (GROUP == null) GROUP = ""; //ResultSet rs_db2 = st_db2.executeQuery("Select GROUP, num from ESTMC WHERE num=(SELECT MAX(num) from ESTMC) and GROUP = '"+GROUP+"'"); ResultSet rs_db2 = st_db2.executeQuery("Select GROUP, num from ESTMC WHERE num=(SELECT MAX(num) from ESTMC WHERE GROUP = "+group_int+")"); try { rs_db2.next(); //String num_str = Integer.toString(num); String num_str = rs_db2.getString(2); num = Integer.parseInt(num_str); System.out.println(num); num = num + 1; }catch(Exception e){num = 1;System.out.println(num + " error " + e);} //формирование кода ESTMC //String num_str = Integer.toString(num); ESTMC = fiveDigits.format(num) + NPVD; if (NN_AKTYU_ZF == 0 & NN_AKSU_ZF == 0 ){ st_db2.executeUpdate("INSERT INTO ESTMC VALUES('"+ESTMC+"', '"+NPVD+"', '"+NAME_TMC+"', '"+ED_IZM+"', '"+ALT_ED_IZM+"', '"+TYPE_TOV+"', '"+SORT_RAZMER+"','"+GOST_TU+"', '"+NUM_DRAFT_OBOZ_GOST_TU+"', '"+PROIZ_MOSH_GRUS+"', '"+OSSOBENNOST_IZGOT+"','"+REK_ZAVOD+"','"+PACKING+"', '"+IZGOTOVITEL+"','"+TNVED+"', '"+NN_AKTYU_STR+"', '"+NN_AKSU_STR+"', '"+NN_DGOK+"', '"+NN_SSGPO+"', '"+NN_EEK+"', '"+NN_SHK+"','"+DESCRIPTION+"','"+OBL_ISPOL+"',"+group_int+","+num+")"); }else if (NN_AKTYU_ZF == 0){ st_db2.executeUpdate("INSERT INTO ESTMC VALUES('"+ESTMC+"', '"+NPVD+"', '"+NAME_TMC+"', '"+ED_IZM+"', '"+ALT_ED_IZM+"', '"+TYPE_TOV+"', '"+SORT_RAZMER+"','"+GOST_TU+"', '"+NUM_DRAFT_OBOZ_GOST_TU+"', '"+PROIZ_MOSH_GRUS+"', '"+OSSOBENNOST_IZGOT+"','"+REK_ZAVOD+"','"+PACKING+"', '"+IZGOTOVITEL+"','"+TNVED+"', '"+NN_AKTYU_STR+"', '"+NN_AKSU_ZF+"', '"+NN_DGOK+"', '"+NN_SSGPO+"', '"+NN_EEK+"', '"+NN_SHK+"','"+DESCRIPTION+"','"+OBL_ISPOL+"',"+group_int+", "+num+")"); }else if (NN_AKSU_ZF == 0) st_db2.executeUpdate("INSERT INTO ESTMC VALUES('"+ESTMC+"', '"+NPVD+"', '"+NAME_TMC+"', '"+ED_IZM+"', '"+ALT_ED_IZM+"', '"+TYPE_TOV+"', '"+SORT_RAZMER+"','"+GOST_TU+"', '"+NUM_DRAFT_OBOZ_GOST_TU+"', '"+PROIZ_MOSH_GRUS+"', '"+OSSOBENNOST_IZGOT+"','"+REK_ZAVOD+"','"+PACKING+"', '"+IZGOTOVITEL+"','"+TNVED+"', '"+NN_AKTYU_ZF+"', '"+NN_AKSU_STR+"', '"+NN_DGOK+"', '"+NN_SSGPO+"', '"+NN_EEK+"', '"+NN_SHK+"','"+DESCRIPTION+"','"+OBL_ISPOL+"',"+group_int+","+num+")"); else st_db2.executeUpdate("INSERT INTO ESTMC VALUES('"+ESTMC+"', '"+NPVD+"', '"+NAME_TMC+"', '"+ED_IZM+"', '"+ALT_ED_IZM+"', '"+TYPE_TOV+"', '"+SORT_RAZMER+"','"+GOST_TU+"', '"+NUM_DRAFT_OBOZ_GOST_TU+"', '"+PROIZ_MOSH_GRUS+"', '"+OSSOBENNOST_IZGOT+"','"+REK_ZAVOD+"','"+PACKING+"', '"+IZGOTOVITEL+"','"+TNVED+"', '"+NN_AKTYU_ZF+"', '"+NN_AKSU_ZF+"', '"+NN_DGOK+"', '"+NN_SSGPO+"', '"+NN_EEK+"', '"+NN_SHK+"','"+DESCRIPTION+"','"+OBL_ISPOL+"',"+group_int+","+num+")"); kod ++; }//while } catch(Exception e){System.out.print("Ошибка " + e);} } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 12:55 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
жесткий стиль :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:00 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Вам смешно а мне женится:) Собствено стиля нет ни какого так как учится не у кого все сам по инету и книжкам...так что вот ...ну первый блин комом.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:04 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext кто будет в этом Г разбираться без форматирования??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:20 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Timm Код: plaintext кто будет в этом Г разбираться без форматирования??? Скопируй их себе в IDE и разбирайся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:21 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:23 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:25 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
тут и разбираться нечего, и так всё видно. было бы время, переписала бы. лучше через PreparedStatement. не знаю как dbase, ав оракле , например, каждый такой insert сохраняется и если 40000 тыс. записей, то существует 40000 statement. а PreparedStatement только параметры подставляй и всё. и через batch в базу. и столько try{} catch на каждую запись из csv тоже ни к чему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:31 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
40 000 update-ов, естественно долго. кстати, если быстро обратиться 2 раза к сервлету, то все сломается ) локальные переменные в сервлете не стоит полями класса объявлять. их лучше объявлять локальными переменными. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:31 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Че то к сервлету это мало имеет отношения... если бы твой сервлет имел вид примерно такой Код: plaintext 1. 2. 3. 4. 5. тогда можно говорить,что это одна и таже программа, а так... х.з. чего у тебя в другой проге! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:35 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Еще так сразу пару замечаний по стилю: 1. Зачем TYPE_TOV = new String( rs.getString(5)) ? Разве нельзя просто TYPE_TOV = rs.getString(5) ? 2. Обычно вроде не отлавливают nullPointerException через try/catch. Лучше if'ами. 3. Опять же было уже здесь, что это не очень хороший стиль так проверять эксепшены: Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 5. Поля класса обычно не принято обзывать заглавными буквами. Заглавными обычно константы. Это что первое в глаза бросилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:48 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext переписывать надо всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 13:56 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
человек же написал что это его первая программа. Смысл какой ругаться на него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 14:28 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Хренчеловек же написал что это его первая программа. Смысл какой ругаться на него? а кто ругается то? переписывать надо действительно всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 14:52 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
Вообще то я сисадмин по своей профессии...а прогу просто вот стала необходимость написать..Я и не претендую на звание програмиста. И на самом деле тяежло без наставника или хотябы команды, да еще и с обсолютного нуля написать все грамотно и красиво. Так что я ждал кучу критики, но вот от johanna такого замечания не ожидал...дать бы вам пару роутеров с фаевролом и попросить настроить EIGRP маршрутизацию, а потом расматривать ваше резюме на должность сетевого админа :-) и удивлятся почему этот человек ни чего не знает он же компьютерщик :). Странно я думал я в начале понятно написал кто я и что я...все поняли, а вы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 14:57 |
|
||
|
Данные из csv в базу!
|
|||
|---|---|---|---|
|
#18+
JekasСделал прогу которая заливает эти данные...В файле около 40000 записей , заливка занимает минут 5-7....Переделал эту прогу в сервлет, и теперь через томкат запускаю....процесс замедлилися в несколько раз, теперь на ту же оперцию вместо 5-7 минут требует около 30 минут...что делать? На чем была написана прога до того, как она стала сервлетом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 14:57 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33251722&tid=2151568]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 542ms |

| 0 / 0 |
