2017-04-12 1 views
0

Je cherche à créer une API RESTful dans Go qui serait chargée d'insérer des données basées sur les données envoyées par plusieurs applications mobiles (qui seraient stockées dans un cluster Amazon Redshift). Peut-être recevoir des dizaines de milliers de demandes par seconde. D'après ce que j'ai lu, Redshift donne des vitesses d'insertion lentes. C'est pourquoi peu de gens m'ont conseillé d'utiliser une base de données intermédiaire comme dynamodb ou s3 dans laquelle j'effectuerais les insertions en premier. Puis, dans un deuxième temps, j'importerais les données dans Redshift. Je me demande pourquoi devrais-je utiliser Redshift dans ce cas, car les données seraient déjà stockées dans une base de données? Pensez-vous que je peux procéder différemment? J'ai aussi pensé à une solution plus simple en écrivant dans une file d'attente et en insérant progressivement les données à redshift mais je pense que cela pourrait poser problème si la file d'attente devient plus grande car la vitesse d'insertion n'est pas assez rapide pour compenser données entrantes.Insérer une grande quantité de données dans Redshift

Merci d'avance pour votre aide! :-)

+0

Notez que S3 est un service de stockage, pas n'importe quel type de base de données relationnelle. – Nathan

Répondre

2

conseils comme celui-ci est normalement hors-sujet pour StackOverflow, mais ...

Amazon Redshift est une base de données traitement massivement parallèle (MPP) avec une interface SQL. Il peut être utilisé pour interroger les TB et même les PB de données et il peut le faire très efficacement.

Vous demandez "pourquoi aurais-je besoin d'utiliser Redshift" - la réponse est si vos exigences d'interrogation ne peuvent pas être satisfaites avec une base de données traditionnelle. Si vous pouvez utiliser de manière satisfaisante une base de données normale pour vos requêtes, il n'y a pas de raison valable d'utiliser Redshift. Toutefois, si vos requêtes nécessitent Redshift, vous devez continuer à l'utiliser. La conception de Redshift est telle que le moyen le plus efficace d'insérer des données est de charger à partir d'Amazon S3 via la commande COPY. Il est inefficace d'insérer des données via les instructions normales INSERT, sauf si elles insèrent plusieurs lignes par instruction INSERT (par exemple, des centaines ou des milliers).

Alors, quelques questions à poser:

  • Ai-je besoin des capacités de Redshift Amazon pour mes requêtes, ou peut suffire d'une base de données traditionnelle?
  • Dois-je charger les données en en temps réel, ou est-ce suffisant pour charger par lots?
  • Si vous utilisez des lots, à quelle fréquence dois-je charger le lot? Puis-je le faire toutes les heures ou tous les jours ou doit-il être dans les minutes qui suivent l'arrivée des données?

Vous pouvez également utiliser Amazon Kinesis Firehose, qui peut accepter un flux de données et l'insérer automatiquement dans une base de données Amazon Redshift.