Question

Je travaille actuellement sur un problème qui consiste à interroger une énorme quantité de données (en milliards de lignes) et, étant un peu inexpérimenté avec ce genre de chose, aimerait quelques conseils astucieux.

Les données / problème ressemble à ceci:

  1. Chaque table comporte des colonnes 2-5 clés et une colonne de valeur.
  2. Chaque ligne a une combinaison unique de clés.
  3. Je dois être en mesure d'interroger par un sous-ensemble de clés (par exemple key1 « bla » = et key4 = « Bloo »).
  4. Il serait agréable de pouvoir insérer rapidement de nouvelles lignes (mise à jour de la valeur si la ligne existe déjà) mais je serais satisfait si je pouvais le faire lentement.

Actuellement, j'ai cette mise en œuvre en MySQL en cours d'exécution sur une seule machine avec des index distincts définis sur chaque touche, un index sur toutes les clés (uniques) et un indice combinant les première et dernière clés (qui est actuellement la requête la plus courante I » m prise, mais qui pourrait facilement changer). Malheureusement, cela est assez lent (et les indices finissent par prendre ~ 10x l'espace disque, ce qui est un énorme problème).

J'arrive d'avoir une foule d'ordinateurs rapides à ma disposition (~ 40), ce qui rend la lenteur incroyable de cette base de données unique machine d'autant plus ennuyeux. Je veux profiter de tout ce pouvoir pour faire de cette base de données rapide. Je l'ai envisagé de construire une table de hachage distribuée, mais ce serait faire du mal à interroger seulement un sous-ensemble des clés. Il semble que quelque chose comme BigTable / HBase serait une solution décente mais je ne suis pas encore convaincu qu'une solution plus simple n'existe pas.

Merci beaucoup, toute aide serait grandement appréciée!

Pas de solution correcte

Autres conseils

Je vous propose d'écouter ce podcast pour d'excellentes informations sur les bases de données distribuées. épisode-109-eBays -Architecture-principes-avec-randy-Shoup

Pour souligner l'évidence:. Vous êtes probablement disque lié

À un certain moment, si vous faites des requêtes randomish et votre jeu de travail est suffisamment plus grande que la RAM, alors vous serez limité par le petit nombre d'IOPS au hasard un disque peut faire. Tu ne vas pas être en mesure de faire mieux que quelques dizaines de sous-requêtes par seconde par disque connecté.

Si vous êtes contre ce goulot d'étranglement, vous pourriez gagner plus en passant à un SSD, un RAID plus, ou beaucoup-de-RAM que vous le feriez en distribuant la base de données entre plusieurs ordinateurs (qui la plupart du temps juste vous obtenir plus des deux dernières ressources)

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