2016-07-29 1 views
2

J'ai partitionné mon ensemble de données en deux ensembles distincts de lignes 5M. Chaque partition est chargée dans une table sur une machine propre. J'utilise une instance monetdb centrale dans laquelle j'inscris les deux tables en tant que tables distantes et les ajoute à une table de fusion.MonetDB prend-il en charge l'exécution de requêtes parallèles lors de l'utilisation de tables de fusion?

Lorsque j'exécute une requête sur la table de fusion, je m'attendrais à ce que MonetDB distribue la requête, en parallèle, aux deux tables de partition. Cependant, en regardant les résultats créés avec tomograph, je vois que chaque table distante est interrogée séquentiellement.

J'ai compilé MonetDB moi-même en utilisant une archive source récente. J'ai désactivé geom et j'ai vérifié que python embarqué était disponible. A part cela, je n'ai pas modifié les paramètres ni configuré les drapeaux. Les deux machines qui contiennent les partitions sont des machines virtuelles 1 cœur avec 4 Go de mémoire. La machine centrale est mon ordinateur portable, qui a 4 cœurs et 16 Go de mémoire. J'ai également exécuté cette expérience en utilisant un nœud central avec la même configuration que les partitions.

J'ai créé les tables comme ceci:

-- On each partition (X = {1, 2}): 
CREATE TABLE responses_pX (
    r_id int primary key, 
    r_date date, 
    r_status tinyint, 
    age tinyint, 
    movie varchar(25), 
    score tinyint 
); 

-- On central node: 
CREATE MERGE TABLE responses (
    r_id int primary key, 
    r_date date, 
    r_status tinyint, 
    age tinyint, 
    movie varchar(25), 
    score tinyint 
); 

-- For both partitions 
CREATE REMOTE TABLE responses_pX (
    r_id int primary key, 
    r_date date, 
    r_status tinyint, 
    age tinyint, 
    movie varchar(25), 
    score tinyint 
) ON 'mapi:monetdb://partitionX:50000/partitionX'; 

ALTER TABLE responses ADD TABLE responses_pX; 

J'exécuter les requêtes suivantes sur le nœud central:

SELECT COUNT(*) FROM responses; 
SELECT COUNT(*), SUM(score) FROM responses; 
SELECT r_date, age, SUM(score)/COUNT(score) as avg_score FROM responses GROUP BY r_date, age; 

Pour toutes les requêtes le parallélisme rapporté par l'outil tomograph ne dépasse que 2.11%.

Répondre

0

oui, MonetDB utilise un traitement parallèle lorsque cela est possible. Voir la documentation https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/DistributedQueryProcessing

+0

C'est la page que j'ai utilisée pour configurer mes tables, mais l'analyse comparative montre remarquablement peu de parallélisme, ce à quoi je m'attendrais beaucoup plus. Par exemple, je m'attendrais à ce que les deux tables de partition soient interrogées en parallèle, cependant, d'après 'tomograph' les deux sous-requêtes sont exécutées séquentiellement ... Y at-il une explication à cela? Y a-t-il quelque chose que j'ai peut-être mal configuré? – vdeurzen