|
|
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. Есть задача - из БД выбрать все данные за определенный день и запихать их в массив для последующей обработки. Но вот и проблема: Сейчас кол-во записей достигает уже 185000 за день, и впроцессе выполнения запроса выдает сообщение: Program raised exception class EOutOfMemory with message 'Out of memory' Текст запроса: Код: plaintext 1. 2. 3. ... а в программе ... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. С уважением, Ihor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 13:32:29 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
понятно, что вываливается... а для чего ты такие объёмы в массив суёшь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 13:36:12 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
STEL_A - номер телефона абонента, который звонит. Необходимо выбрать все номера за определенный промежуток времени (чаще всего, сутки) и выбрать все разговоры с этого номера, которые удовлетворяют определенному вопросу. Пробовал делать все через запросы, т.е, вначален выбираю все значения STEL_A ,потом для каждого выполняю запрос на поиск опред. промежуточных данных (сразу выбрать все данные для заданного условия не получается). Но по времени эта процедура длиться минут 20-30, машина виснет. Хочу вначале выбрать все данные в массив, и там их обрабатывать (что по сравнению с запросом у меня заняло на порядок меньше времени). Но вот и появился этот глюк... С уважением, Ihor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 14:25:29 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
с таким подходом тебе лучше перейти на BerkleyDB почитай хорошую книгу по SQL в конце-концов давай ТЗ в студию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 14:53:47 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
я не в тему или всё же ХП может тут помочь отцу русской демократии??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 15:17:17 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
Испльзуй ХП c FOR SELECT. Внутри строится выборка, а в теле блока begin/end рассчитывай. У меня строится аналитеческая выборка из 6 таблиц твоего размера за неск секунд (с построением промежуточных итогов даже вручную) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 15:18:45 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
2vis: Да, согласен. Такой подход не есть гут. :-( Просто необходимо эти данные получать как-можно скорее, вопрос о времени стоит на первом месте. Само задание. Есть три поля STEL_A - номер абонента, который звонит (тел. А) DBEGDATE - дата и время начала разговора (к примеру, 08.07.2004 0:00:31) NDURATION - длительность разговора (сек.) Есть данные Код: plaintext 1. 2. Тут получается: разговор начался в 2:46:59, длился 12 сенуд (закончился в 2:47:11) и начался след. разговор в 08.07.2004 2:47:44. Тут все нормально. Но необходимо выбрать для каждого номера телефона след. ситуации: Код: plaintext 1. 2. 3. Получается, что в определенный момент с одного и того же телефона в одно ито же время ОДНОВРЕМЕННО ПРОИСХОДЯТ ДВА РАЗГОВОРА ,что просто не возможно. Т. е., получили пример так называемого "зависшего разговора" (линия не освободилась, а абонент начал другой разговор (по другому каналу, другой линии) ) Из-за таких случаев ему выставляется б'ольший счет за разговоры ВОТ эти случаи и надо отобрать, чтобы исправлять проблему сразу после обнаружения, а не после жалобы клиента... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 15:19:15 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
2VF, 2d'Evil А можно листинг такой процедуры? (просто я в этом деле новичек и никогда не приходилось еще работать с ХП, а тем более, через Дельфи) С уважением, Ihor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 15:21:41 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
работать с ХП можно через IBStoredProc, а ещё можно простым Query вызывать строкой типа Код: plaintext Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 15:31:36 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
как насчет такого запроса? Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 18:32:53 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
а вот одна из моих. там кстати есть принятие решения - нужно ли возвращать эту строку ни клиента (нужно ли делать suspend) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 16:02:59 |
|
||
|
Out Of Memory ;-(
|
|||
|---|---|---|---|
|
#18+
Select * From table {...далее идет перебор всех условий } Order by STEL_A,DBEGDATE; Ну, а в "перебор всех условий" нельзя ли сразу все условия подставить? Пусть сервер все запросы и выполняет. Динамически формируй запросЮ вот и все. Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 16:14:34 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32605874&tid=1578231]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
199ms |
get topic data: |
5ms |
get forum data: |
4ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 471ms |

| 0 / 0 |
