Question

J'ai un projet dans lequel je fais une grande base de données de data mining. Je stocke actuellement toutes les données dans des fichiers texte, je suis en train de comprendre les coûts et les avantages de stocker les données au lieu base de données relationnelle. Les points ressemblent à ceci:

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

Combien de points comme ça je peux avoir avec des performances raisonnables? J'ai actuellement ~ 150 millions de points de données, et je vais probablement pas plus de 300 millions. Supposons que j'utilise une boîte avec 4 2GHz dual-core Xeon CPU et 8 Go de RAM.

Était-ce utile?

La solution

MySQL est plus que capable de répondre à vos besoins ainsi que la suggestion d'Alex de PostgreSQL. la performance raisonnable ne devrait pas être difficile à réaliser, mais si la table va être très accessible et ont une grande quantité de DML, vous voulez en savoir plus sur le verrouillage utilisé par la base de données que vous finissez par choix.

Je crois que PostgreSQL peut utiliser le verrouillage de niveau ligne hors de la boîte, où MySQL dépendra du moteur de stockage que vous choisissez. MyISAM verrouille seulement au niveau de la table, et donc souffre concurrency, mais les moteurs de stockage tels que InnoDB pour MySQL peut et utiliser le verrouillage de ligne pour augmenter le débit. Ma suggestion serait de commencer par MyISAM et passer à InnoDB que si vous vous trouvez besoin de verrouillage de niveau ligne. MyISAM fonctionne bien dans la plupart des situations et est extrêmement léger. J'ai eu des tables plus de 1 milliard de lignes dans MySQL en utilisant MyISAM et avec l'indexation et le partitionnement, vous pouvez obtenir une grande performance. Vous pouvez en savoir plus sur les moteurs de stockage dans MySQL à MySQL Storage Engines et sur le partitionnement de table à Tableau Cloisonnement. Voici un article sur dans la pratique sur une table de 113m lignes que vous trouverez peut-être utiles.

Je pense que les avantages de stocker les données dans une base de données relationnelle dépassent largement les coûts. Il y a tellement de choses que vous pouvez faire une fois vos données dans une base de données. Point dans la récupération du temps, l'intégrité des données, un accès sécurisé grain plus fin, le partitionnement des données, la disponibilité d'autres applications par le biais d'un langage commun. (SQL) etc etc.

Bonne chance avec votre projet.

Autres conseils

PostgreSQL devrait être en mesure d'accueillir amplement vos données - jusqu'à 32 téraoctets par table, etc, etc. Si je comprends bien, vous parlez de 5 Go actuellement, 10 Go max (environ 36 octets / ligne et jusqu'à 300 millions de lignes), de sorte que presque toute base de données devrait en effet être en mesure de vous accueillir facilement.

Pour votre information: Postgres échelles mieux que MySQL sur plusieurs processeurs / demandes qui se chevauchent, d'un examen, je lisais quelques mois en arrière (désolé, pas de lien)

.

Je suppose de votre profil ceci est un problème de sorte biométrique (séquences de codons, enzyme vs séquence d'acides aminés de la protéine, ou une telle). Si vous allez attaquer cela avec des demandes concurrentes, je partirais avec Postgres.

OTOH, si les données va être chargée une fois, puis balayé par un seul fil, peut-être MySQL en mode « acide non nécessaire » serait la meilleure correspondance.

Vous avez une planification à faire en cas de cas d'utilisation d'accès (s) avant de pouvoir sélectionner la pile « mieux ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top