<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Guid</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/77643.aspx</link><pubDate>Tue, 29 Mar 2016 03:31:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:77643</guid><dc:creator>Antonios Chatzipavlis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/77643.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=77643</wfw:commentRss><description>&lt;p&gt;Είμαι 100% μαζί σου για την χρήση που αναφέρεις. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Guid</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/77642.aspx</link><pubDate>Mon, 28 Mar 2016 22:53:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:77642</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/77642.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=77642</wfw:commentRss><description>&lt;p&gt;Γι αυτό και ανέφερα το&amp;nbsp;&lt;span style="font-family:Tahoma, Arial, Helvetica;font-size:12.096px;"&gt;UuidCreateSequential. Είναι το ίδιο ακριβώς όπως το Guid.New αλλά αυξάνεται σταθερά. Από την άλλη, όταν χρησιμοποιείς ORM η αντιστοίχιση των primary keys γίνεται από το ίδιο το ORM. Αν το ORM είναι καλά γραμμένο, αυτή η αντιστοίχιση γίνεται στο server.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Tahoma, Arial, Helvetica;font-size:12.096px;"&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;Όσο για τη μαζική καταχώρηση εγγραφών, αν μαζική &amp;gt;10 τότε θα πρέπει να υπάρχει διαδικασία ETL και όχι αποστολή εγγραφών μία-μία από τον client. Διαφορετικά και η καταχώρηση αρχίζει να καθυστερεί υπερβολικά και η διαδικασία γίνεται υπερβολικά περίπλοκη. Σε τέτοιες περιπτώσεις είναι πολύ γρηγορότερο και ευκολότερο να φορτώσεις τις εγγραφές από τα διάφορα συστήματα σε staging πίνακες και μετά να τις συνδυάσεις. Αν έχεις απλά 3 συστήματα με 1000 νέες εγγραφές το καθένα, τα αντίστοιχα ETL queries είναι σχεδόν no-op για μία βάση, ενώ η ίδια δουλειά σε κάποιο client θα μπορούσε να καταλήξει από γραμμικά (1000 φορές) ως συνδυαστικά (1000 φορές ανά συνδυασμό συστημάτων) πιο αργή.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Αναφέρω το συνδυαστικό γιατί αυτό ακριβώς μου έχει τύχει τελευταία - διαδικασία η οποία ταίριαζε εγγραφές συστημάτων με τιμολόγια στη μνήμη (για να πάει πιο "γρήγορα"). Το αποτέλεσμα ήταν να χρειάζονται Μ*N operations, ανά συνδυασμό και η επεξεργασία έτους ή εξαμήνου να παίρνει μέρες. &amp;nbsp;Αντικαθιστώντας αυτό το πράγμα με πίνακες στη βάση και σωστό indexing, η ταχύτητα κατέβηκε στα λεπτά. ΟΚ, και με change tracking απλά δεν χρειαζόταν να υπολογίσω τα πάντα, μόνο τις αλλαγμένες εγγραφές. Αυτή τη στιγμή όμως μία διαδικασία matching 800Κ εγγραφών από δύο συστήματα θέλει 90 sec.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Guid</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/77641.aspx</link><pubDate>Mon, 28 Mar 2016 22:29:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:77641</guid><dc:creator>George Parissis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/77641.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=77641</wfw:commentRss><description>&lt;p&gt;Αντώνη είσαι πάντα μία αστείρευτη πηγή γνώσης για τον SQL Server και επισκέπτομαι συχνά το site σου. Θα ήθελα να πω και εγώ δύο λόγια για το GUID, μιάς και είναι μία επιλογή που χρησιμοποιώ εδώ και χρόνια και να απαντήσω και στον Παναγιώτη για ποιον λόγο η επιλογή του NEWSEQUNETIALID() στον server δεν είναι η καλύτερη, για αρκετές περιπτώσεις θα έλεγα, πάντα με την εμπειρία που έχω σε δουλειές που έκανα.&lt;/p&gt;&lt;p&gt;Για εμένα το μεγαλύτερο πλεονέκτημα που έχει η χρήση του GUID σαν primary key είναι για&amp;nbsp;σενάρια merging εγγραφών από διαφορετικές βάσης αλλά και για σενάρια μαζικής καταχώρησης εγγραφών που πρέπει να καταχωρηθούν σε πάνω από ένα πίνακες. Τα παραδείγματα για το δεύτερο σενάριο είναι πολλά. Π.χ εφαρμογές τιμολόγησης που πρέπει να καταχωρήσουν τιμολόγια με τα προϊόντα&amp;nbsp;ή υπηρεσίες. Ασφαλιστικές εταιρείες που δέχονται claims, ναυτιλιακές εταιρείες που καταχωρούν δρομολόγιο με φορτία κ.τ.λ. Στις περιπτώσεις αυτές είναι σημαντικό να γνωρίζεις το id που θα πάρει η κεντρική εγγραφή με βάση την οποία θα καταχωρηθούν και οι υπόλοιπες. Αν βλέπουμε ένα κέρδος για την μία εγγραφή φανταστείτε το κέρδος όταν θέλουμε να καταζωρήσουμε μαζικά πεντήντα τιμολόγια. Όπότε στα σενάρια αυτά δεν σε βοηθάει το NEWSEQUENTIALID() στον server γιατί τότε χάνεις ότι κέρδος έχεις αφού για κάθε καταχώρηση θα πρέπει πρώτα να πας στον server. &lt;/p&gt;&lt;p&gt;Φυσικά υπάρχουν και προβήματα με την χρήση του GUID σαν primary key και το άρθρο του Αντώνη είναι πολύ καλή πηγή ενημέρωσης. Οπότε πως μπορείς να το αποφύγεις όλο αυτό το μπέρδεμα και να έχεις και το κέρδος στην απόδοση που λέγαμε. Εδώ εγώ προσωπικά έχω επιλέξει την εξής πρόσεγγιση. Να βάλω το GUID σαν primary&amp;nbsp;key το οποίο το κάνω generate από την εφαρμογή μου αλλά να ορίσω για clustered index ένα άλλο πεδίο που αναφέρεται στην ημερομηνία και στην ώρα&amp;nbsp;που καταχωρήθηκαν οι εγγραφές. Επειδή αυτό δεν με ενδιαφέρει να το δίνω εγώ από την εφαρμογή μπορεί να βάζει ο server την ώρα του. Πως βλέπεις αυτήν την προσέγγιση Αντώνη;&lt;/p&gt;&lt;p&gt;Όσο για αυτό που έγραψες Παναγιώτη με το import δεν το γνωρίζω.&amp;nbsp;Μπορείς να γράψεις λίγο παραπάνω για την λειτουργία του;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Ευχαριστώ.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Guid</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/77634.aspx</link><pubDate>Thu, 24 Mar 2016 20:26:10 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:77634</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/77634.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=77634</wfw:commentRss><description>&lt;p&gt;Εδώ που τα λέμε, γιατί να φτιάξεις το GUID στον client και να μην ορίσεις το NEWSEQUENTIALID() σαν default τιμή της στήλης? Το αντίστοιχο στον client είναι να καλέσεις το&amp;nbsp;UuidCreateSequential :&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; [DllImport("rpcrt4.dll", SetLastError=true)]&lt;br&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp; &amp;nbsp;public static extern int UuidCreateSequential(out Guid guid);&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Απ: Guid</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/77633.aspx</link><pubDate>Thu, 24 Mar 2016 15:50:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:77633</guid><dc:creator>Antonios Chatzipavlis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/77633.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=77633</wfw:commentRss><description>&lt;p&gt;The answer is YES and FYI https://en.wikipedia.org/wiki/Globally_unique_identifier&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Also just in case please read this&amp;nbsp;http://sqlschool.gr/blog/uniqueidentifier-data-type-as-table-primary-key-or-clustered-index-56.aspx&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Guid</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/77632.aspx</link><pubDate>Thu, 24 Mar 2016 09:11:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:77632</guid><dc:creator>gianestras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/77632.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=77632</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-size:10pt;"&gt;καλημέρα σας..&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Εξασφαλίζεται η μοναδικότητα, πάντα, σε έναν πίνακα πχ Users, της στήλης που γεμίζει με&amp;nbsp;&lt;span style="box-sizing:border-box;font-family:'Courier New';font-size:14.6667px;line-height:20.9524px;"&gt;Guid&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:14.6667px;line-height:20.9524px;"&gt;.NewGuid()&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>