|
|
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Пытаюсь в RAD Studio DX 10.2 считать данные из MSSQL данные и синхронизировать либо просто перекинуть в MySQL. Данных около 50.000 записей (примерно7Мб). Использую TADOQuery и TADOConnection. К обеим БД успешно подключился и из MSSQL получаю данные. Из MSSQL имею либо многострочный файл на диске, либо TStringList наполненый данными. Каждая строка файла - это одна запись данных, либо Каждая строка в TStringList'е - это одна запись данных. Данные выглядят так: Код: pascal 1. Поле "Description" имеет тип "текст" и содержит в себе текст (включая преносы строк). Я не профи. Пользуюсь delphi изредка, потому заранее прошу прощения за возможные "элементарные" вопросы. Хотелось бы одним циклом и без промежуточного сохранения на диск прогнать все данные одним потоком в MySQL. С TStream не умею работать, но понимаю, что возможно тут это надо использовать. Прошу, накидайте пример как действовать. Не забудьте что записей(инсёртов) много, и возможно надо делать считывание из TStringList и отправку в MySQL порциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:05 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001, задача решается без привлечения Delphi. Иди в профильный (MS SQL) форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:18 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
чччД__задача решается без привлечения Delphi. Иди в профильный (MS SQL) форум. В гугле SSIS. При чем работает достаточно шустро со свистоперделками, салютами и застольями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:20 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Уже делал с помощью PowerShell и перегонял в Firebase, но теперь концепция поменялась и при вытаскивании данных из MSSQL выполняется много хитрых запросов, чтобы получить в конечном итоге из сотен таблиц именно то что надо получить. SSIS уже попробовал, но у него трудности с MySQL и как написал выше перед тем надо выполнить ещё кучу запросов. Кроме того струкстура выглядит так: Сервер1 - MSSQL Сервер2 - мой написаный на Delphi сервис Сервер3 - MySQL Сервер1 и Сервер3 между собой не ладят, но Сервер2 имеет полный доступ на оба. Сервис я уже сделал и извлекаю все данные, но осталось лишь отправить в мускл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:31 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:31 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Тогда можно загнать одним скриптом: INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:34 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Василий 2 Код: pascal 1. 2. 3. 4. 5. Примерно так я и сам понимаю, тоже гуглил :) Представьте, у меня есть заполненый TStringList, но что надо вписать в качестве DestQuery.Params[..].Value и ScrQuery.Fields[..].Value ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:40 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
wadmanТогда можно загнать одним скриптом: INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); Данные я действительно из MSSQL тоже могу сохранить в файл (как уже выше писал). Естати файл так и выглядит, как вы сейчас прислали, только таких 50.000 строк. Но вот мои хотелки: 1. я хочу избежать потерь времени при записи в файл. Это просто ненужная операция. 2. хочу избежать промежуточных действий типа дополнительный скрипт или крон процесс для иморта сохранёного файла в MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:46 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Василий 2 Код: pascal 1. 2. 3. 4. 5. Кстати это легко вызовет Код: html 1. Так как 50.000 записей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:48 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001 Код: html 1. Так как 50.000 записей !не вижу связи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:10 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
авторwhile not SrcQuery.Eof do Это проход по всем записям и мускл не успевает обрабатывать их принятие. Мои вопросы остались не отвечеными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:19 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Естати файл так и выглядит, как вы сейчас прислали, только таких 50.000 строк. Не совсем. В моем примере мускульный вариант вставки сразу трех строк, а не одной. Можно и 100 строк одним махом вставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:33 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
wadman, ну, в моём 50.000 инсёртов. Проблема остаётся открытой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:35 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Попробуй группировать инсёрты трансакциями. Например по тысяче за транзакцию. Глядишь, немного ускорится. Ну и как wadman предлагал одним скриптом по тысяче записей тоже нормальная альтернатива транзакции. Причём 1000 - это условное число - им можно поиграться в сторону уменьшения / увеличения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:45 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001ну, в моём 50.000 инсёртов. Проблема остаётся открытой...1. Прочитали запись 2. Заполнили параметры запроса Код: sql 1. 2. 3. 4. 5. 3. Выполнили запрос 4. Перешли к следующей записи MSSQL 5. GOTO 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:50 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
wadmanНе совсем. В моем примере мускульный вариант вставки сразу трех строк, а не одной. Можно и 100 строк одним махом вставить. Мне тут один бэкап попался Postgresql, так там оказывается в порядке вещей в SQL после INSERT CSV фигачить. За один INSERT можно легко сотню-другую тысяч записей вставить. Буквально за секунду. :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 15:50 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Ребята, в следствии моего незнания "как надо правильно", я сделал так: Код: pascal 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. В приведеном исходнике вы можите видеть моё колдовство: через ADOQuery.ExecSQL; и через ADOConn.Execute(); Вот я дошёл до этого бреда и защёл в ступор. Не могу это разрулить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:09 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Можете видеть, как я сделал не очень хороший цикл и создаю убогим методом запрос-строку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:21 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Можете видеть, как я сделал не очень хороший цикл и создаю убогим методом запрос-строку... какую строку? вижу какой-то SuperQuery который нигде не используется что ты хочешь то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:24 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
используется, я просто закомментировал Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:25 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. Смотрите на закомментированные строки слэшами //, это были мои варианты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:30 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Блин, чтобы не разбираться в моём бреде, напишите свой вариант, потому что я точно что-то напутал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:32 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001 Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Я же сказал и даже выделил _Vasilisk_2. Заполнили параметры запросаНе сформировали заново SQL а заполнили параметры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:37 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Все. Если заменить оба ADOQuery на ADOCommand будет быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39676333&tid=2040600]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 527ms |

| 0 / 0 |
