Как конвертировать DBF в MySQL?

Solmyr
На сайте с 10.09.2007
Offline
501
508

Нужно конвертировать из DBF в MySQL большой объем данных (2-3Гб). Тулза DBFToMySQL с гитхаба работает слишком медленно. Кто-то знает еще какие-то методы?

DV
На сайте с 01.05.2010
Offline
644
#1

Эта утиль PHP, на сколько я понял?

При выполнении посмотрите загрузку, вполне может статься, что работает в пол силы.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
Solmyr
На сайте с 10.09.2007
Offline
501
#2
DenisVS:
Эта утиль PHP, на сколько я понял?
При выполнении посмотрите загрузку, вполне может статься, что работает в пол силы.

Судя по быстродействию, там не в пол, а где-то в 0.5% силы. Примерно 10000 строк в минуту.

DV
На сайте с 01.05.2010
Offline
644
#3

Для PHP есть варианты повышения производительности, порой радикально.

Искать по "php cli performance tuning"

Solmyr
На сайте с 10.09.2007
Offline
501
#4

Ну в общем проблема оказалась в том что по пхп не существует библиотек, которые осуществляют последовательную итерацию строк из dbf файла, а все библиотеки только умеют выбирать из файла i-ю строку, что в файле данной структуры очень медленно.

Задачу удалось решить с помощью библиотеку dbfpy под python в котором как-раз и есть такая последовательная итерация.

PA
На сайте с 12.02.2016
Offline
24
#5
Solmyr:
Ну в общем проблема оказалась в том что по пхп не существует библиотек, которые осуществляют последовательную итерацию строк из dbf файла

странно, что не нашлось быстрых "импортеров".

насколько я помню, давно с ними работал, в формате dbf3-dbf4 фиксированная длинна одной записи(в пределах одного файла). возможно засада будет на полях memo - не помню и вспоминать не хочу. :)

но в простейшем случае можно:

1. прочитать заголовок и вычислить длинну записи

2. установить указатель чтения на первую занись и дальше обычное потоковое чтение файла порциями "длинна записи" * "кол-во записей" (т.е. к примеру читать по 1-5тыс записей в память и затем одним инсертом забрасывать эти 1-5тыс записей в sql сервер)

это должно отработать очень быстро.

. . .
Solmyr
На сайте с 10.09.2007
Offline
501
#6
ps axf:
насколько я помню, давно с ними работал, в формате dbf3-dbf4 фиксированная длинна одной записи(в пределах одного файла). возможно засада будет на полях memo - не помню и вспоминать не хочу.

Не. Мемо - там во внешних файлах хранится. А засада в том, что формат поддерживает хранение в одном файле, НЕСКОЛЬКИХ вариантов одной строки, из которых по спецификации действительным является значение с максимальным значением некоего внутреннего счетчика. Из-за этого позицию i-й строки по формуле вычислить нельзя.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий