2013-06-27 6 views
0

Cela peut sembler une question générique, mais j'ai une idée en tête qui peut évoluer en partageant ici.Comment concevoir un SGBDR pour les mégadonnées

Notre application a plusieurs tables de plus de 10 millions d'enregistrements; les interroger prend environ 40 ans. Nous avons suivi des pratiques de conception de base de données connues comme l'utilisation de clés primaires, d'index, etc. Nous avons également essayé d'archiver des lignes plus anciennes et de diviser des tables, mais ce n'est toujours pas aussi impressionnant.

L'application demande beaucoup de données mais je comprends que bien que de nombreux sites comme les banques aient des données énormes, ils ont quand même de bonnes performances. Je ne suis pas un expert en bases de données; Quelqu'un peut-il indiquer ici ce qui me manque?

Il y aura des techniques standard comme le clustering de base de données, etc., que mon infrastructure ne permet pas.

Il y a une idée embrouillée s'il est possible de stocker des données dans un format plus traité par rapport au stockage brut? Y a-t-il de nouvelles pratiques de conception dans la conception de la base de données? Puis-je migrer vers NoSQL facilement? Aussi, quelle est la qualité de NoSQL?

Répondre

6

Dix millions de lignes ne sont pas si nombreuses. Réglez vos requêtes sur une base individuelle. Si vous avez une requête qui prend 40 secondes, trouvez celle qui est et corrigez-la. L'utilisation d'une seule colonne dans la clause where qui n'est pas indexée peut faire passer les performances de .0001 sec à 40 sec. La plupart des bases de données ont une fonctionnalité "Expliquer la requête" qui vous indiquera comment la requête est exécutée.

Un smallish Problème de "gros volumes de données" sur lequel j'ai travaillé récemment avait 100 milliards de lignes - 10 To de données compressées.

Si vous n'avez pas compris pourquoi vos requêtes sont lentes, vous ne devriez probablement pas encore envisager des solutions non-RDBMS.

+0

J'ai utilisé cakephp sur le backend, est-ce que cela peut poser des restrictions sur les requêtes de réglage fin? –

+0

La taille des autres tables n'affecte généralement pas une requête qui ne les rencontre pas - beaucoup de threads simultanés travaillant sur des requêtes pour ceux-ci. d'autres tables * peuvent affecter une requête qui ne les touche pas. Mais le plus important est d'optimiser vos requêtes si vous ne l'avez pas déjà fait. – Keith

0

Voici trois conseils qui sont vraiment faciles à implémenter et qui vous procurent d'énormes gains de performance.

1 Assurez-vous que vous utilisez des jointures internes au lieu de la clause WHERE où vous le pouvez.

Par exemple, écrire

SELECT LastName, Adresse DE client INNER JOIN CustomerAddress ON Customer.ID = CustomerAddress.CustomerID

Au lieu de:

SELECT LastName, Adresse FROM Client, CustomerAddress O WH Customer.ID = Custome rAddress.CustomerID

2 Évitez l'utilisation de fonctions dans la clause WHERE.

Par exemple,

OU gauche (Ville, 1) = 'M'

provoquera un balayage d'index de la table entière (même les lignes où la ville ne commence pas par "M")

Au lieu de cela, utilisez

OÙ ville comme 'M%'

en est de même pour toutes les autres fonctions, comme DateDiff supérieur, etc.

3 Assurez-vous qu'il existe un index sur chaque colonne sur laquelle vous utilisez une clause WHERE.

Questions connexes