|Subject||Re: [firebird-support] Blob write to Embedded on Linux performance|
Frank, thank you for taking the time to do this. It confirms that there is definitely something wrong with my setup (are you using Firebird version 2.5.2?).
Ok, this is what I get for a 13MB file on an Intel NUC (Celeron),
database and home are on an USB Drive, so no real good hardware.
SQL> set stat;
SQL> set time;
SQL> select b_loadfromfile('/home/frank/w.mp3') from rdb$database;
BLOB display set to subtype 1. This BLOB: subtype = 0
Current memory = 37822224
Delta memory = 416616
Max memory = 37899608
Elapsed time= 9.423 sec
Cpu = 0.000 sec
Buffers = 2048
Reads = 0
Writes = 830
Fetches = 1767
I am seeing 45 seconds for a 13Mb file using C++ / IBPP and 48 seconds using PHP.
Exactly the same code, database structure and hardware on Windows inserts a 13Mb BLOB in just 2.4 seconds!
That would be great thank you! Mine is basically the example (from examples/udf/udflib.c) but using BLOBCALLBACK from ibase.h instead of BLOB.
I could send you my udf if you want to test it.
Could you also share your table definition, especially what indexes or constraints you have defined as I wonder if this is causing the exception? Also do you have anything special in your firebird.conf?
I am creating a brand new database for each test like this:
create database 'udftest.fdb' user 'sysdba' password 'masterkey';
declare external function f_insertblob cstring (20), blob returns int by value entry_point 'insertblob' module_name 'test_udf.so';
create table bloby (id int, data blob); commit;
insert into bloby (id, data) values (0, 'hello'); commit;
select f_modulo_m('BIGFILE.MP3', data) from bloby where id = 0;
select * from bloby;
Thanks once again, Mike.