powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / perl&mssql & большой обьем данных
12 сообщений из 12, страница 1 из 1
perl&mssql & большой обьем данных
    #32178694
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая вот проблемка
сервер MSSQL
есть перловый скрипт

$SQL_query ="insert into table (field1,field2,fiel3,field4) values (\'%02u-%02u-% 2u %02X:%02X:%02X\',%4u,\'%08X\',\'%08X%08X%02X\');\n";
.....
while (read(DATA,$buf,32)){
%k=unpack_($buf);
if ($rcnt>1 ){
$dbh->dbcmd($query);
$stat=$dbh->dbsqlsend;
$dbh->dbresults;
$query="";
$rcnt=1;}

$rcnt++;
$query.=sprintf ($SQL_query,
06,05,03,$k{hh},$k{mm},'00',
$k{cdr},
$k{CRnum1},
$k{DLnum1},$k{DLnum2},$k{DLnum3});}

Построчно загонять данные очень уж долго 800 000 записей почти
Пробовал загонять в буфер несколько insertов сразу ругается
КАк это сделать правельнее ???
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32178785
Фотография cvasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если для Вашего драйвера работают bulk функции (bcp_sendrow etc.) то лучше
пользоваться ими, а не делать insert'ы. Для MSSQL::DBlib (с виндов) должно работать.
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32179205
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно поподообнее
А то я в sql северах неочень
верней только начинаю разбиратся
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32179211
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 Файл то бинарный
bulk insert c бинарниками работает ?

2 Кто-нибудь юзал dbsqlsend ?(на сколько я понял в отличии от dbsqlexec в том что он не ждет результата)

3 Почему если в в запросе больше одного инзерта вываливается ошибка ?
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32179863
Фотография cvasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. BULK INSERT с бинарниками не работает, но я и не предлагаю его использовать. bcp функции загружают уже распакованные и сложенные в массив данные.
Подробнее читайте здесь и здесь

2. Результата dbsqlsend действительно не ждет и позволяет клиенту делать что-то еще пока сервер выполняет запрос. Для извлечения результатов этого запроса и контроля ошибок используются функции dbsqlsend и dbsqlok. Но на мой взгляд использование dbsqlsend в вашем случае не оправдано.

3. Потому что множественные инсерты порождают множественные результирующие наборы. Их все нужно извлекать и обрабатывать. Посмотрите примеры по вышеприведенным ссылкам.
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32180099
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
Буду разбиратся
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32180932
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The front-end tool you are using does not support the feature of bulk insert from host.
О bcp можно забыть ?
или всетаки что-то можно зделать (доустановить что-нибудь) ?

Даст что-нибудь в плане быстродействия использование транзакций ?
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32180935
Фотография cvasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и не понял. Вы какой собственно библиотекой пользуетесь?
И с какой платформы?
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32180950
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
w2k3 server - activeperl
w2k server - MSSQL
желательно чтоб под freeBSD4.7 тож работало
(но не сейчас оттуда я вообще до сервера достучатся немогу)
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32181733
Фотография cvasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
BCP_SETL( 1 ); # Вот это надо еще добавить.
$dbh = MSSQL::DBlib->dblogin($user, $pwd, $server); 
$dbh->bcp_init( "billing.dbo.commphone" , '', '',DB_IN); 
$dbh->bcp_meminit( 10 ); 
$dbh->bcp_sendrow(@data); 
$dbh->bcp_batch;



Только при реальной загрузке bcp_batch лучше делать не после каждой строки,
а хотя-бы после каждой тысячной (или десятитысячной, в зависимости от размера
журнала транзакций в базе). Так будет гораздо быстрее.

С фрибсд можно попробовать работать через Sybase::DBlib собранный с FreeTDS .
У меня с солярки и линуха работает. Баги конечно есть, но где их нет.
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32181791
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всегда так если сразу не пошло так скорей всего уже не пойдет (только с одним разберешся тутже еще что-то)

Bulk copying into a table with bigint columns is not supported for versions earlier than SQL Server 2000

но у меня 2000 sqlserver
темболее я это поле id:bigint вообще не трогаю оно автоматом формируется ID++ больше там bigint полей нет

Вопрос
чем бсп отличается от sql запроса
а так понимаю что преобразование данных происходит на клиенте (строка-дата итд) и серверу отсылается уже в готовом виде
Я прав?
или есть еще какие-нибудь отличия
...
Рейтинг: 0 / 0
perl&mssql & большой обьем данных
    #32182121
Фотография cvasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С bigint-ом это какая-то засада. Я этот тип данных с перлом раньше не
использовал, поэтому навскидку ничего сказать не могу. Буду смотреть.

Основные различия bcp и insert в том, что:
балк операции могут быть минимально логируемыми.

при балк операции серверу не нужно парсить и исполнять отдельный стэйтмент для каждой вставляемой строки.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / perl&mssql & большой обьем данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]