Pour les chiffres que vous mentionnez, je pense que toutes les alternatives devraient fonctionner (lire: vous serez en mesure de terminer votre analyse dans un délai raisonnable). Je recommande une conception qui peut conduire à des résultats beaucoup plus rapides.
Comme indiqué précédemment, en général, postgresql est plus rapide que mongo, parfois plus de 4 fois plus rapide. Voir par exemple:
http://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality
Vous avez dit que vous souhaitiez améliorer les performances des jointures. Je suppose que vous êtes intéressé par le calcul des similitudes entre les entités (par exemple, publication, auteur), vous allez donc principalement rejoindre la table avec elle-même (par exemple, par publication ou auteur) et agréger.
Ajoutez à cela le fait qu'après le chargement initial, votre base de données sera en lecture seule, ce qui rend le problème très approprié pour indexer l'utilisation. Vous ne paierez pas pour la mise à jour de l'index car vous n'en aurez pas et je suppose que vous avez le stockage supplémentaire pour l'index.
J'aurais utilisé postgres et stocké les données dans deux tableaux:
créer des publications de table (entier post_id, url varchar (255), author_id entier);
- Charger des données puis créer les indices. - Cela conduira à une charge plus rapide et à de meilleurs indices. Modifier les messages de la table ajouter une contrainte à la clé primaire posts_pk (post_id); créer un index post_author sur les articles (author_id);
créer des commentaires de table (entier commentaire_id, entier post_id, entier author_id, commentaire varchar (255)); modifier les commentaires de table ajouter une contrainte commentaires_pk clé primaire (comment_id); créer un index comment_author sur les commentaires (author_id); créer un index comment_post sur les commentaires (post_id);
Ensuite, vous pouvez calculer la similitude des auteurs sur la base des commentaires dans les requêtes comme select m. author_id comme m_author_id, a. author_id en tant que a_author_id, count (distinct m.post_id) en tant que publications à partir de commentaires lorsque m joint les commentaires en tant que groupe utilisant (post_id) par m.author_id, a. author_id
Dans le cas où vous souhaiteriez taper les mots dans le commentaire pour nlp, ajoutez un autre tableau pour cela, mais n'oubliez pas que cela augmentera considérablement le volume de vos données.Il est généralement préférable de ne pas représenter la tokenisation entière dans la base de données.