Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорение проброса данных из лок. базы в сетевую, MySql + Builder 2009 
:(
    Опции темы
vikaz
Дата 22.6.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Формучане, всем доброго вечера.
Возник сл. вопрос:
Есть локальная база, многим известный КЛАДР.
Так вот мне нужно определенные данные перебросить в сетевую БД (MySQL)
Есть вот такой код, но он работает медленно, как это можно ускорить?
Код

for (int i = 0; i < ListLoad->Count; i++) //ListLoad - список в котором содержится список загружаемых областей
 {
  AnsiString Kod = Load_Kladr (ListLoad->Items->Strings[i].SubString(2,2));
  


  Query->DatabaseName = Path_DB; //Path_DB - путь к папке откуда запускается программа
  Query->SQL->Clear();
  AnsiString Buf = "select * from "+ ExtractFileName(FilenameEdit_Street->Text) +" where code like  \""+Kod+"_______________\" order by code";
  Query->SQL->Add(Buf);
  Query->Open();
  Query->First();
  sGauge->Progress = 0;
  sGauge->MaxValue = Query->RecordCount;
  for (int j=0; j < Query->RecordCount; j++)
  {
   MyCommand->SQL->Clear();
   MyCommand->SQL->Add("Insert into kladr (Name_Kladr, Socr_Kladr, Code_Kladr, Index_Kladr) values (\"" +
   Query->FieldByName("Name")->AsString + "\",\"" + Query->FieldByName("Socr")->AsString + "\",\"" +
   Query->FieldByName("Code")->AsString    + "\",\"" + Query->FieldByName("Index")->AsString +"\")");
   MyCommand->Execute();
   sGauge->Progress = j+1;
   Query->Next();
  }
  Query->Close();
}


Заранее спасибо!

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  1.JPG 67,46 Kb


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 23.6.2009, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



vikaz, думаю кардинально иного решения нет - если конечно нет родного конвектора из одной БД в другую. 
Посмотрев на код - замечу - что ты все делаешь в "визуальном режиме", т.е. сам наблюдаешь как добавляются записи - это как известно тоже требует время на перерисовку контрола. Допусти у Query->DataSource = dsQ; ибо твоего не знаю.
Немного изменю кусок кода:
Код

  //....
  Query->First();
  ds->Enabled = false;
  while(!Query->EoF)
  {
   MyCommand->SQL->Clear();
   MyCommand->SQL->Add("...");
   MyCommand->Execute();
   sGauge->Progress++;
   Query->Next();
  }
  ds->Enabled = true;
  //....

PM MAIL   Вверх
vikaz
Дата 23.6.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



mrbrooks, спасибо, что откликнулся. Вот только жаль, что решения другого нет. Я вот что заметил. Когда я эти же данные пробрасываю в локальную БД, скорость на порядок выше. А вот когда пытаюсь в MySQL, то скорость не высокая. Может попробовать сменить БД, допустим на FireBird?



--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 23.6.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(vikaz @  23.6.2009,  10:23 Найти цитируемый пост)
Может попробовать сменить БД, допустим на FireBird?

 smile 

да не думаю, что будет колоссальный прирост. тем боле инфу переливаешь через сеть. в общем суть моего предложение минимизировать визуализацию самого копирования. 

а что используешь для коннекта к MySQL? Не ADO ли?

Добавлено через 3 минуты и 31 секунду
кстати а КЛАДР в какой СУБД хранится?
PM MAIL   Вверх
vikaz
Дата 23.6.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(mrbrooks @  23.6.2009,  10:27 Найти цитируемый пост)
а что используешь для коннекта к MySQL? Не ADO ли?

нет, исполльзую MyDAC.

Цитата(mrbrooks @  23.6.2009,  10:27 Найти цитируемый пост)
кстати а КЛАДР в какой СУБД хранится? 

Это простые DBase в OEM кодировке (DOS).

1C же как-то пробрасывают эти данные с большой скоростью.  smile 


Это сообщение отредактировал(а) vikaz - 23.6.2009, 10:50


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 23.6.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(vikaz @  23.6.2009,  10:47 Найти цитируемый пост)
1C же как-то пробрасывают эти данные с большой скоростью.

скорее всего они работают на прямую с API - никаких компонентов  smile 

тузлу dbf2mysql.exe не пробывал?

Добавлено через 2 минуты и 33 секунды
это не смотрел?
PM MAIL   Вверх
vikaz
Дата 23.6.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(mrbrooks @  23.6.2009,  11:08 Найти цитируемый пост)
тузлу dbf2mysql.exe не пробывал?

Нет, пока не пробывал, гляну.


Цитата(mrbrooks @  23.6.2009,  11:08 Найти цитируемый пост)
это не смотрел? 

посмотрел, но на скорый глаз, не до конца понял, что они там хотели показать. Сегодня дома гляну. СПС



--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
xvr
Дата 23.6.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Сформируй SQL запрос к MySQL в файле (в виде текста) и скорми его MySQL напрямую (через mysql.exe)
И запрос лучше формировать один - insert ... values ... позволяет задать много этих самых values
А еще у MySQL есть утилита mysqlimport.exe для импорта из текстовых файлов (может быть быстрее, а может и не быть  smile )

PM MAIL   Вверх
vikaz
Дата 23.6.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(xvr @  23.6.2009,  12:16 Найти цитируемый пост)
Сформируй SQL запрос к MySQL в файле (в виде текста) и скорми его MySQL напрямую (через mysql.exe)

Я же перебрасываю данные не между MySQL, а из локальной в сетевую. то что можно скормить файл, я тоже знаю, но если честно, не совсем понимаю, как это поможет в моем случае?


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 23.6.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(vikaz @  23.6.2009,  13:26 Найти цитируемый пост)
не совсем понимаю, как это поможет в моем случае? 

Мускул может загрузить инфу из текстового файла при соблюдении некоторых правил - сепараторы и т.п.
Для этого - если возможно - экспортировать в текстовый файл данные из DBase.


PM MAIL   Вверх
xvr
Дата 23.6.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(vikaz @ 23.6.2009,  13:26)
Цитата(xvr @  23.6.2009,  12:16 Найти цитируемый пост)
Сформируй SQL запрос к MySQL в файле (в виде текста) и скорми его MySQL напрямую (через mysql.exe)

Я же перебрасываю данные не между MySQL, а из локальной в сетевую. то что можно скормить файл, я тоже знаю, но если честно, не совсем понимаю, как это поможет в моем случае?

Запрос пойдет через native интерфейс MySQL, что может радикально сказаться на скорости обработки (в положительную сторону). Кроме того, один запрос с набором данных так же будет выполняться быстрее, чем несколько с 1 записью каждый.

PM MAIL   Вверх
vikaz
Дата 23.6.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(mrbrooks @  23.6.2009,  14:26 Найти цитируемый пост)
Мускул может загрузить инфу из текстового файла при соблюдении некоторых правил - сепараторы и т.п.
Для этого - если возможно - экспортировать в текстовый файл данные из DBase.


Это ЖЕСТЬ. 100Мб, через текстовый файл.... Надо 1С расковырять, глянуть, как они это сделали. Хотя ,наверное как уже и говорилось выше, они пошли через API интерфейс. Но это предстоит выяснить. smile

Выясню, напишу.
mrbrooks и xvr - спасибо за советы! 


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 24.6.2009, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(vikaz @  23.6.2009,  18:47 Найти цитируемый пост)
Это ЖЕСТЬ. 100Мб, через текстовый файл.... 

Ты про это ничего не говорил  smile  тогда имхо конечно через файл не кошерно.

Цитата(vikaz @  23.6.2009,  18:47 Найти цитируемый пост)
Хотя ,наверное как уже и говорилось выше, они пошли через API интерфейс.

Я думаю так и есть.
PM MAIL   Вверх
xvr
Дата 24.6.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Кстати, если есть возможность забросить файл на сервер, где крутится MySQL, то у него есть команда прямой загрузки базы данных из файла (LOAD DATA INFILE) - скорость должна быть максимальная

Поправка - LOAD DATA INFILE может работать даже для файлов на клиенте (если на клиенте и сервере это не запрещено)


Это сообщение отредактировал(а) xvr - 24.6.2009, 08:26
PM MAIL   Вверх
mrbrooks
Дата 24.6.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



xvr, я про это и говорил. При условии, что DBase имеет экспорт в файл. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.