|
|
|
Отправить много данных в 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 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
что-то я не так делаю. То что вы дали я встроил вместо того запроса и теперь ничего в программе не выполняется и возвращается "Argument out of range" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:20 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001и возвращается "Argument out of range"Строку кода мы должны угадать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:22 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_user00001и возвращается "Argument out of range"Строку кода мы должны угадать? у него там еще еуро и фирма в коде в общем надо программиста тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:23 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
строку не видно, но при отладке пошагово при выполнении строки Код: pascal 1. После моего Unit1 переходит на метод Код: pascal 1. строка 6494 Код: pascal 1. файла Data.DB.pas затем выпадает на методе Код: pascal 1. строка 1158 Код: pascal 1. файла System.Generics.Collections.pas ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:43 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Код: pascal 1. Поправка (сам наткнулся на эти грабли, а вот сейчас забыл). Безопаснее TParam.AssignField. А то типы могут потеряться, с null м.б. проблема и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:24 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001при выполнении строки Код: pascal 1. После моего Unit1 переходит на метод Код: pascal 1. В моем коде такого быть не может. Выкладывайте тот код, какой вы запускаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:26 |
|
||
|
Отправить много данных в 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:57 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
На Лазарусе. MySQL. Рабочий пример. Массовая запись в базу. Если количество записей превышает возможности, проверка в цикле и запись порциями. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 07:23 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
ain-2, S := Format('(%d, "%s", %s, %d, %d, %d, %d, %d, %d, "%d"),', [UN, DateToStrMySQL(FDateBuy), FNakl, Data^.UNP, Ord(Data^.Firm), Data^.Article, Data^.CountBuy, Ord(Data^.Is_Promo), boBuy, Data^.Retail]); небезопасно в общем случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 08:08 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
ain-2, как этот код вписывается в мой вопрос? Что эти строки означают? Прокомментируйте пожалуйста, как мне это применить/встроить при описаной проблеме. Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:19 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Пытаюсь в RAD Studio DX 10.2 считать данные из MSSQL данные и синхронизировать либо просто перекинуть в MySQL. Данных около 50.000 записей (примерно7Мб). Использую TADOQuery и TADOConnection. Качаете ODBC драйвер MySQL под свою архитектуру; Делаете linked server MSSQL->MySQL; На стороне MSSQL обрабатываете N+1 записей; Из них получаете 50000 готовых записей и одним Insert отправляете на linked server MySQL. Что такого с данными делается в Delphi, чего нельзя сделать в MSSQL? Если сводятся данные из нескольких источников, то проще, действительно, через SSIS. Зачем лишняя прокладка на Delphi, если, вероятно, можно обойтись в рамках одного только sql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:33 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
tunknown, user00001Уже делал с помощью PowerShell и перегонял в Firebase, но теперь концепция поменялась и при вытаскивании данных из MSSQL выполняется много хитрых запросов, чтобы получить в конечном итоге из сотен таблиц именно то что надо получить. SSIS уже попробовал, но у него трудности с MySQL и как написал выше перед тем надо выполнить ещё кучу запросов. Кроме того струкстура выглядит так: Сервер1 - MSSQL Сервер2 - мой написаный на Delphi сервис Сервер3 - MySQL Сервер1 и Сервер3 между собой не ладят, но Сервер2 имеет полный доступ на оба. Сервис я уже сделал и извлекаю все данные, но осталось лишь отправить в мускл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:14 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Пытаюсь в RAD Studio DX 10.2 считать данные из MSSQL данные и синхронизировать либо просто перекинуть в MySQL. Данных около 50.000 записей (примерно7Мб). Использую TADOQuery и TADOConnection. К обеим БД успешно подключился и из MSSQL получаю данные. Из MSSQL имею либо многострочный файл на диске, либо TStringList наполненый данными. Каждая строка файла - это одна запись данных, либо Каждая строка в TStringList'е - это одна запись данных. Данные выглядят так: Код: pascal 1. Поле "Description" имеет тип "текст" и содержит в себе текст (включая преносы строк). Я не профи. Пользуюсь delphi изредка, потому заранее прошу прощения за возможные "элементарные" вопросы. Хотелось бы одним циклом и без промежуточного сохранения на диск прогнать все данные одним потоком в MySQL. С TStream не умею работать, но понимаю, что возможно тут это надо использовать. Прошу, накидайте пример как действовать. Не забудьте что записей(инсёртов) много, и возможно надо делать считывание из TStringList и отправку в MySQL порциями. Если использовать, например, UnIDAC, то такая задача легко решается через Batch Updates (у них об этом даже статейка есть со сравнением скорости вставки https://blog.devart.com/using-batch-operations-in-delphi-data-access-components.html ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:21 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
b0rk, UnIDAC - платные. Без них тоже легко решается, но я неправильно записываю код и потому прошу помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:24 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Блин, народ, неужели так сложно?! Уже засран весь топик, а результата всё нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:29 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
Показывай код, что не получается. И на каких данных. И на каком поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:06 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Блин, народ, неужели так сложно?! Уже засран весь топик, а результата всё нет... так программиста ж не зовешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:11 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:19 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001ain-2, как этот код вписывается в мой вопрос? Что эти строки означают? Прокомментируйте пожалуйста, как мне это применить/встроить при описаной проблеме. Код: pascal 1. 2. 3. 4. 5. Я показал суть. В цикле заполняем список нужными данными. Затем отправляем весь список в базу. Код: pascal 1. 2. 3. 4. 5. 6. 7. Непонятное для вас - это детали. Я для данных использую VirtualTreeView, вы иные, важное другое - заполнить в цикле список. Последняя проверка, после заполнения списка, нужна, чтобы в непустом списке убрать с последней записи убрать запятую. Иначе MySQL заругается. Я не показал первую строку списка, полагал, что и так ясно. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 07:10 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Поле "Description" имеет тип "текст" и содержит в себе текст (включая преносы строк). попробуй использовать параметры в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 10:13 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Из MSSQL имею либо многострочный файл на дискеСамый быстрый способ заполнить таблицу из файла - LOAD DATA INFILE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 01:07 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 01:09 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
miksoftuser00001Из MSSQL имею либо многострочный файл на дискеСамый быстрый способ заполнить таблицу из файла - LOAD DATA INFILE Это и так понятно, но как содержимое файла отправить из под моего Delphi написаной программы в мускл (к примеру через LOAD DATA INFILE) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 14:21 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
user00001Это и так понятно, но как содержимое файла отправить из под моего Delphi написаной программы в мускл (к примеру через LOAD DATA INFILE) ?Нанять программиста. Серьезно. PS: В справке всё написано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 15:59 |
|
||
|
Отправить много данных в MySQL одним потоком
|
|||
|---|---|---|---|
|
#18+
white_nigger, ну ты красава! Серьёзно! Не cмог строку написать Код: pascal 1. 2. 3. 4. 5. 6. зато ты негр, меня как негра, на панель посылаешь! Не хорошо поступаешь! Я уже сам всё сделал, как видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 17:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040600]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
103ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 572ms |

| 0 / 0 |
