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);