
Για μια εφαρμογή web είμαι ανάπτυξη, θα πρέπει να αποθηκεύσει ένα μεγάλο αριθμό αρχείων. Κάθε εγγραφή θα αποτελείται από ένα πρωτεύον κλειδί και ένα ενιαίο (βραχείας ish) τιμή συμβολοσειράς. Περιμένω να έχετε σχετικά με την αποθήκευση 100GB διαθέσιμο και θα ήθελα να είναι σε θέση να χρησιμοποιήσει όλα.


Οι εγγραφές θα εισαχθεί, διαγραφεί και να διαβάσετε συχνά και θα πρέπει να χρησιμοποιήσετε μια βάση δεδομένων MySQL. Η ακεραιότητα των δεδομένων δεν είναι κρίσιμη, αλλά η απόδοση είναι. Ποια θέματα και τις παγίδες είμαι πιθανό να συναντήσετε και το οποίο μηχανή αποθήκευσης θα πρέπει να ταιριάζει καλύτερα στην εργασία;


Πολλές ευχαριστίες, J

 
Μεγάλα τραπέζια MySQL
=====================



Όποια και αν είναι λύση που χρησιμοποιείτε, αφού λέτε ότι η βάση δεδομένων σας θα είναι write-βαρύ θα πρέπει να βεβαιωθείτε ότι ολόκληρος ο πίνακας δεν εγκλωβίζονται στις εγγραφές. Αυτό αποκλείει MyISAM, που κάποιοι έχουν προτείνει. MyISAM θα ​​κλειδώσει το τραπέζι σε μια ενημέρωση, διαγραφή ή εισαγωγή. Αυτό σημαίνει ότι κάθε πελάτης που θέλει να διαβάσει από τον πίνακα, θα πρέπει να περιμένουμε για το γράφουν για να ολοκληρωθεί. Ξέρω τι να αγνοήσει το INSERT χαμηλής προτεραιότητας κάνει όμως, πιθανώς κάποια hack γύρω από το τραπέζι κλείδωμα :-)


Αν απλά πρέπει να χρησιμοποιήσετε MySQL, θα θελήσετε InnoDB, η οποία δεν κλειδώσει εγγραφής. Δεν ξέρω πώς MySQL κάνει πίνακες InnoDB VACUUM του (InnoDB είναι MVCC όπως η PostgreSQL και έτσι πρέπει να καθαρίσει) ... αλλά θα πρέπει να το λάβουμε υπόψη, αν κάνετε πολλές ενημερώσεις ή διαγραφές.

 

Όλα εξαρτώνται από το πρότυπο ανάγνωσης / εγγραφής αίτησή σας δημιουργεί, καθώς και το επίπεδο της ακρίβειας που θέλετε να πάρετε. Για Exemple, αν δεν ενδιαφέρονται πραγματικά με όλα τα τελευταία εισαχθεί σειρές άμεσα διαθέσιμο, μπορείτε να χρησιμοποιήσετε INSERT αγνόησης χαμηλής προτεραιότητας μπορεί να βοηθήσει επιλέγει. Εάν το μέγεθος του κειμένου είναι σχετικά μικρό, μπορείτε να χρησιμοποιήσετε ένα σταθερό τύπο ΧΑΡ που θα βοηθήσουν την ευρετηρίαση πολύ και τη μείωση του χρόνου των επιλέγει Εάν η εφαρμογή σας δημιουργεί πολλές ενημερώσεις, θα προτιμούσα μηχανή αποθήκευσης InnoDB η οποία επιτρέπει να κλειδώσετε μόνο μία σειρά, όταν ενημέρωση (vs όλα στο τραπέζι για MyISAM). Από την άλλη πλευρά, πιο CPU της έντασης, οπότε αν δεν χρησιμοποιείτε συναλλαγών και ότι σχέδιο ενημέρωση σας είναι σχετικά μικρό, μπορείτε να χρησιμοποιήσετε MyISAM

 

Εάν χρησιμοποιείτε την ευρετηρίαση (ακόμα και αν δεν είστε) μπορεί να αντιμετωπίσετε κλιμάκωση θέματα. Μπορείτε να δοκιμάσετε διαχωρισμού για να προσπαθήσει να μειώσει αυτά τα αποτελέσματα. 


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


Επίσης, βεβαιωθείτε ότι έχετε κάνει τις δικές σας δοκιμές για να συντονίσετε τα μεγέθη της μνήμης σας. Πιστεύω ότι η MySQL έχει μερικά διαφορετικά είδη κρύπτες των οποίων μπορείτε να ρυθμίσετε το μέγεθος. 

 

Είστε πολύ καλύτερα αν το «shortish string» είναι σε μια στήλη σταθερού μήκους έτσι ώστε ο πίνακας έχει σταθερό σειρές μήκους. MySQL με MyISAM θα ​​λειτουργήσει πολύ αποτελεσματικά για σας τότε. Διαθέστε όσο μνήμης όπως μπορείτε για το Ρυθμιστικό Key, έτσι ώστε ένα μεγάλο μέρος του δείκτη στη μνήμη. Ο στόχος σας πρέπει να είναι ένα ενιαίο τυχαίας προσπέλασης στο δίσκο για να ανακτήσετε μία γραμμή - δεν μπορείτε να κάνετε καλύτερα από αυτό το δεδομένο 100GB δεδομένων και 8GB μνήμης. Δεν πρέπει να περιμένουμε να επιτύχουν περισσότερο από μερικές εκατοντάδες τέτοια ερωτήματα ανά δευτερόλεπτο, γιατί αυτό είναι όλο το τυχαίο έχει πρόσβαση ένας δίσκος μπορεί να κάνει.


Ίσως να ενδιαφέρονται για τη μηχανή προσαρμοσμένης αποθήκευσης μου MySQL (που περιγράφεται [εδώ](http://blog.coldlogic.com/categories/coldstore/) ). Διαχειρίζεται τη μνήμη με διαφορετικό τρόπο από MyISAM, αν και το προφίλ της αίτησής σας δεν είναι ακριβώς ό, τι μηχανή μου βελτιστοποιηθεί για.

 

μεγάλα ερωτήματα MySQL κάνει Quad Core / 8GB Ram DB server μου συντριβή ...


λύση είναι να χρησιμοποιήσετε PostgresSQL (SQL Server, εάν μπορείτε να το αντέξετε οικονομικά)

 

Σίγουρα θέλετε να χρησιμοποιήσετε MyISAM για τη μηχανή αποθήκευσης. Αλλά λέτε ότι περιμένετε 100 GB και θα περιέχει μόνο ένα μικρό-ish τιμή συμβολοσειράς. Σίγουρα θέλετε να χρησιμοποιήσετε ένα int 64-bit για την ταυτότητα / πρωτεύον κλειδί σας.


Αλλά πραγματικό ερώτημα μου είναι. Χρησιμοποιείτε αυτό για την αποθήκευση πληροφοριών συνόδου από την ιστοσελίδα του; Αν έτσι θέλετε να χρησιμοποιήσετε memcache αντί της MySQL.

 