Frage

Ich habe ein Projekt, in dem ich Data Mining eine große Datenbank mache. Ich speichere derzeit alle Daten in Textdateien, ich versuche, die Kosten und Vorteile der Speicherung der relationalen Datenbank zu verstehen. Die Punkte sehen so aus:

CREATE TABLE data (
    source1 CHAR(5),
    source2 CHAR(5),
    idx11   INT,
    idx12   INT,
    idx21   INT,
    idx22   INT,
    point1  FLOAT,
    point2  FLOAT
);

Wie viele Punkte wie diese kann ich mit vernünftiger Leistung haben? Ich habe derzeit ~ 150 Millionen Datenpunkte und wahrscheinlich nicht mehr als 300 Millionen. Angenommen, ich verwende eine Box mit 4 Dual-Core 2GHz Xeon CPUs und 8 GB RAM.

War es hilfreich?

Lösung

MySQL ist mehr als in der Lage, Ihre Bedürfnisse sowie Alex 'Vorschlag von PostgreSQL zu erfüllen. Eine angemessene Leistung sollte nicht schwer zu erreichen sein, aber wenn die Tabelle stark zugegriffen wird und eine große Menge DML aufweist, möchten Sie mehr über die Sperre, die von der Datenbank verwendet wird, die Sie am Ende auswählen, erfahren.

Ich glaube, PostgreSQL kann die Zeilenebene verwenden, um das Box zu versperren, in dem MySQL von der von Ihnen ausgewählten Speicher -Engine abhängt. MyISAM sperrt nur auf der Tabellenebene, und somit leidet die Parallelität dar, aber Speichermotoren wie InnoDB für MySQL können und werden eine Verriegelung auf Reihenebene verwenden, um den Durchsatz zu erhöhen. Mein Vorschlag wäre, mit MYISAM zu beginnen und nur dann nach InnoDB zu ziehen, wenn Sie feststellen, dass Sie eine Reihe von Reihenebene benötigen. MyISAM funktioniert in den meisten Situationen gut und ist extrem leicht. Ich hatte Tabellen über 1 Milliarde Zeilen in MySQL mit MyISAM und mit guter Indexierung und Partitionierung können Sie eine gute Leistung erzielen. Sie können mehr über Speichermotoren in MySQL unter lesenMySQL -Speichermotoren und über Tabellenpartitionierung bei Tischpartitionierung. Hier ist ein Artikel über Partitionen in der Praxis auf einer Tabelle von 113 m Zeilen damit Sie auch nützlich finden.

Ich denke, die Vorteile der Speicherung der Daten in einer relationalen Datenbank überwiegen bei weitem die Kosten. Es gibt so viele Dinge, die Sie tun können, sobald Ihre Daten in einer Datenbank liegen. Zeitwiederherstellung, Gewährleistung der Datenintegrität, feinerer Sicherheitszugriff, Verteilung von Daten, Verfügbarkeit anderer Anwendungen durch eine gemeinsame Sprache. (SQL) usw. usw.

Viel Glück mit Ihrem Projekt.

Andere Tipps

PostgreSQL Sollte in der Lage sein, Ihre Daten ausführlich zu berücksichtigen - bis zu 32 Terabyte pro Tabelle usw. usw. Wenn ich richtig verstehe, sprechen Sie derzeit über 5 GB, 10 GB Max (ca. 36 Bytes/Reihe und bis zu 300 Millionen Zeilen ), also sollte fast jede Datenbank in der Tat in der Lage sein, Sie leicht aufzunehmen.

Zu Ihrer Information: Postgres skaliert besser als MySQL auf Multi-Processor- / überlappende Anfragen, aus einer Bewertung, die ich vor ein paar Monaten gelesen habe (sorry, kein Link).

Ich gehe aus Ihrem Profil aus, dies ist eine Art biometrische (Codonsequenzen, Enzym vs Protein Aminosäuresequenz oder ein solches) Problem. Wenn Sie dies mit gleichzeitigen Anfragen angreifen wollen, würde ich mit Postgres gehen.

OTOH, wenn die Daten einmal geladen und dann von einem einzelnen Thread gescannt werden, wäre MySQL im Modus "Säure nicht erforderlich" die beste Übereinstimmung.

Sie haben einige Planungen für den Fall von Zugriffsgebrauchsfall (n), bevor Sie den "besten" Stack auswählen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top