Matlab结构到MySql数据库
Matlab structure to MySql database
我在 Matlab 中有一个结构。该结构包含 210 万行,混合了 Double、Integers 和 Char。该结构称为 TaqQ;
TaqQ.time 2100000x1 uint32,
TaqQ.bid 2100000x1 double,
TaqQ.ex 2100000x4 char,
我怎样才能快速将该结构转移到 MySql?
也许可以将结构保存到 csv 文件,然后将其导入 mysql。我试过了:
csvwrite('test.csv',[TaqQ.time TaqQ.bid TaqQ.ex]) %this is very slow
csvwrite('test.csv',[TaqQ.time' ; TaqQ.bid'; TaqQ.ex']) % fast but don't know how to deal with it in MySql!?
我也试过使用 fastinsert,但速度很慢。
我也试过:
connHandle = conn.Handle;
stmt = connHandle.createStatement;
for i= 1:2100000
stmt.addBatch('INSERT INTO Quotes (time,bid,ex) VALUES (TaqQ.time(i),
TaqQ.bid(i), TaqQ.ex(i))')
结束
stmt.executeBatch;
stmt.close;
`
但我也很慢
有人可以帮帮我吗??
这会占用很多 RAM,但它会在内存中做事,最大限度地减少函数调用的次数,并且会一次写入所有内容,所以速度应该很快:
% Test struct
TaqQ = struct( ...
'time', [1;2;3;4;5], ...
'bid', [110.1;120.1;130.1;140.1;150.1], ...
'ex', ['ABCD';'EFGH';'IJKL';'MNOP';'QRST'] ...
);
% Writing the file
NL = 10; % ASCII new line
DQ = double('"'); % ASCII double quote
f = fopen('test.csv', 'wb');
fwrite(f, [ ...
reshape(sprintf('% 10u,', TaqQ.time), 11, []); ... % 10 digits
reshape(sprintf('% 10.3f,', TaqQ.bid), 11, []); ... % 10 digits + point + sign
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % open quotes
TaqQ.ex.'; ... % already char
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % end quotes
char(NL*(ones(1,size(TaqQ.ex,1)))) ... % newlines
]);
fclose(f);
其实我很好奇它是否快,我无法在大数据上进行测试。请告诉我。
如果你想挤出所有空间,那么这是一个(较慢的)变体:
% Preparing content
NL = 10; % ASCII new line
DQ = double('"'); % ASCII double quote
bytes = [ ...
reshape(sprintf('% 10u,', TaqQ.time), 11, []); ... % 10 digits
reshape(sprintf('% 10.3f,', TaqQ.bid), 11, []); ... % 10 digits + point + sign
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % open quotes
TaqQ.ex.'; ... % already char
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % end quotes
char(NL*(ones(1,size(TaqQ.ex,1)))) ... % newlines
];
% Writing content without spaces
f = fopen('test.csv', 'wb');
fwrite(f,bytes(bytes~=' '));
fclose(f);
我在 Matlab 中有一个结构。该结构包含 210 万行,混合了 Double、Integers 和 Char。该结构称为 TaqQ;
TaqQ.time 2100000x1 uint32,
TaqQ.bid 2100000x1 double,
TaqQ.ex 2100000x4 char,
我怎样才能快速将该结构转移到 MySql?
也许可以将结构保存到 csv 文件,然后将其导入 mysql。我试过了:
csvwrite('test.csv',[TaqQ.time TaqQ.bid TaqQ.ex]) %this is very slow
csvwrite('test.csv',[TaqQ.time' ; TaqQ.bid'; TaqQ.ex']) % fast but don't know how to deal with it in MySql!?
我也试过使用 fastinsert,但速度很慢。
我也试过:
connHandle = conn.Handle;
stmt = connHandle.createStatement;
for i= 1:2100000
stmt.addBatch('INSERT INTO Quotes (time,bid,ex) VALUES (TaqQ.time(i),
TaqQ.bid(i), TaqQ.ex(i))')
结束 stmt.executeBatch; stmt.close; `
但我也很慢
有人可以帮帮我吗??
这会占用很多 RAM,但它会在内存中做事,最大限度地减少函数调用的次数,并且会一次写入所有内容,所以速度应该很快:
% Test struct
TaqQ = struct( ...
'time', [1;2;3;4;5], ...
'bid', [110.1;120.1;130.1;140.1;150.1], ...
'ex', ['ABCD';'EFGH';'IJKL';'MNOP';'QRST'] ...
);
% Writing the file
NL = 10; % ASCII new line
DQ = double('"'); % ASCII double quote
f = fopen('test.csv', 'wb');
fwrite(f, [ ...
reshape(sprintf('% 10u,', TaqQ.time), 11, []); ... % 10 digits
reshape(sprintf('% 10.3f,', TaqQ.bid), 11, []); ... % 10 digits + point + sign
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % open quotes
TaqQ.ex.'; ... % already char
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % end quotes
char(NL*(ones(1,size(TaqQ.ex,1)))) ... % newlines
]);
fclose(f);
其实我很好奇它是否快,我无法在大数据上进行测试。请告诉我。
如果你想挤出所有空间,那么这是一个(较慢的)变体:
% Preparing content
NL = 10; % ASCII new line
DQ = double('"'); % ASCII double quote
bytes = [ ...
reshape(sprintf('% 10u,', TaqQ.time), 11, []); ... % 10 digits
reshape(sprintf('% 10.3f,', TaqQ.bid), 11, []); ... % 10 digits + point + sign
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % open quotes
TaqQ.ex.'; ... % already char
char(DQ*(ones(1,size(TaqQ.ex,1)))); ... % end quotes
char(NL*(ones(1,size(TaqQ.ex,1)))) ... % newlines
];
% Writing content without spaces
f = fopen('test.csv', 'wb');
fwrite(f,bytes(bytes~=' '));
fclose(f);