Actually I test the UnDac 3.0 component. I use a firebird embedded database (version 2.5).
I try to detect what´s the best methode for inserting a lot of data to the database. We have a program which receives data from different sources. The data is send in timesteps between 50 und 2000 Milliseconds.
The problem is that we can connect a lot of sender to our software. So we have multiple Threads which using the database and store data to different tables.
To test the speed of the database connection I used this code:
Code: Select all
StartTime := Now;
DBQuery.SQL.Text := 'INSERT Into ' + Table + ' (ID, PROP01, PROP02, PROP03, PROP04, PROP05, PROP06, PROP07, PROP08, PROP09, PROP10) VALUES (:wert1, :wert2, :wert3, :wert4, :wert5, :wert6, :wert7, :wert8, :wert9, :wert10, :wert11);';
DBQuery.Prepare;
for I := 1 to Amount do begin
Inc(Counter);
DBQuery.Params[0].AsInteger := Counter;
DBQuery.Params[1].AsFloat := Random(10000);
DBQuery.Params[2].AsFloat := Random(10000);
DBQuery.Params[3].AsFloat := Random(10000);
DBQuery.Params[4].AsFloat := Random(10000);
DBQuery.Params[5].AsFloat := Random(10000);
DBQuery.Params[6].AsFloat := Random(10000);
DBQuery.Params[7].AsFloat := Random(10000);
DBQuery.Params[8].AsFloat := Random(10000);
DBQuery.Params[9].AsFloat := Random(10000);
DBQuery.Params[10].AsFloat := Random(10000);
DBQuery.ExecSQL;
end;
Anyway. This code is usefull to detect how long it takes to insert one dataset to the database (I calculate the time for the entries).
I figured out that one dataset takes about 5-10 milliseconds to get into the database. This results in a maximum of 100-200 datasets per second.
But maybe there is a much faster way to insert data to the database. I think transactions won´t help alot (but maybe I´m wrong).
So did you have some tips for speedup?
Greetz
Dominik