Γι αυτό και ανέφερα το UuidCreateSequential. Είναι το ίδιο ακριβώς όπως το Guid.New αλλά αυξάνεται σταθερά. Από την άλλη, όταν χρησιμοποιείς ORM η αντιστοίχιση των primary keys γίνεται από το ίδιο το ORM. Αν το ORM είναι καλά γραμμένο, αυτή η αντιστοίχιση γίνεται στο server.
Όσο για τη μαζική καταχώρηση εγγραφών, αν μαζική >10 τότε θα πρέπει να υπάρχει διαδικασία ETL και όχι αποστολή εγγραφών μία-μία από τον client. Διαφορετικά και η καταχώρηση αρχίζει να καθυστερεί υπερβολικά και η διαδικασία γίνεται υπερβολικά περίπλοκη. Σε τέτοιες περιπτώσεις είναι πολύ γρηγορότερο και ευκολότερο να φορτώσεις τις εγγραφές από τα διάφορα συστήματα σε staging πίνακες και μετά να τις συνδυάσεις. Αν έχεις απλά 3 συστήματα με 1000 νέες εγγραφές το καθένα, τα αντίστοιχα ETL queries είναι σχεδόν no-op για μία βάση, ενώ η ίδια δουλειά σε κάποιο client θα μπορούσε να καταλήξει από γραμμικά (1000 φορές) ως συνδυαστικά (1000 φορές ανά συνδυασμό συστημάτων) πιο αργή.
Αναφέρω το συνδυαστικό γιατί αυτό ακριβώς μου έχει τύχει τελευταία - διαδικασία η οποία ταίριαζε εγγραφές συστημάτων με τιμολόγια στη μνήμη (για να πάει πιο "γρήγορα"). Το αποτέλεσμα ήταν να χρειάζονται Μ*N operations, ανά συνδυασμό και η επεξεργασία έτους ή εξαμήνου να παίρνει μέρες. Αντικαθιστώντας αυτό το πράγμα με πίνακες στη βάση και σωστό indexing, η ταχύτητα κατέβηκε στα λεπτά. ΟΚ, και με change tracking απλά δεν χρειαζόταν να υπολογίσω τα πάντα, μόνο τις αλλαγμένες εγγραφές. Αυτή τη στιγμή όμως μία διαδικασία matching 800Κ εγγραφών από δύο συστήματα θέλει 90 sec.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos