записать данные в cdb из обычного файла

freeek

Новичок
есть файл, ~600к строк

содержимое надо поместить в базу cdb.
решение в лоб, прочитать через file и в записывать в цикле, оказалось слишком долгим, я бы сказал невыносимо долгим, 2е сутки идет уже.

возможно есть вариант как то отформатировать содержимое файла целиком и использовать как базу.?
 

HEm

Сетевой бобер
То, что оно у тебя идет вторые стуки еще не значит, что чтото там записывается

файл из двух строк нормально обрабатывается?
 

freeek

Новичок
речь об обычном плоском файле, в формате cdb, работа идет через Database Abstraction Layer Functions.

исходный файл 7,4мб, записалось 10,8 мб, так что скоро вроде как должно остановиться, но тем не менее, мне кажется это супер долго.

код незамысловатый

PHP:
set_time_limit(0);
$dba = dba_open('db.cdb', 'n');
if ($dba) {
	//db исходный файл
    $ip = file('db');
    foreach ($ip as &$key) {
        dba_insert($key, 1, $dba);
    }
    dba_close($dba);
} else {
    echo '<pre>No connection!</pre>';
}
 

HEm

Сетевой бобер
сделайте файл из скажем 100 строк, запустите и померяйте время потраченное

Это не может случиться из-за нехватки памяти? используйте построчное чтение из файла
 

freeek

Новичок
60000 значений записываются за ~ 1900 секунд, т.е. где то пол часа
 

HEm

Сетевой бобер
мде

может имеет смысл периодически закрывать и открывать заново соединение?

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

freeek

Новичок
видимо такая особенность, а вот с соединением надо попробовать.
по хорошему профайлером пройтись, но лень ставить из-за 2х строк, хотя может и имеет смыл.

главное чтобы выборка была на хорошей скорости, что заявляют))
 

freeek

Новичок
вопрос снят.

из-за невнимательности забыл указать handler (тип базы который хочу использовать) и по умолчанию использовался flatfile, из-за этого запись длилась ну очень долго, часами, потому что flatfile внутри похож на обычный файл +какая то своя информация.

указав нужный handler в лице cdb, файл источник читался равным порциями (по строкам)и записывался в базу.
из файла в 6,7мб получилась база в 21,5мб, все 620к записей ушли в базу за 40 секунд.
 
Сверху