forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Ускорение работы (http://forum.boolean.name/showthread.php?t=15618)

mrsandy 08.10.2011 10:52

Ускорение работы
 
Возможно вопрос и не в тот раздел но нужен совет.
Есть: данные, допустим таблица с товарами в xls файле, возможно повторение одного товара 1-2 раза (таких товаров обычно не больше 20-30). Количество строк от 5К до 100К. Таблица не сортирована.
Нужно: провести анализ.
Мои действия: заливаю данные в БД.
Иду по списку товара по порядку , селектом проверяю есть ли данный товар уже в базе. Если есть то апдейтом изменяю параметры. Если товар встречается впервые то инсерчу его в БД.
Проблема: если товаров до 5К то скорость внесения данных в БД сносная. Если 10К-15К - процесс внесения в БД заставляет пить кофе (иногда даже пару чашек).
Анализ данных в БД проходит довольно быстро.
Как бы ускорить заполнение БД?:SOS:

Baisangur 13.10.2011 11:00

Ответ: Ускорение работы
 
Какую БД используешь? Запросы покажи, скорее всего в них не так что - то. Лучше конечно дай части исходников где ты делаешь запросы к БД.

mrsandy 14.10.2011 06:33

Ответ: Ускорение работы
 
Использую AbsoluteDatabase (http://www.componentace.com/bde_repl...database. htm) . Основная утечка времени была в проверке селектом существует ли такая запись в БД.
Выкрутился проще: сделал Tlist из артикулов , отсортировал и удалил не повторяющиеся (как я и говорил их остается 15-30 из любого по объему входного списка). И при внесении в БД новые сразу инсерчу а уже существующие апдейчу. Ускорение в десятки если не сотни раз.

Baisangur 15.10.2011 01:36

Ответ: Ускорение работы
 
А я бы не использовал AbsoluteDatabase, а взял бы тот же SQLite. По мне так лучше пользоваться проверенными решениями, насколько я помню под Делфи есть компоненты, под Лазарус точно, там из коробки даже есть.
Конечно, если выкрутился, то хорошо.
Но все - же интересно в чем была проблема? Ты индексируешь строки, т.е. есть ли у тебя для каждой таблицы поле с флагом PRIMARY KEY? Без такого поля БД не может корректно построить индекс и при селектах тупо проходит по всей таблице и сравнивает требуемые значения.

pozitiffcat 13.12.2011 14:16

Ответ: Ускорение работы
 
в разных бд есть методы что то типа InsertOrUpdate, плюс в добавок ко всему делай BEGIN TRANSACTION END TRANSACTION COMMIT

WaReZ_MEN 20.01.2012 10:33

Ответ: Ускорение работы
 
я использую FireBerd там есть процедуры в которых твою проверку можно легко организовать. Я и большие объемы грузил. Также возможно много времени уходит на считывания данных их экселя.


Часовой пояс GMT +4, время: 00:47.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot