I would like to know the following please:
1) I need, for an application of mine, to handle IO streams. In particular, I need to take a file and split it into several binary fragments to send on the network. Can I do this with .NET API?
2) I also need to save this fragments somewhere. I am really interested in saving fragments in a database (SQL Server). Does SQL Server provide special table field types for saving binary data???
Thank you
For binary data in SQL Server (in version 2005 or newer), use the
VARBINARYdatatype – see the MSDN docs on binary and varbinary for details.With the
VARBINARY(MAX)datatype, you can potentially store up to 2 GB of binary data in a column in your database table.As this really good paper by Microsoft Research called To Blob or Not To Blob also shows, you shouldn’t overdo your binary storage in SQL Server.
Their conclusion after a large number of performance tests and analysis is this:
if your pictures or document are typically below 256K in size, storing them in a database VARBINARY column is more efficient
if your pictures or document are typically over 1 MB in size, storing them in the filesystem is more efficient (and with SQL Server 2008’s FILESTREAM attribute, they’re still under transactional control and part of the database)
in between those two, it’s a bit of a toss-up depending on your use
If you decide to put your pictures into a SQL Server table, I would strongly recommend using a separate table for storing those pictures – do not store the employee foto in the employee table – keep them in a separate table. That way, the Employee table can stay lean and mean and very efficient, assuming you don’t always need to select the employee foto, too, as part of your queries.
For filegroups, check out Files and Filegroup Architecture for an intro. Basically, you would either create your database with a separate filegroup for large data structures right from the beginning, or add an additional filegroup later. Let’s call it “LARGE_DATA”.
Now, whenever you have a new table to create which needs to store VARCHAR(MAX) or VARBINARY(MAX) columns, you can specify this file group for the large data:
Check out the MSDN intro on filegroups, and play around with it!