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

 

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

Array (100000,3) σε SQL server table

Îåêßíçóå áðü ôï ìÝëïò npet. Τελευταία δημοσίευση από το μέλος manosB στις 05-12-2008, 10:59. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-12-2008, 20:53 46671

    Array (100000,3) σε SQL server table

    Αρχικά γεια σας σε όλους!!!

    Έχω ένα string array με διαστάσεις (100000,3). Μπορώ να το αντιγράψω στον SQL server μου με τη μία ή πρέπει να φτιάξω Loop και να περνάω στον SQL μία μία γραμμη του Array?

    Το ρωτάω γιατί αργει αρκετά και μου σκάει για κάποιο λόγο.

     

    Ευχαριστώ πολύ


    Απαράδεκτο για πράκτορες!!! Βέγγος.
  •  03-12-2008, 21:07 46672 σε απάντηση της 46671

    Απ: Array (100000,3) σε SQL server table

    Τι εννοείς λέγοντας "αντιγράψω"? Θα πρέπει να κάνεις πιο σαφή την ερώτησή σου...


    Vir prudens non contra ventum mingit
  •  04-12-2008, 00:00 46685 σε απάντηση της 46671

    Απ: Array (100000,3) σε SQL server table

    Θα ρίξω άλλη μία ματιά στην κρυστάλλινη σφαίρα μου και θα υποθέσω ότι έχεις ένα πίνακα με 3 στήλες και 100000 γραμμές τις οποίες θέλεις να εισάγεις στον SQL Server. Καταρχήν, πρέπει να καταλάβεις το εξής. Εκατό χιλιάδες inserts θα αργήσουν, ότι και να κάνεις, σε όποια βάση και να το κάνεις. Επιπλέον, είναι αρκετά σπάνιο να χρειάζεται να κάνεις εκατό χιλιάδες inserts με τη μία. Τόσα πολλά inserts θα δημιουργήσουν προβλήματα fragmentation και θα αντιμετωπίσουν καθυστερήσεις αν ο πίνακας έχει indexes. Επαναλαμβάνω, αυτό θα συμβεί σε οποιαδήποτε βάση. Κατά πάσα πιθανότητα υπάρχει άλλη λύση από τα 100000 inserts, αλλά μέχρι να μας εξηγήσεις ποιό είναι το πρόβλημα, δεν μπορούμε να σε βοηθήσουμε περισσότερο.

    Ο τρόπος με τον οποίο γίνονται μαζικές εισαγωγές σε οποιαδήποτε βάση είναι το bulk insert. Η βάση δεδομένων διαβάζει τα δεδομένα όλα μαζί και τα γράφει στον πίνακα χωρίς να κρατάει εγγραφές στο transaction log για κάθε μία εγγραφή. Έτσι πετυχαίνεις αρκετά μεγαλύτερη ταχύτητα εισαγωγής. Bulk Insert μπορείς να πετύχεις με διάφορους τρόπους στον SQL Server. Καταρχήν, μπορείς να εισάγεις εγγραφές από ένα αρχείο με την εντολή ... BULK INSERT ή το bcp command line utility. Μπορείς επίσης να χρησιμοποιήσεις SSIS (integration services) και το Bulk Insert task.

    Το ίδιο το ADO.NET 2+ περιέχει την κλάση SqlBulkCopy με την οποία μπορείς να στείλεις τα δεδομένα ενός DataTable, DataRow ή DataReader στη βάση μέσω του μηχανισμού bulk insert του SQL Server. Με αυτή την κλάση μπορείς να πετύχεις μέσω ADO.NET την ίδια περίπου απόδοση όπως με το bcp ή το BULK INSERT.

    Θα επαναλάβω ότι πολύ σπάνια χρειάζεται να κάνει κάποιος bulk insert από τον client στον server. Συνήθως υπάρχουν πολύ καλύτερες εναλλακτικές. Αν, για παράδειγμα, θέλεις να κάνεις περίπλοκους υπολογισμούς μπορείς να φτιάξεις και να χρησιμοποιήσεις User Defined Types και Functions σε C# ή VB.NET και να τα χρησιμοποιήσεις από T-SQL. Έτσι θα κάνεις τους υπολογισμούς στον server και δεν θα χρειαστεί να μεταφέρεις τα δεδομένα στον client για επεξεργασία και να τα επιστρέψεις.

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


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-12-2008, 17:14 46704 σε απάντηση της 46685

    Απ: Array (100000,3) σε SQL server table

    Συγνώμη η περιγραφή μου ήταν φτωχή. Ώστόσο η κρυστάλλινη σφαίρα σου σωστά σου τα είπε. Smile

    Η αλήθεια είναι ότι αυτό που θέλω να δημιουργήσω είναι ένας τρόπος να συχρονήσω δύο συστήματα. Το ένα σύστημα είναι ένα PLM Product Lifecycle Management σύστημα της Autodesk (Για την ιστορία η Autodesk είναι η εταιρία που φτιάχνει το AutoCAD και το PLM πρόγραμμα λέγεται Productstream) με ένα πίνακα μίας DB SQL Server.

    Το PLM σύστημα έχει μία βάση σε SQL server με τον οποίο συνδέεσαι μέσω Web Services από VB.NET.

    Η άλλη εφαρμογή είναι μία SQL DB στην οποίο συνδέεσαι με ADO.NET

    To API που μας δίνει η Autodesk μπορώ να εξάγω την πληροφορία την οποία θέλω, καλώντας ένα Webservice, σε ένα Array το οποιο έχει 3 columns και 100000 γραμμές πολύ γρήγορα. Οπότε είμαι στο run time με το Array full of data. Με ένδιαφέρει αυτό να το βγάλω και να το βάλω σε ένα πίνακα μιας DB η οποία βρίσκεται στοn ίδιο server και την οποία διαβάζει η άλλη εφαρμογη.

    Αυτή η δουλεία πρέπει να γίνεται καθημερινά γιατί το PLM θα εμπλουτίζεται συνεχώς με πληροφορία την οποία τη θέλω στην άλλη βάση.


    Απαράδεκτο για πράκτορες!!! Βέγγος.
  •  05-12-2008, 10:59 46718 σε απάντηση της 46704

    Απ: Array (100000,3) σε SQL server table

    npet:
    Η αλήθεια είναι ότι αυτό που θέλω να δημιουργήσω είναι ένας τρόπος να συχρονήσω δύο συστήματα. Το ένα σύστημα είναι ένα PLM Product Lifecycle Management σύστημα της Autodesk (Για την ιστορία η Autodesk είναι η εταιρία που φτιάχνει το AutoCAD και το PLM πρόγραμμα λέγεται Productstream) με ένα πίνακα μίας DB SQL Server.


    Έχεις πρόσβαση σε αυτό τον πίνακα εξωτερικά??

    Αν ναι τότε είναι πολύ πιο γρήγορο να κάνεις την δουλειά χτυπώντας κατευθείαν τον πίνακα  με ένα απλό SQL batch που θα διαβάζει τα δεδομένα από τη μία βάση και θα τα βάζει στην άλλη. Έτσι η ταχύτητα που θα έχεις θα είναι πολλαπλάσια από το να καλέσεις web service να φορτώσεις τα δεδομένα στη μνήμη και μετά να τα ξεφορτώσεις σε άλλη βάση. (Πας Θεσσαλονίκη μέσω Μονάχου δηλαδή!!!Big Smile

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