Insert large binary file in database (MySQL)

A

Alexey Petrushin

Hello!

Probably a stupid question ...
How can i insert large binary file in MySQL using IO stream?

For example, 'Sequel' can do 'insert' as:

dataset << {:name => 'a name', :value => 'some value'}

i need something like:

File.open('path_to_binary_file'){|file|
dataset << {:name => 'a name', :value => file}
}

Thanks!
 
A

Alexey Petrushin

In Java it can be done this way:

File file = new File("/home/sumedha/sumedha.jpg");
fis = new FileInputStream(file);
ps = conn.prepareStatement("insert into pictures(id, name,
photo) values (?, ?, ?)");
ps.setString(1, "001");
ps.setString(2, "sumedha");
ps.setBinaryStream(3, fis, (int) file.length());
ps.executeUpdate();
conn.commit();

hope Ruby also has something similar ...
 
D

David Masover

Probably a stupid question ...
How can i insert large binary file in MySQL using IO stream?

You probably shouldn't.

MySQL is for storing small things, like userids, (hashed) passwords, posts,
etc.

For larger things, it's going to be easier and more efficient to use the
filesystem.
 
A

alandacosta

You can create a text field in your table, and convert to/from Base64/
Binary as needed. You have to do a File.open, iterating each line, and
<< Base64.encode64(line), to encode ; Base64.decode64(line), to
decode. It's an option. I know BLOB sends, using the db adapter are a
problem with Postgres when the db is non-local (not on the same
machine) to the app. If you have to store the file object in your
database, I'd recommend the Base64 transform. Note: storage compared
to binary will increase slightly by converting to/from Base64 (even
though ruby is decently fast at this), application processing time
will go up due to conversions, and your DB machine may slow down
somewhat (dependent on load). If you do go this route, you should md5
or sha1 hash the binary object (before transform) to save on
redundantly storing objects, and rather use a join table for a user to
file association, against the md5/sha1.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top