Storing images in MSSQL vs Disk - sql-server

I am developing an inhouse application in C#.NET, based on an MSSQL database.
Users can upload images linked to a specific entity. These images have usually around 4 to 5 MB and cannot be compressed for storage.
Right now these images are stored in the filesystem where the application is. There are lag issues when printing a subset of images, maybe 30. They are filtered via DB and loaded via locationstring I get from the DB and then
Sytem.Drawing.Image.FromFile(locationstring)
I can (and have to) resize the images for printing (400x255px), for viewing them in the application they need to have the original size and quality.
I am supposed to redesign the way pictures are stored and implement a feature where the user can change the entity an image is linked to (that one I already figured out).
I rename the images when they are stored via the application - they get a GUID as name - and the original names and which entity they belong to are stored in the DB.
I was thinking about storing these images in the DB instead of the filesytem. They are in a directory where the users do not have access, so it wouldn't make any difference to them.
Does it make sense to store the images in the DB instead of the filesystem in this case?
Right now the application DB is MSSQL2008R2 but can be switched to MSSQL2014. MSSQL server and filesytem are hosted externally and accessed via Citrix. The application is also hosted via Citrix.

You shoud store images in disk and its path should be stored in database.
If you want to re size image(use your C# codes) put it into another folder and store its path in db
For more detail you can see
Storing Images in DB - Yea or Nay?
PHP to store images in MySQL or not?

Related

sql data base with pictures

I'm working on a SQL server database and I need to have pictures
its for a catalog and most pictures are 1-4 mbs I don't thing embedding the pictures in SQL will be a good idea
what the best solution
till now I used to use access
I would really like to make a wpf form
but when I make a data source I don't understand exactly how linked images work
my main point is that I need it to run really quick and print out a catalog with inventory info each day for thousands of items
I'm looking for a form to manage it
I have tried an access form but access doesn't handle good the linked pictures
Just store the path to the image in the database.
Or, if using SQL 2008 or higher, there is also a new table called FileTable that stores data in the file system directly.
http://msdn.microsoft.com/es-es/library/ff929144.aspx
"I need it to run really quick" If speed is a must, Access might not be a good choice for this.. You should use a more professional RDBMS, IMHO.
If this is a hobby project I'd suggest using sqlserver express (I assume you have microsoft knowledge) and either storing a link to an image on the file system/web server or storing the object in the db. For small data volumes either way is likely to perform fairly well.
It is all very easy in MS Access 2010, just bind an image control to a table of paths. For example, my table is called Pictures, with the following entries.
PicturePath
Z:\Users\Fionnuala\Pictures\abc.png
Z:\Users\Fionnuala\Pictures\abc.jpg
I now just need an image control on a report bound to the table Pictures with a control source set to PicturePath, the images will be displayed.

Insert a image in imageview with url into sqlite DB without BLOB

I need to insert an image into a imageview with url into sqlite DB without using the BLOB, is possible??
Thanks in advance
Short answer: I am not aware of any way to save images in SQLite without using BLOBs, and BLOBs of images can be too large for the server to handle smoothly. But I won't claim to have thorough experience with SQLite, so there's a good chance I'm missing something.
Depending on what other resources are at your disposal, one solution would be to just store the url for the image in a TEXT type, but save the image in some other file system. Then when you want to display the image, query the database to get the address (plus whatever other relevant info), isolate it from the results, and query the file system for the image. Implementing this pattern will really depend on the environment your system will be working in; if it's an Android device, you can probably just refer to the filepath it started at, or save it to a dedicated folder; if it's a web interface, the images would most easily be saved as a sub-folder next to the web page(s) that use the images.

WinForms and Access Database Attachments

If I have a PDF file saved into an attachment field in an Access database, is there anyway I could get that attachment from the database and view it in the WinForm? Or the WinForm WebBrowser maybe?
Or am I just better off sticking to a field in the database that tells me the file path of said file so I can navigate my WebBrowser to that?
I've been working with Access since long before Access 2007 introduced the Attachments field type, so I have a history of shying away from imbedding images and documents in the database. (They tended to bloat the database quite significantly, and the OLE "wrappers" added to the files were a real nuisance when trying to extract the files via code.)
Access 2007+ makes this quite a bit simpler with the Attachments field because DAO has been updated to support .SaveToFile and .LoadFromFile on Attachments. Also, attachments are (apparently) compressed when saved to the database, which should help with the bloat problem.
So, I'd say that the choice is really up to you, because if you want to view (or preview, or open) the PDF attachment in your WinForm then you'll probably wind up using Microsoft.Office.Interop.Access.Dao to save the attachment as a temporary file anyway. Therefore, whatever mechanism you use to preview/view/open the attachment will be working on a file; it will either be
a temporary file extracted from the database, or
a persistent file in a filesystem that you reference from a pathname or URL in the database.
To read the file from the database you would need to read the bytes from the database and write them to a new pdf file, then point your viewer to that file. To view a pdf directly on the WinForm you would need a 3rd party control. If you have a plugin where you can view pdfs in your browser, the WinForm WebBrowser will work.
Storing just the path in the database leads to less hassle from a coding standpoint, because you are going to have to point your viewer to a file anyway. Also is theres an issue with the database, there is a higher chance all the attachments will be lost. On the flipside, if just the paths are stored you need to make sure those paths are always accessible.
I would recommend storing them outside of the database for the above reasons, especially if this is a larger database.

creating a video database

I am interested in creating a video databse. My goal is to have a folder where my videos will be kept and each time I copy/delete a video the website that presents them should be updated to. the problem is I have no idea how to approach it.
Should I..
Use Sql and store a reference to each video location?
Have a script that checks all the time if new changes happen in that folder?
A package like joomla?
I am using ubuntu btw. I already have a simple html5 page, and I am presenting the videos using html5 video.
It depends on the size and the performance you want.
1.Way : use php to scan the folder and generate links on the fly
2.way : Use a database to store the file names and retrieve the names from the database and generate urls
pros and cons.
simple to implement , no changes in upload or download script. no database required.
You need have a database , little coding required for upload and also while genrating a page
You should make a db (format does not matter) and storing in it only file names of videos: the videos would be stored on hard drive.
Any operation on the web site will pass first on db for insert/update/delete videos records and then (maybe in a transaction context) on the file system.
This would be the standard approach to your question.

Should data files be stored on the same computer (server) the database is stored in?

Currently in our research group, we have many "data files" stored on three servers and a couple of personal computers running different operating systems.
We want to build a database, which would store some information in addition to the URLs of those various "data files". My question is, do we have to copy all the data files and put them in a directory in the same server the database is in? Or can they be left as they are on the different computers? If the second case is ok, what would be the format of the url of the "data files"?
It really depends on what your intended goal is and what your current setup is like
If the files are currently sitting somewhere on the network, and you need a path that the application can use to access them, you just need to store the network path (\\server\share\file for Windows environments) in the database, then read it and access that path to access the files. You'll need to make sure everyone has read access to them.
If the files are currently accessible through a website URL, internal or external, then again, you just need to store that URL (or some portion thereof) (http://mywebsite.com/myfile or http://servername/myfile) and access that.
If either of the above are not currently true, but you want them to be, then you'll need to set up a new share/webserver and put the files there. There's no requirement that this be the same server as the database, but it'd make for better backups if it was.
If you want the files themselves to be in the database, you should check out Bob Fanger's link.
Not sure what you're asking here but...
If you want your database engine to read files filled with data, it probably doesn't matter where they are stored - though this may depend on the database you are using. Are you using MySQL? MS-SQL Server? Oracle?
Many database vendors provide relatively easy-to-use admin tools that would let you choose a file to be loaded, and usually the file chooser dialoge lets you browse networks so you could load a file over the network. Details on how to do this vary so consult the manual for your database engine for loading data from a pre-existing file.
Be aware that if the database is on Computer A and the data is being loaded from Computer B over the network, it will probably be slower than if the data was on the same computer as the database.
It doesn't really matter if the files are stored outside the database anyway.
See Storing Images in DB - Yea or Nay? for more thoughts on that one.
If the files accessible by an url, you can store that with the meta data, like
http://server1/folder/file.ext, file://\server1\folder\file.ext or "file://P:\folder\file.ext"
Things to consider:
Backups
Performance
Synchronisation between the meta-data and the data

Resources