|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
Всем привет, подскажите пожалуйста как сохранить 10000 записей в одной процедуре, как лучше реализовать через insert в цикле php долго пытаюсь сохранить данные экг ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 08:55 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
lana92 Всем привет, подскажите пожалуйста как сохранить 10000 записей в одной процедуре, как лучше реализовать через insert в цикле php долго пытаюсь сохранить данные экг Но как это можно реализовать, нужно спрашивать в разделе php ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 09:18 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
lana92, В php ни в зуб ногой. Но чисто из теоретических соображений поинтересуюсь : на каждый insert новый connect делаете? PS : вообще отличный кейс для моего "пыточного аппарата" для студентов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 09:19 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
lana92 Всем привет, подскажите пожалуйста как сохранить 10000 записей в одной процедуре, как лучше реализовать через insert в цикле php долго пытаюсь сохранить данные экг В php есть библиотека с BulkInsert ? В C# вы набиваете данные в DataSet и делаете ему BulkInsert. Через класс SqlBulkCopy . Посмотрите, есть ли эквивалент под PHP. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 09:31 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
Glebanski, ну сперва сделал процедуру для insert и каждый раз ее вызывал, и так получалось каждый раз коннектиться при прохождении по циклу, а это не очень. Потом изменил: собирал в цикле список values и уже разом отправлял insert, но есть ограничение на 1000 записей, можно конечно разделить массив на 10 insert, но мне кажется это тоже совсем не лучшее решение ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 09:38 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
lana92, Код где? Должен быть какой-то bulk insert ковыряй свою библиотеку mssql для пыха. https://www.php.net/manual/ru/function.sqlsrv-prepare.php ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 09:55 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
Отдайте все эти 10000 записей в параметр хранимой процедуры в виде xml или json (второе - если сервер 2016+), внутри средствами sql разберите, и вставляйте, сколько душе угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 20:24 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
uaggster Отдайте все эти 10000 записей в параметр хранимой процедуры в виде xml или json (второе - если сервер 2016+), внутри средствами sql разберите, и вставляйте, сколько душе угодно. Злодей! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 08:09 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
uaggster Отдайте все эти 10000 записей в параметр хранимой процедуры в виде xml или json (второе - если сервер 2016+), внутри средствами sql разберите, и вставляйте, сколько душе угодно. Партянка из INSERT будет быстрее, чем парзить строки, xml, json. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 08:16 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
Притом в начале вставок явно открыть транзакцию, в конце закрыть. Вообще муть какая-то, в этом случае загрузку лучше сделать через файл и утилиту bcp. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 11:46 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
a_voronin Партянка из INSERT будет быстрее, чем парзить строки, xml, json. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 12:03 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
a_voronin uaggster Отдайте все эти 10000 записей в параметр хранимой процедуры в виде xml или json (второе - если сервер 2016+), внутри средствами sql разберите, и вставляйте, сколько душе угодно. Партянка из INSERT будет быстрее, чем парзить строки, xml, json. Да щас, конечно. Во первых, чтобы это хоть как то сравнилось по скорости - это нужно обрамить внешней транзакцией, а во вторых оформить сам запрос на вставку как параметризованный. Кроме того, всё это нужно проделать в одном коннекте. И даже в этом случае - 10 тыс. вызовов, притом синхронных, с клиента - это та еще песня. Разница будет раз в 100, в пользу парсинга json или openxml. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 13:19 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
uaggster a_voronin пропущено... Партянка из INSERT будет быстрее, чем парзить строки, xml, json. Да щас, конечно. Во первых, чтобы это хоть как то сравнилось по скорости - это нужно обрамить внешней транзакцией, а во вторых оформить сам запрос на вставку как параметризованный. Кроме того, всё это нужно проделать в одном коннекте. И даже в этом случае - 10 тыс. вызовов, притом синхронных, с клиента - это та еще песня. Разница будет раз в 100, в пользу парсинга json или openxml. А вы тест проведите. Я такой делал. Имеется ввиду парзить XML - JSON, против отправки десятка команд по 1000 INSERT. Речь не идет о выполнении INSERT по одному. BULK INSERT не рассматриваем, ибо он еще быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:37 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
a_voronin А вы тест проведите. Я такой делал. Тест Код: sql 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.
descrrows_affectedelapsed_time (ms)xml1000002924footcloth of inserts10000017503 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:13 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
Я как-то проводил клиент-серверные тесты, наиболее выгодным оказалась вставка по 800-600 INSERT в пачке и это мало зависело от ширины таблицы по сравнению с XML. Тем не менее, XML оказался форматом с боле простой реализацией и иногда показывал сравнимые результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:17 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
a_voronin, Владислав Колосов, и какие же были методики тестирования? Добавим "пачки" Код: sql 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.
descrrows_affectedelapsed_time (ms)xml1000003033batches of inserts10000011310footcloth of inserts10000015806 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 17:11 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
invm, приложение читало данные из файла, формировало строки INSERT запросов в пачки по заданному количеству строк и выполняло полученный код на сервере до исчерпания строк в источнике. Либо локально формировал XML и отправлял его на сервер во временную процедуру, которую же создавало приложение. Использовал ODBC протокол. Но это было давно, во времена Windows XP. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 18:07 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
Владислав Колосов, Во времена XP все было несколько по-другому... Более корректный тест Код: sql 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.
descrrows_affectedelapsed_time (ms)xml1000008080batches of inserts10000010239footcloth of inserts10000016092 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 18:25 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
invm, возможно, через openxml - будет еще быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:31 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
uaggster, возможно. Особенно, если столбцов будет много. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 20:24 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
lana92, Ваш случай , практ. один в один. Тоже с пхп, опять-таки. Ну и вроде уже обсуждали производительность альтернативных вариантов такой вставки, table type обгоняет всех, кроме bulk insert. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 07:02 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
invm a_voronin, Владислав Колосов, и какие же были методики тестирования? Добавим "пачки" Код: sql 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.
descrtrows_affectedtelapsed_time (ms)xmlt100000t3033batches of insertst100000t11310footcloth of insertst100000t15806 Я тестировал пуская запрос из клиентской тулзы. Дело было на 2005 и давно. Ваш тест показывает, что из xml вставляется быстрее, но этот тест не совсем тот случай, который у ТС, у который был у меня. Отсутствует один шаг -- xml приходит в текстовом виде и должен быть сначала распарзен. У вас же на входе подготовленный xml: @x xml;. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 09:16 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
a_voronin Отсутствует один шаг -- xml приходит в текстовом виде и должен быть сначала распарзен. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 09:55 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
В общем, из строковых вариантов - самый быстрый json, как и ожидалось. А вот то, что OPENXML оказался медленнее XQuery - для меня неожиданность. Код: sql 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.
descr rows_affected elapsed_time (ms)json 100000 5992xml 100000 8498batches of inserts 100000 14162OPENXML 100000 16069footcloth of inserts 100000 25186 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 18:46 |
|
Сохранение 10000 записей в одной процедуре
|
|||
---|---|---|---|
#18+
uaggster В общем, из строковых вариантов - самый быстрый json, как и ожидалось. А вот то, что OPENXML оказался медленнее XQuery - для меня неожиданность. descr rows_affected elapsed_time (ms)json 100000 5992xml 100000 8498batches of inserts 100000 14162OPENXML 100000 16069footcloth of inserts 100000 25186 Ээээ, горе-тестировщики, а сборку JSON-XML выполняет дух святой? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 19:31 |
|
|
start [/forum/topic.php?fid=46&msg=39962778&tid=1686049]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 169ms |
0 / 0 |