ApplyUpdates на IBDatabase
3 отговора
0 прегледа
ApplyUpdates на IBDatabase
Значи, имам база данни, която е на Interbase 6.1
Пиша в 2-3 таблици на базата, и после пускам IBDatabase.ApplyUpdates([Table1, Table2, Table3]). Първоначално всичко работи перфектно, но като се натрупат няколко десетки хиляди реда във въпросните таблици прогресивно расте времето за ApplyUpdates. При празна база минава мигновено. При таблица с 50 хиляди реда това IBDatabase.ApplyUpdates([IBTable]) oтнема време от порядъка на 20-тина секунди , което ми се вижда ненормална история. Някакъв по-правилен начин да си записвам ъпдейтите в базата, дето да не се бави толкова много ?
Пиша в 2-3 таблици на базата, и после пускам IBDatabase.ApplyUpdates([Table1, Table2, Table3]). Първоначално всичко работи перфектно, но като се натрупат няколко десетки хиляди реда във въпросните таблици прогресивно расте времето за ApplyUpdates. При празна база минава мигновено. При таблица с 50 хиляди реда това IBDatabase.ApplyUpdates([IBTable]) oтнема време от порядъка на 20-тина секунди , което ми се вижда ненормална история. Някакъв по-правилен начин да си записвам ъпдейтите в базата, дето да не се бави толкова много ?
Re: ApplyUpdates на IBDatabase
Като заначало използвай IBDataSet вместо IBTable. IBTable е само за обратна съвместимост. Дизайнът му не е подходящ за Client/Server програмиране. Предполагам, че това ще ти ускори значително нещата.
ApplyUpdates на IBDatabase
Разкарах таблиците, правя си Insert-ите с един IBSQL и после само commit-вам транзакцията. Няма буфериране, няма бавене. Dataset-ите , които гледат данните са с отделна транзакция... това май ми реши проблема.
Re: Insert-ите
Това е (почти) най-доброто.
Аз ползвам MySql и ето какво направиха в mysqldump, за да го форсират още НЕмалко (не знам първото дали го има; после колкото може повече редове в 1 INSERT, зависи сървъра колко позволява да е голяма 1 команда):
ALTER TABLE x DISABLE KEYS;
INSERT INTO x (a, b,c) VALUES
(1,2,3),
...
(7,8,9);
ALTER TABLE x ENABLE KEYS;
Аз ползвам MySql и ето какво направиха в mysqldump, за да го форсират още НЕмалко (не знам първото дали го има; после колкото може повече редове в 1 INSERT, зависи сървъра колко позволява да е голяма 1 команда):
ALTER TABLE x DISABLE KEYS;
INSERT INTO x (a, b,c) VALUES
(1,2,3),
...
(7,8,9);
ALTER TABLE x ENABLE KEYS;