mayrozjack Δημοσ. 13 Ιουλίου 2011 Δημοσ. 13 Ιουλίου 2011 Καλησπέρα σε όλους! Δουλεύω ένα project που στον πυρήνα του είναι μια βάση δεδομένων με στοιχεία τα οποία αναζητούνται μέσω μιας ιστοσελίδας βάσει κάποιων κριτηρίων και τελικά εμφανίζονται στους ενδιαφερόμενους. Το ένα κομμάτι είναι η αναζήτηση και η επιστροφή των δεδομένων από την κεντρική βάση. Το άλλο κομμάτι (και το πιο ουσιαστικό) που θέλω να υλοποιήσω έχει να κάνει με την ενημέρωση αυτής της κεντρικής βάσης από άλλες μικρότερες που βρίσκονται σε γειτονικούς server. Για να γίνω πιο ξεκάθαρος, αυτό που θέλω να κάνω είναι να μαζεύω πληροφορίες από γειτονικες βάσεις, να τις συγκεντρώνω στη δική μου και να τις παρέχω μέσω δικού μου interface στους ενδιαφερόμενους. Το πρόβλημά μου είναι το εξής: δεν ξέρω πως θα κανω την ενημέρωση της δικής μου βάσης και ακόμα περισσότερο πως θα υπάρξει συμβατότητα μεταξύ πιθανως διαφορετικών τύπων βάσεων δεδομένων. Η ενημέρωση θέλω να γίνεται real-time και φυσικά αυτοματοποιημένα, επομένως φαντάζομαι πως θα πρέπει να χρησιμοποιήσω ένα πακέτο διαχείρισης βάσεων δεδομένων. Είμαι λίγακι noob σε ότι αφορά θέματα database οπότε θα εκτιμούσα ιδιαίτερα αναλυτική βοήθεια... Σας ευχαριστώ εκ των προτέρων!
Aztec Δημοσ. 13 Ιουλίου 2011 Δημοσ. 13 Ιουλίου 2011 Τι access έχεις στα μηχανήματα των βάσεων δεδομένων? Μπορείς να κάνεις και να εγκαταστήσεις ότι θέλεις ? Οι βάσεις είναι ίδιες ? Μιλάμε για replication δηλαδη ή θέλεις να πάρεις διαφορετικά πράγματα απο διαφορετικές βάσεις επιλεκτικά και να τα φέρεις με μετασχηματισμό στην βάση(transformation)?
_tasos Δημοσ. 13 Ιουλίου 2011 Δημοσ. 13 Ιουλίου 2011 Το πρόβλημα που περιγράφεις μοιάζει πολύ με διαδικασίες ενημέρωσης αποθηκών δεδομένων (DataWare Houses). Το κομμάτι που αφορά τη μεταφορά των δεδομένων λέγεται ETL και είναι στην ουσία αυτό που περιγράφεις. Στη γενική περίπτωση τέτοιες διαδικασίες δεν τρέχουν σε realtime, αλλά κάποια στιγμή που οι ΒΔ δεν έχουν φόρτο, π.χ. το βράδυ, αλλά αυτό τελικά εξαρτάται από το πόσα δεδομένα έχεις και πόσο φόρτο έχουν οι μικρότερες ΒΔ που περιέχουν τα αρχικά δεδομένα. Χοντρικά, έχεις 3 βήματα. 1. Εξάγεις τα δεδομένα από τις αρχικές ΒΔ. Εδώ ένα ερώτημα είναι ποια δεδομένα. Όλες ή μόνο τις νέες εγγραφές; Το όλες τις εγγραφές είναι εύκολο αλλά αν είναι πολλές μπορεί να μην προλαβαίνει το σύστημα σου να κάνει τη μεταφορά. Πέρα από τις νέες εγγραφές, θα πρέπει να δεις και ποιες έχουν έχουν αλλάξει ή διαγραφεί. 2. Μετατρέπεις τα δεδομένα σου στο σχήμα της τελικής ΒΔ. Αν οι αρχικές βάσεις μοιάζουν, αυτό είναι εύκολο. Αν πάλι όχι, τότε πρέπει να κάνεις τους κατάλληλους μετασχηματισμούς. 3. Φορτώνεις τα δεδομένα στη τελική ΒΔ. Αυτά τα λίγα από θεωρία. Πρακτικά όμως, θα πρέπει η λύση σου να προσαρμοστεί στο δικό σου case. Οπότε, a. πόσες αρχικές ΒΔ (πηγές δεδομένων) έχεις και πόσες εγγραφές περιέχει χοντρικά η κάθε μια; b. Τα δεδομένα στις πηγές αλλάζουν (updates ή deletes) ή μόνο εισάγονται νέα δεδομένα; c. Η τελική περιέχει μόνο δεδομένα από τις αρχικές ή μπαίνουν και εκεί άλλα δεδομένα; d. Οι αρχικές ΒΔ περιέχουν κοινά δεδομένα; Μπορεί να καταλήξεις με διπλοεγγραφές στη τελική ΒΔ.
Aztec Δημοσ. 13 Ιουλίου 2011 Δημοσ. 13 Ιουλίου 2011 _tasos εγώ απο ότι κατάλαβα θέλει ενα real time data replication tool με δυνατότητες για transformations.
mayrozjack Δημοσ. 13 Ιουλίου 2011 Μέλος Δημοσ. 13 Ιουλίου 2011 Λοιπόν, _tasos, αυτό που θέλω να κάνω οπως παρατήρησες σωστα μοιάζει πάρα πολύ με αυτό που περιγράφεις. Θα το ήθελα σε real-time δεδομένου ότι θα είχα πιο αξιόπιστα δεδομένα ακόμα και στα "παράθυρα" μεταξύ των ενημερώσεων (π.χ. το βράδυ ή ανα 12 ώρες όπως θα ήταν ένα λογικό διάστημα). Τώρα για να τα πάρουμε με τη σειρά, φίλε Aztec, στον πραγματικό κόσμο δεν θα έχω φυσικό access στα μηχανήματα. Δεν θα μπορώ να κάνω οποιαδήποτε αλλαγή, εγκατάσταση κλπ, ενω θα βασίζομαι αποκλειστικά σ'ενα κανάλι επικοινωνίας απ'όπου θα δέχομαι δεδομένα που θα μου στέλνουν (είτε real-time, είτε σε παράθυρα επικοινωνίας). Οι βάσεις μπορεί να είναι ίδιες, μπορεί και διαφορετικές, αφού όσο περνάει ο καιρός μπορεί να προστίθενται καινούργιες πηγές δεδομένων. Σχετικά με τις ερωτήσεις που έθεσες _tasos, οι αρχικές πηγές δεδομένων μου θα είναι 4-5, που όμως μπορεί να ελαττώνονται ή να αυξάνονται, ανάλογα με διάφορες περιστάσεις (ανθρώπινος παράγοντας). Τα δεδομένα στις πηγές αλλάζουν, μπορεί δηλαδή να υπάρξουν updates σε εγγραφές ή deletes επομένως θα πρέπει να ενημερώνεται σχετικά και η δική μου βάση. Αυτό που είναι σίγουρο είναι ότι η τελική βάση δεδομένων θα περιέχει δεδομένα μόνο από τις πηγές και όχι επιπλέον δικά της. Δεδομένα χρηστών συστήματος και τα σχετικά, θα βρίσκονται σε ξεχωριστή βάση που φαντάζομαι είναι και το προφανές. Οι αρχικές πηγές, πιθανόν να περιέχουν ίδια δεδομένα μεταξύ τους, ωστόσο πιθανές διπλοεγγραφές όχι μονο δεν είναι πρόβλημα αλλά είναι και επιθυμητό αφού θα πρέπει να εμφανίζονται στο χρήστη. Σε όλο αυτό, το μόνο επιπλέον που θέλω να υπάρχει στη βάση μου είναι ένα ID (πχ ένας αύξων αριθμός) που θα είναι unique και θα χαρακτηρίζει τη βάση-πηγή από την οποία προήλθε η κάθε εγγραφή.
_tasos Δημοσ. 14 Ιουλίου 2011 Δημοσ. 14 Ιουλίου 2011 _tasos εγώ απο ότι κατάλαβα θέλει ενα real time data replication tool με δυνατότητες για transformations. Το realtime όπως είπα κ πριν είναι δύσκολο πρακτικά να επιτευχθεί, και ο κύριος λόγος είναι ότι για να κάνω detect ποιες εγγραφές χρειάζομαι να πάρω από τη πηγή θα πρέπει να κλειδώσω για κάποια ώρα τον πίνακα και λόγω του κλειδώματος δεν θα έχει κανένας άλλος πρόσβαση στα δεδομένα. Αν είναι λίγες οι εγγραφές, τότε το realtime μπορεί να είναι εφικτό. @mayrozjack Το θέμα των διπλοεγγραφών λες ότι δεν πειράζει, οπότε αυτό κάνει τα πράγματα πιο απλά. Ένα πράγμα που θα χρειαστεί να κάνεις είναι να φτιάξεις ένα surrogate key. Αυτό θα είναι το primary key για κάθε πίνακα που θα περιέχει data από τις πηγές σου. Το surrogate key βοηθάει στο να μην έχεις conflicts με ίδια κλειδιά από διαφορετικές βάσεις. Άρατο surrogate key μιας εγγραφής με ID=224 από την πηγή Α να είναι A224 και αντίστοιχα το surrogate key μιας εγγραφής με ID=224 από την πηγή B να είναι B224. Το βασικό που πρέπει να κάνεις είναι να βρεις πως θα κάνεις detect τις αλλαγές στα δεδομένα. Οι εισαγωγές / διαγραφές είναι εύκολο. Τι γίνεται όμως με τα updates; Σε ενδιαφέρουν τα updates σε όλα τα πεδία ή σε συγκεκριμένα; Συγκρίνεις τα πεδία που σε ενδιαφέρουν κ βρίσκεις ποιες εγγραφές θέλεις. Αυτό όμως που δεν μας είπες είναι: (1) τι DBMS εμπλέκονται στη διαδικασία. (2) Για τον όγκο των δεδομένων. Ειδικά για το (1) ίσως να βρούμε κάποιο tool που να σε βοηθήσει σε κάποια σημεία. Επίσης, όσο πιο λίγα τα data σου, τόσο πιο πολλές επιλογές έχουμε.
mayrozjack Δημοσ. 14 Ιουλίου 2011 Μέλος Δημοσ. 14 Ιουλίου 2011 Για να είμαι ειλικρινής τα DBMS των πηγών δεν ξέρω ποια είναι. Η κεντρική βάση θα είναι μια MySQL. Μέχρι στιγμής, προκειμένου να τεστάρω το interface μου για να δω κατα πόσο μπορούν να γίνουν retrieve τα δεδομένα από την κεντρική βάση χρησιμοποιώ το phpmyadmin. Τα συνολικά δεδομένα που θα έχω δεν θα ξεπερνουν τις 10 χιλιάδες εγγραφες. Συγγνώμη αν δεν μπορώ να δώσω περισσοτερες (ή πιο συγκεκριμένες) πληροφορίες, αλλά όπως είπα δεν ξέρω πολλά από βάσεις δεδομένων και βρέθηκα ξαφνικά στα βαθεια...
_tasos Δημοσ. 14 Ιουλίου 2011 Δημοσ. 14 Ιουλίου 2011 Τα data σου είναι λίγα τελικά. Θα μπορούσες π.χ. να παίρνεις τα δεδομένα από κάθε πηγή π.χ. κάθε x ώρες και να τα βάζεις στη κεντρική σου ΒΔ. Θα πρότεινα να έχεις ένα temp πίνακα για κάθε πηγή και να γράψεις ένα script που να τα περνάει στο δικό σου σχήμα. Αυτό το script θα κάνει ότι μετασχηματισμούς χρειάζεσαι. Επίσης, πως οι αρχικές ΒΔ θα σου δίνουν τα δεδομένα; Θα έχεις πρόσβαση στη βάση και να τα παίρνεις με SQL; Ή για να το κάνουμε ακόμα πιο εύκολο, μήπως να πεις στο διαχειριστή κάθε βάσης να σου κάνει ένα export των δεδομένων σε ένα xml, που θα έχει το δικό σου σχήμα και εσύ τελικά να κάνεις ένα απλό import των δεδομένων...
mayrozjack Δημοσ. 15 Ιουλίου 2011 Μέλος Δημοσ. 15 Ιουλίου 2011 Ακριβώς το τελευταίο το σκεφτόμουν κι εγώ. Τα δεδομένα θα τα παίρνω από τον διαχειριστή της βάσης ο οποίος θα μου τα κάνει export (σε μια Α μορφή, ότι του είναι πιο εύκολο), θα μου τα στέλνει κι εγώ μετα θα αναλάβω το tranform και το import στη δική μου βάση με κάποιο script όπως είπες. Τώρα, η απορία μου είναι η εξής: τι script θα είναι, πως θα γίνονται αυτοί οι μετασχηματισμοί και τι εργαλεία πρέπει να χρησιμοποιήσω; Μπορεί να γίνει για παράδειγμα με php όπου θα γίνεται retrieve ενα file που θα μου έχει σταλθεί από το σκληρό δίσκο, θα το μετατρέπει και θα το περνάει απ'ευθείας στην sql database μου? Για να μη κουράζω παραπάνω, αν υπάρχει κάποιο tutorial στείλτε μου το link για να το κοιτάξω. Ευχαριστώ και πάλι για τη βοήθεια (ανεκτιμητη )
_tasos Δημοσ. 15 Ιουλίου 2011 Δημοσ. 15 Ιουλίου 2011 Εξαρτάται τους μετασχηματισμούς που θέλεις να κάνεις στα δεδομένα σου. Σίγουρα μπορεί να γίνει με php ή μπορείς να γράψεις stored procedures στη mysql όπου θα κάνουν την ίδια δουλειά. Αν κάνεις τους μετασχηματισμούς στην mysql, η διαδικασία θα είναι σίγουρα λιγότερο χρονοβόρα. Δεν νομίζω πάντως να σου χρειάζεται κάποιο tool, τα πιο πολλά tools στοχεύουν κυρίως στη μεταφορά ολόκληρης ΒΔ από το ένα σύστημα στο άλλο. Κάποιο tutorial / link δεν έχω να σου δώσω, χοντρικά η λογική για να κάνεις αυτή τη δουλειά είναι να φτιάξεις ένα σενάριο με απλούς μετασχηματισμούς που θα τους εκτελείς τον έναν μετά τον άλλον μέχρι να καταλήξεις στη μορφή που θέλεις.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.