информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на InternetСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
А зачем юзается TIBQuery? 18.03.08 16:47  Число просмотров: 2455
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Это вообще чей класс, дельфийский? Нету классов-наследников от TTable? Ну и наконец, может FireBird даёт возможность подключаться по ODBC? Тогда стоит заюзать DAO или ещё чего-нить для работы с ODBC...
<beginners>
FireBird: множество инсертов в одном запросе 18.03.08 15:43   [Ustin]
Автор: Ustin <Ustin> Статус: Elderman
Отредактировано 18.03.08 15:55  Количество правок: 2
<"чистая" ссылка>
Глупый вопрос, но второй день ничего поделать не могу:
есть данные
EVENTDATE EVENTSOURCE EVENTCODE EVENTMESSAGE EVENTINFO REPLICATED
13.03.2008 12:26:49 65536 33554432 test test null
13.03.2008 14:55:08 65536 16777216 test test null
...

есть запрос:
INSERT INTO MAIN (EVENTDATE, EVENTSOURCE, EVENTCODE, EVENTMESSAGE, EVENTINFO, REPLICATED) VALUES ('13.03.2008 12:26:49',65536,33554432,'test','test',null)

Вопрос: можно ли как-нито одним insert вставить данные в БД? Сейчас делаю много Qeury.execQuery, но по скорости это не устраивает, так как то ли канал до базы плохой, то ли база тупая, но происходит вставка неприемлемо долго.

INSERT INTO MAIN (EVENTDATE, EVENTSOURCE, EVENTCODE, EVENTMESSAGE, EVENTINFO, REPLICATED)VALUES
('13.03.2008 12:26:49',8323072,134217728,'fda'," ",null)
('13.03.2008 12:26:49',8323072,134217728,'fda'," ",null)
без, с запятой, ; и другими разделитилями между скобками приводят к результату
Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 4, column 1.
Диалект FireBird - 1.5, 2 - не важно, эффект сохраняется
Если FireBird поддерживает множественную вставку, то синтаксис должен быть примерно такой: 18.03.08 15:57  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 18.03.08 15:58  Количество правок: 1
<"чистая" ссылка>
Инструкция INSERT INTO
Добавление одной или нескольких записей в таблицу. Это называется запросом на добавление.

Синтаксис
Запрос на добавление нескольких записей

INSERT INTO конечный_объект [(поле1[, поле2[, ...]])] [IN внешняя_база_данных]
SELECT [источник.]поле1[, поле2[, ...]
FROM выражение_таблицы

Вместо названий полей в селекте можно вбить константы :)
Спасибо, очень полезная инфа... а можно ли сделать множественный insert из совсем внешнего источника? 18.03.08 16:12  
Автор: Ustin <Ustin> Статус: Elderman
Отредактировано 18.03.08 16:15  Количество правок: 1
<"чистая" ссылка>
Ситуация: формирую данные (несколько сотен строк в минуту), после чего неодходимо влить их в БД. Сейчас формируется простыня insertов, и за каждым запросом звонится в БД дёрганьем TpFIBQuery.ExecQuery - получается некислый простой как по времени, так и по загруженности ЦП - хоть dnet считай. Как можно ускорить этот процесс? Вижу вариант использования множественного инсерта - дата сто пудов правильная, то есть хэндлить эксцепшны на каждом инсерте необходимости нет
А зачем юзается TIBQuery? 18.03.08 16:47  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Это вообще чей класс, дельфийский? Нету классов-наследников от TTable? Ну и наконец, может FireBird даёт возможность подключаться по ODBC? Тогда стоит заюзать DAO или ещё чего-нить для работы с ODBC...
Нашёл решение! 18.03.08 17:13  
Автор: Ustin <Ustin> Статус: Elderman
Отредактировано 18.03.08 19:07  Количество правок: 3
<"чистая" ссылка>
execute block as
begin
<простыня инсертов через точку с запятой>
end

---
Грязный профилинг показал прирост скорости в 8734/1812 раз, причём в 1812 львиная доля соответствует чтению первоначальной даты с винта
PS:Я совсем никогда не работал с БД, за советы относительно делфячих классов отдельное спасибо
UPD: упёрся в ограничение длины запроса FireBird в 65535 символов ;( Будем юзать комбинированный метод
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach