Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

database for images

Îåêßíçóå áðü ôï ìÝëïò kostasvit. Τελευταία δημοσίευση από το μέλος George Parissis στις 20-12-2013, 12:05. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-12-2013, 11:39 74790

    database for images

    καλημέρα,

    ήθελα να ρωτήσω, έχω μια σελίδα όπου κάποιος χρήστης(administrator) θα μπορεί να κάνει upload φωτογραφίες σε μια ιστοσελίδα όπου αυτές θα αποθηκεύονται σε μια βάση.

    απλά επειδή θα υπάρχουν κατηγορίες για της φωτογραφίες, πως θα ήταν καλύτερο, να έκανα από ένα table για κάθε κατηγορία ή να κάνω ένα για όλες της κατηγορίες;

    Δημοσίευση στην κατηγορία: , ,
  •  18-12-2013, 10:47 74792 σε απάντηση της 74790

    Απ: database for images

    Το ότι περιέχουν εικόνες δεν παίζει ρόλο στο αν θα έχεις ένα ή πολλούς πίνακες. Με δεδομένο μάλιστα ότι οι κατηγορίες αλλάζουν, θα ήταν πολύ δύσκολο να φτιάχνεις ένα νέο πίνακα κάθε φορά που θέλεις να προσθέσεις κατηγορία - και να ανανεώσεις όλα τα queries, views που φορτώνουν εικόνες.

    Το ουσιαστικό είναι το που και πως θα αποθηκεύσεις τις εικόνες. Αν θέλεις να τις αποθηκεύσεις στη βάση, θα πρέπει να ενεργοποιήσεις το FILESTREAM storage για να αποθηκευτούν οι εικόνες στο σκληρό έξω από τη βάση. Έτσι πετυχαίνεις πολύ γρηγορότερο read και ευκολότερη διαχείριση. Χωρίς το FILESTREAM ο SQL Server πρέπει πρώτα να διαβάσει όλη την εικόνα από το σκληρό και μετά να σου τη στείλει. Με το FILESTREAM, στην ουσία σου επιστρέφει ένα stream στο αρχείο και σε αφήνει να διαβάσεις τα δεδομένα απευθείας.

    Διαφορετικά, θα ήταν καλύτερο να αποθηκεύσεις μόνο τα path των εικόνων στη βάση και τις ίδιες τις εικόνες να τις αποθηκεύσεις σε κάποιο folder. Βέβαια, το FILESTREAM αυτό ακριβώς κάνει (συν την ευκολία στο backup,  transaction management κλπ)


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-12-2013, 11:12 74793 σε απάντηση της 74792

    Απ: database for images

    Παναγιώτη, η αποθήκευση εικόνων σε βάση, ειδικά σε σενάρια web sites είναι μια πρακτική η οποία δεν θα ενθάρρυνα. Πρώτον, γιατί βάσει των πλάνων φιλοξενίας πολλές φορές χρησιμοποιούνται express εκδόσεις των SQL Servers με περιορισμούς ως προς το μέγεθος της βάσης, η οποία μπορεί να μεγαλώσει πάρα πολύ αν αποθηκεύονται binary data σε αυτην. Δεύτερον, γιατί με file-based αποθήκευση διευκολύνεται πολύ η χρήση on-the-fly resizers (imageresizing.net, imagegen κλπ). 

    Σχετικά με το ερώτημα του συναδέλφου: Θα πρέπει να κρατάς το schema της database όσο γίνεται σταθερότερο. Το να φτιάχνεις ένα καινούριο πίνακα, πανομοιότυπο με τους προηγούμενους, για κάθε κατηγορία, δεν είναι αποτελεσματικό. Τι θα γίνει αν θέλεις να εμφανίσεις όλες τις εικόνες που ανήκουν σε κατηγορίες που θα έχει επιλέξει κάθε φορά ο χρήστης; Τι θα γίνει αν μια εικόνα ανήκει σε παραπάνω από μία κατηγορίες;

    Η καλύτερη προσέγγιση που μπορείς να κάνεις είναι να φτιάξεις ένα πίνακα εικόνων και ένα πίνακα κατηγοριών. Και οι δύο πρέπει να έχουν ένα primary key (id) που θα χαρακτηρίζει μοναδικά κάθε εγγραφή. Επειτα, θα πρέπει να δημιουργήσεις έναν ενδιάμεσο πίνακα συσχέτισης (junction table) όπου κάθε εγγραφή του θα περιέχει το id της εικόνας και το id της κατηγορίας που ανήκει αυτή. Με αυτό τον τρόπο, καλύπτεις όλα τα σενάρια: Μπορείς να ορίσεις όσες κατηγορίες θέλεις, μπορείς να αντιστοιχείς μια εικόνα σε μια ή περισσότερες κατηγορίες (κάθε αντιστοίχιση θα είναι μια εγγραφή στον ενδιάμεσο πίνακα), μπορείς ακόμα και να έχεις εικόνες που δεν ανήκουν σε κατηγορία.

    Μια πιό απλή προσέγγιση, η οποία όμως σε περιορίζει στο ότι θα πρέπει να έχεις μόνο μία κατηγορία στην οποία να ανήκει η εικόνα, είναι να πας με δύο πίνακες: Ενα πίνακα κατηγοριών και ένα πίνακα εικόνων όπου σε καθε εγγραφή ένα πεδίο θα περιέχει το id της κατηγορίας στην οποία ανήκει η εικόνα.

     

     

     

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  18-12-2013, 11:57 74794 σε απάντηση της 74793

    Απ: database for images

    Γι αυτό κι εγώ έγραψα *FILESTREAM*. Αυτό ακριβώς κάνει, *δεν* αποθηκεύει μέσα στη βάση αλλά σε εξωτερικό folder

     BTW, πότε να ξεφορτωθούμε αυτό τον editor που δεν παίζει σε Chrome και να βάλουμε κάτι σε markdown, όπως στο StackOverflow? Σπάζομαι πλέον κάθε φορά να ανοίγω το HTML 


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-12-2013, 12:12 74795 σε απάντηση της 74794

    Απ: database for images

    Εχεις δίκιο Παναγιώτη. Βιαστικός όπως πάντα, δεν το πρόσεξα, διάβασα διαγώνια. :)

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  18-12-2013, 12:28 74796 σε απάντηση της 74795

    Απ: database for images

    Και επειδή με το filestream έχω φάει τα μουστάκια μου και έχω ήδη βάση που είναι 60ΤΒ κυρίως με τέτοια δεδομένα.

    Υπάρχει ένα συμβουλευτικό ποστ http://www.sqlschool.gr/blog/filestream-best-practices-from-usage-and-experience-942.aspx

     


    Antonios Chatzipavlis

  •  18-12-2013, 13:33 74798 σε απάντηση της 74793

    Απ: database for images

    ευχαριστώ για την απάντηση

    αν σε βοηθάει, αυτό που θέλω να κάνω είναι, να φτιάξω μια σελίδα διαχειριστή όπου θα μπαίνει μέσα και θα ανεβάζει ένα image, ένα μικρό κείμενο και μετά θα αποθηκεύει στην βάση , ανάλογα ποια κατηγορία θα έχει επιλέξει. Και μετά αυτές οι εικόνες και το κείμενο θα ανεβαίνουν σε μία άλλη σελίδα όπου θα υπάρχουν οι κατηγορίες και θα μπορεί να επιλέξει ο χρήστης ποια κατηγορία θέλει και να του εμφανίζει της αντίστοιχες εικόνες.

  •  20-12-2013, 12:05 74804 σε απάντηση της 74798

    Απ: database for images

    Όταν το μέγεθος τις εικόνας σου για αποθήκευση είναι <=1ΜΒ, τότε η αποθήκευση της εικόνας στην βάση δεν είναι λάθος. Μάλιστα είναι πιο γρήγορη στην ανάγνωση από FILESTREAM και από Win32 API.

    Επίσης αν το μέγεθος είναι μέσα στο όριο που ανέφερα η αποθήκευση στην βάση είναι επίσης πιο γρήγορη από FILESTREAM και Win32 API. Αν οι φωτογραφίες διαγράφονται, αλλάζουν με ένα πιο συχνό ρυθμό τότε εδώ τα πράγματα δεν είναι τόσο απλά. Για εικόνες κάτω από 1ΜΒ νομίζω το FILESTREAM εξακολουθεί να υστερεί, δεν το έχω δει και δεν έχω ψάξει να βρω κάποιο benchmark στο internet.

    Δεν είναι λάθος το FILESTREAM, αλλά αν οι εικόνες είναι μικρές δεν έχεις να κερδίσεις κάτι από την χρήση του. Αν όμως είναι πάνω από 1MB τότε ακολούθα ότι σωστά σου έχει προταθεί.

     

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems