2017-10-03 7 views
2

J'ai une application Web dans laquelle les utilisateurs peuvent exécuter des rapports sur les données. Le problème est que les requêtes sont si lentes à cause des données avec lesquelles nous travaillons.Stocker temporairement des données de rapport sur AWS DynamoDB? Est-ce une solution viable?

Je pensais rendre le processus asynchrone et avoir une autre machine qui travaille sur ce thread: l'interrogation de ces données, le mettre dans AWS DynamoDB, puis notifier les utilisateurs.

Les données sont pour la plupart plates (uniquement les lignes et les colonnes). Habituellement, la taille de l'enregistrement varie autour de 100, parfois 1000, et rarement dans les 10 000.

Est-ce une bonne idée? Quelle serait la performance?

+1

Quelle est l'unité de taille d'enregistrement? Comment envisagez-vous de l'interroger à nouveau et la nature de la requête de DynamoDB? – Ashan

+0

Je suis un peu confus. Pouvez-vous clarifier davantage ce que vous demandez? – mute

+0

Lorsque vous dites que vous stockez des données de rapport avec une taille d'enregistrement de 100, 1000 et etc., qu'est-ce que 100? est-ce MB ou KB ou Rows ou Columns etc? – Ashan

Répondre

1

réponse architecture classique: « Cela dépend »

  1. Si votre requête d'exécution longue est sur autre table Dynamo (s), puis stocker les résultats dans Dynamo fait un certain sens. (technologie familière que vous utilisez déjà). Si votre requête s'exécute sur une autre base de données, pourquoi ne pas stocker vos résultats dans une nouvelle table dans cette base de données ou dans une nouvelle base de données dédiée sur la même plateforme? Ou restez simple et écrivez simplement vos résultats dans un fichier dans S3 (json, xml, csv, peu importe ...)?

+0

Je pensais que récupérer les données de DynamoDB serait plus rapide que de l'extraire de la nouvelle table de base de données et d'avoir à interroger cela (dans ce cas, nous utilisons MS SQL Server). Et ... je n'ai même pas pensé à l'approche n ° 3, quelle est la performance sur ce point? – mute

+0

Idéalement, les performances devraient être similaires pour les trois solutions (en supposant que le matériel de classe de production et vos ensembles de résultats ne sont pas énormes). Mais retourner un fichier statique sera toujours le plus rapide ... – Scrappydog

1

Semblable à ce que @Scrappydog a mentionné. Vous pourriez faire un mélange de DynamoDB et S3.

  1. DynamoDB stockerait la requête méta-données - comme les noms de fichier d'ID utilisateur et S3
  2. S3 stockerait les résultats de la requête réelle dans les fichiers

Cela vous permettra d'utiliser DynamoDB pour attacher toutes les déplacer des pièces ensemble. De plus, les grosses écritures de DynamoDB ne seraient pas utilisées pour réduire les coûts.