2016-02-29 1 views
0

Je suis à la recherche de conseils pour la modélisation dimensionnelle. Je regarde certaines données de recherche qui sont stockées dans une base de données dans un schéma en étoile. Il existe une dimension pour les requêtes et une dimension pour les pages de destination. Les deux dimensions ont une clé de substitution qui sont stockées dans la table de faits en tant que clés étrangères.Dimension avec deux clés de substitution ou deux dimensions séparées?

La table de faits a environ 100 millions de lignes et les dimensions ont chacune environ 100k lignes. Comme les jointures de ces tables prennent très longtemps ces derniers temps, je me demande si ce serait une bonne idée de combiner les deux dimensions en une seule afin de ne faire que se joindre à une seule table. Les deux dimensions sont M: N donc la nouvelle dimension serait très grande.

Merci!

Répondre

0

Il n'y a pas de "bonne" réponse à votre question sans en savoir plus sur vos données (comme avez-vous plus de dimensions dans votre table de faits? Combien de combinaisons de requêtes et de pages de destination avez-vous?), commentaires:

  • vous conception actuelle (ce que je peux comprendre ici) est pas mal, vous avez beaucoup de données, vous devez traiter, mais combiner deux dimensions avec 100K éléments pour éviter une jointure ne me semble pas juste

  • Essayez d'optimiser vos requêtes, construire des index si vous ne les avez pas, paralléliser vos requêtes (si vous r db engine vous permet de le faire), essayez d'éviter like dans votre où si possible, la dernière ressource pense à plus de matériel ou à un moteur de base de données différent.

  • Si vous habituellement à l'aide requête une seule de ces dimensions peut-être vous pouvez penser à des tables agrégées pour réduire le nombre de lignes, vous utiliserez plus d'espace, mais votre requête une seule jointure et une table plus petite fait

  • La requête peut-elle être l'enfant de la page de destination? (stackoverflow.com est parent de requêtes comme "Guru Meditation error message" et "stackcareers.com" est parent de "pool boy for datalake jobs") Bien sûr, vous finirez avec la même requête pour plusieurs pages de destination, vous aurez besoin pour affecter différentes clés étrangères dans ce cas. Mais ce modèle différent peut conduire à une solution différente, vous aurez seulement des relations 1: M et pouvez construire une table agrégée par dimension de page d'atterrissage, mais cela nécessitera de changer vos requêtes pour extraire des données. Et encore, je ne sais pas vos données, ce sera peut-être plus judicieux de requêtes parent Landing Pages ...

Encore une fois ce ne sont que mes pas « pensées » de solutions.