Проблемы такая нужно информацию из *.DBF перекидывать в базу MYSQL. *.DBF может содержать от 100 тыс до 8 мил. записей. Нашел код программы http://stackoverflow.com/questions/14270236/php-script-to-convert-dbf-files-to-mysql или http://www.coolcomputing.com/article.php?sid=4628. При перекидывании 500 тыс записей затрачивается около часа. Помогите как можно ускорить этот процесс.
Если это надо сделать один раз, то пофигу на время, я считаю. Главное чтобы получилось. А если регулярно, то что-то надо менять. Попробовать уйти от построчной обработки к "оптовой". Приходят в голову два варианта: 1. Подключить и DBF и MySQL через ODBC и сделать всё в один запрос типа INSERT INTO… SELECT… вроде такое возможно. Помнится когда работал с MS Access там были подобные кейсы. 2. Найти способ выгрузки в формат csv. Его можно очень быстро импортировать в MySQL командой LOAD DATA INFILE. Есть еще почти безумная идея №3: т.к. DBF это формат с записями фиксированной длины, грузить в промежуточную таблицу и разбирать строки средствами MySQL: http://stackoverflow.com/questions/11461790/loading-fixed-w ... into-mysql
Проблема в том, что данные будут загружаться раз в неделю, и DBF файлов будет около 10 штук, мне нужно написать программу так, что бы люди, которые вообще не знают Access и что такое ODBC, могли одним нажатием на кнопку получить нужную информацию с этих файлов за минимальное время. Конвертировать их через сторонние программы не хочется вообще ни как, тем более обучать людей это делать. Нашел функцию mysqli_multi_query, но проблема в том, что она отправляет все нужные запросы на сервер, но сервер обрабатывает их как-то долго т.е. загружает в таблицу по одной записи и это тоже довольно долго. Если использовать третий вариант. то потом я потеряю время на trim или substr пока буду группировать нужную информацию.
Интересно как люди видят не то, что им показываешь ))) Я вообще не аксесс советовал, а технологию доступа к данным. Аксесс только для примера, он тоже имеет доступ к ODBC. Так что ты (а не какие-то люди) мог бы с его помощью что-то побыстрому проверить. В случае успеха можно было бы попробовать написать автоматический импорт через ODBC-connector. Не у "людей", а там, куда попадают их файлы. Расскажи откуда берутся эти DBF. Это формат выгрузки из программы? Есть там другие варианты? Добавлено спустя 6 минут 19 секунд: Кстати, прошу только понять меня правильно, возможность выполнить SQL-запрос к источнику ODBC есть практически на любой машине с виндой. Сам аксесс для этого не нужен. Называется технология поразному: MDAC, MS Jet, DAO: мелкософт никак не мог остановиться с маркетинговыми терминами. На *nix машинах аксесса нет. Но коннекторы ODBC реализованы практически везде. Так что идея может выстрелить. Но для переноса данных все-таки больше подходит CSV или XML.
Файлы будут присылать сторонние организации с формате DBF или TXT (чаще присылают в DBF). Я не хочу заниматься импортом этих файлов на сервер. если использовать dbForge Studio for MySQL импорт занимает 1-2 минуты. вот я и ищу, не ужели нет готового кода программы для импорта DBF файлов за это-же время. Автоматический импорт писать на чем??? на PHP Писать отдельную программу на другом языке с использованием ODBC-connector, как то не вдохновляет. Если использовать MYSql-connect и Access время импорта тоже занимает кучу времени. Почему я все время дергаю Access, потому, что есть написанная прога на нем. писал не я, мне нужно ее переделать на сетевую, что бы она работала через инет. Если использовать PHP и ODBC-connector ??? не знаю не пробовал. сейчас порою инет
Ещё можно через Autoit запускать dbForge Studio for MySQL автоматически. Это если остальное не получится сделать.
Я не знаю всей кухни, конечно, но если вариант TXT (csv?) есть, то это же здорово всё упрощает и ускоряет! Это будут десятки секунд вместо часов. load data жеж! Будь я админом этой системы, наладил бы импорт из текста и выдал указание клиентам: присылать в тектовом виде и только в нем.
Сейчас проведу эксперимент с load data ! и отпишусь. А пока возникла идея как написать SQL запрос на PHP для вставки массива данных например insert into $db.$table values ( массив данных )
Спасибо за load data ! , да действительно за 20-30 сек загружает нужную информацию. Но все же, не ужели нет аналогичной функции, которая бы также загружала информацию с DBF Файлов. И еще один вопрос Как в таком коде программы можно отследить процент загрузки информации Код (Text): $query = "load data infile '../mtest/de_by.txt' into table de_by fields terminated by '|' lines terminated by '\n' "; if (!$mysqli->query($query)) { printf("Errormessage: %s\n", $mysqli->error); } что бы работник не думал, что зависла программа, пока он будет загружать информацию. Заранее большое спасибо.
( пусть я некропостер ) Никак в этом случае не получить прогресс выполнения. Я в подобных случаях просто не заставляю человека ждать. Он загрузил файл и получил сообщение, что задание встало в очередь. Через некоторое негарантированное время он сможет увидеть результаты своего "труда". Пока может потыкать "обновить" чтобы узнать статус. Сам долгий процесс должен стартовать по крону или еще каким хитрым способом, но не в том же процессе, в котором страничка отдается.