Hadoop (+HBase/HDFS) vs Mysql (ou Postgresql) - Charges d'indépendant, structuré de données à traiter et interrogé
Salut à DONC,
J'aimerais quelques idées/commentaires sur les points suivants de vous, honorable et vénérable tas.
J'ai un 100M des dossiers dont j'ai besoin de traiter. J'ai 5 nœuds (dans un rocks cluster) pour ce faire. Les données sont très structurés et tombe parfaitement dans le modèle de données relationnel. Je veux faire les choses en parallèle depuis mon traitement prend du temps.
Que je le vois j'ai deux options principales:
Installer mysql sur chaque nœud et de mettre 20M des dossiers sur chacun d'eux. Utilisez le nœud de tête de déléguer des requêtes pour les noeuds et d'agréger les résultats. Capacités de requête++, mais j'ai peut-risque, certains maux de tête quand je viens à choisir des stratégies de partitionnement, etc. (Q. Est-ce que ce qu'ils appellent mysql/postgres cluster?). Vraiment de la mauvaise partie est que le traitement des dossiers est laissé à moi maintenant de prendre soin de (la façon de distribuer à travers les machines, etc)...
Sinon installer Hadoop, Hive et HBase (notez que cela pourrait ne pas être le moyen le plus efficace pour stocker mes données, depuis HBase est orienté colonne) et il suffit de définir les nœuds. Nous avons tout écrire dans le paradigme MapReduce et, d'un coup, nous vivons heureux jamais après. Le problème ici est que nous perdons le "temps réel" les capacités d'interrogation (je sais que vous pouvez utiliser la Ruche, mais qui n'est pas proposé en temps réel les requêtes - dont j'ai besoin) - puisque j'ai aussi une certaine normale des requêtes sql à exécuter à des moments "select * from vin, où la couleur = 'marron'".
À noter qu'en théorie - si j'avais 100M machines je pourrais faire la même chose immédiatement, car pour chaque enregistrement, le traitement est indépendant de l'autre. Aussi - mes données sont en lecture seule. Je ne suis pas d'envisager toutes les mises à jour qui se passe. Je n'ai pas besoin/envie de 100M de dossiers sur un nœud. Je ne veux pas y être données redondantes (puisqu'il y a beaucoup d'elle), afin de les garder dans mysql/postgres et Hadoop/HBase/HDFS. n'est pas une véritable option.
Merci Beaucoup
OriginalL'auteur MalteseUnderdog | 2011-02-03
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous prouver que MySQL est le goulot d'étranglement? 100M des dossiers est pas tant que ça, et on dirait que vous n'êtes pas d'effectuer des requêtes complexes. Sans savoir exactement ce genre de traitement, voici ce que je ferais, dans cet ordre:
Dans votre situation, je voudrais résister à la tentation de sauter hors de MySQL, sauf si c'est absolument nécessaire.
OriginalL'auteur bajafresh4life
Il y a quelques questions à se poser, avant de suggérer.
Pouvez-vous formuler vos requêtes d'accès par clé primaire? En d'autres termes - si vous pouvez éviter toutes les jointures et les analyses de la table. Si oui, - HBase est une option, si vous avez besoin de très haut taux de lecture/écriture accède.
Je ne noth chose que la Ruche est une bonne option en tenant compte des données de faible volume. Si vous vous attendez à croître de manière significative - que vous pouvez envisager. En tout cas, la Ruche est bon pour l'analyse des charges de travail - ne pas utiliser pour la OLTP type de traitement.
Si vous avez besoin de modèle relationnel avec des jointures et des scans, je pense que la bonne solution serait peut-être un Nœud Maître et 4 esclaves, avec la réplication entre eux. Vous allez diriger toutes les écritures sur le maître, et l'équilibre se lit parmi tout le cluster. Il est particulièrement utile si vous avez beaucoup plus de lectures écrit ensuite.
Dans ce schéma, vous aurez tous les 100M des dossiers (pas de correspondance) sur chaque nœud. Au sein de chaque nœud, vous pouvez utiliser le partitionnement, le cas échéant.
OriginalL'auteur David Gruzman
SALUT,
J'ai eu une situation où j'avais beaucoup de tables que j'ai créé en parallèle à l'aide de sqlalchemy et le python de multitraitement de la bibliothèque. J'ai eu plusieurs fichiers, un par table, et les chargés utilisant en parallèle le processus de COPIE. Si chaque processus correspond à une table séparée, qui fonctionne bien. Avec une table, en utilisant la COPIE serait difficile. Vous pouvez utiliser les tables de partitionnement dans PostgreSQL, je suppose. Si vous êtes intéressés, je peux donner plus de détails.
Ce qui concerne.
OriginalL'auteur Faheem Mitha
Vous pouvez aussi envisager d'utiliser Cassandra. J'ai récemment découvert cet article sur HBase contre Cassandra qui m'a rappelé quand j'ai lu votre post.
L'essentiel, c'est que Cassandra est une très scallable NoSQL solution avec interrogation rapide, qui sonne comme la solution que vous cherchez.
Donc, tout dépend si vous avez besoin pour maintenir votre modèle relationnel ou pas.
OriginalL'auteur shadanan