Das laden der Daten (inkrementell) in Amazon Redshift, S3 vs. DynamoDB vs. Einfügen
Habe ich eine web-app muss zum senden von berichten über die Verwendung, möchte ich mithilfe von Amazon RedShift, wie ein data warehouse für diesen Zweck,
Wie soll ich die Daten erfassen ?
Jedes mal, wenn der Benutzer die Interaktion mit meiner app möchte ich berichten, dass.. so, als sollte ich schreiben, die Dateien zu S3 ? und wie viele ?
Was ich meine ist:
- Wenn nicht, senden Sie die Infos sofort, dann könnte ich es verlieren als ein Ergebnis einer Verbindung verloren gehen, oder aus, einige Fehler in meinem system, während dessen gesammelt wurden, und machen Sie sich bereit, um verschickt werden zu S3...
- Wenn ich Schreibe-Dateien zu S3 auf jeder Benutzer-Interaktion, ich werde am Ende mit Hunderten von Dateien (jede Datei hat nur minimale Daten), müssen verwaltet werden, sortiert, gelöscht, nachdem kopiert worden ist, um die Rotverschiebung.. das die Dosis nicht wie eine gute Lösung scheint .
Was bin ich? Sollte ich DynamoDB statt, Sollte ich die einfach einfügen in die Rotverschiebung statt !?
Wenn ich tun müssen, schreiben Sie die Daten in DynamoDB, sollte ich löschen, halten Sie die Tabelle, nachdem kopiert worden ist .. was sind die besten Methoden ?
Auf jeden Fall, was sind die besten Praktiken zur Vermeidung von überschneidungen mit der Rotverschiebung ?
Schätzen Sie die Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es bevorzugt, Aggregat event-logs vor der Einnahme von Ihnen in Amazon Redshift.
Die Vorteile sind:
Verwenden Sie die parallel Natur der Rotverschiebung besser; KOPIEREN auf eine Reihe von größeren Dateien im S3 (oder von einer großen DynamoDB-Tabelle) werden viel schneller als einzelne EINFÜGEN oder KOPIEREN einer kleinen Datei.
Können Sie vor, eine Art Ihre Daten (vor allem, wenn die Sortierung basiert auf Ereignis-Zeit) vor dem einsetzen in die Rotverschiebung. Dies ist auch verbessern Sie Ihre Auslastung und reduzieren die Notwendigkeit für VAKUUM den Tabellen.
Können Sie sammeln Ihre Veranstaltungen in verschiedenen Orten, bevor Sie aggregieren und laden Sie in die Rotverschiebung:
Lokale Datei zu S3 - der häufigste Weg ist, um insgesamt Ihre Protokolle auf der client/server und alle x MB oder y Minuten nach dem hochladen auf S3. Es gibt viele log-appenders zur Unterstützung dieser Funktionalität, und Sie nicht brauchen, um änderungen im code (zum Beispiel, FluentD oder Log4J). Diese kann getan werden, mit container-Konfiguration nur. Der Nachteil ist, dass Sie riskieren einige Protokolle und die lokalen log-Dateien können gelöscht werden, bevor der upload.
DynamoDB - wie @Swami beschrieben, DynamoDB ist ein sehr guter Weg, um häufen sich die Ereignisse.
Amazon Kinesis - der kürzlich veröffentlichte service ist auch ein guter Weg, um übertragen Sie Ihre Veranstaltungen von den verschiedenen clients und Servern an einen zentralen Ort auf eine schnelle und zuverlässige Art und Weise. Die Ereignisse werden in der Reihenfolge der Aufnahme, die macht es einfach, laden Sie es später vorsortiert, um die Rotverschiebung. Die Ereignisse gespeichert sind, können für 24 Stunden, und Sie können planen, das Lesen von kinesis und laden zu einer Rotverschiebung, jede Stunde, zum Beispiel, für eine bessere Leistung.
Bitte beachten Sie, dass alle diese Dienste (S3, SQS, DynamoDB und Kinesis) können Sie drücken Sie die Veranstaltungen direkt aus der end-Benutzer/Geräte, ohne die Notwendigkeit zu gehen durch eine Mitte-web-server. Dies kann zu einer deutlichen Verbesserung der hohen Verfügbarkeit des service (wie gesteigerte Belastung oder server-Ausfall) und die Kosten für das system (Sie bezahlen nur was Sie nutzen, und Sie brauchen nicht zu haben, nicht Ausgelastete Server nur für logs).
Sehen zum Beispiel, wie Sie bekommen können temporäre Sicherheits-Token für mobile Geräte hier: http://aws.amazon.com/articles/4611615499399490
Ein weiterer wichtiger Satz von tools ermöglichen die direkte Interaktion mit diesen Diensten sind die verschiedenen SDKs. Zum Beispiel für Java, .NET, JavaScript, iOS und Android.
Bezüglich der de-Duplizierung Anforderung; in den meisten der oben genannten Optionen, die Sie tun können, dass in der aggregation phase, zum Beispiel, wenn Sie Lesen aus einem Kinesis-stream, können Sie überprüfen, dass Sie nicht haben, Duplikationen in Ihre Ereignisse, sondern analysieren einen großen Puffer von Ereignissen, bevor Sie in den datenspeicher.
Jedoch, Sie können dies tun, überprüfen Sie in der Rotverschiebung als gut. Eine gute Praxis ist
COPY
die Daten in eine staging-Tabellen und dann WÄHLEN SIE IN eine gut organisierte und sortierte Tabelle.Anderen best-practice-Sie implementieren können, ist eine tägliche (oder wöchentliche) table partition. Auch wenn Sie möchten, haben eine große lange events-Tabelle, aber die meisten Ihrer Abfragen ausgeführt werden, die auf einen einzigen Tag (den letzten Tag, zum Beispiel), können Sie eine Reihe von Tabellen mit ähnlicher Struktur (events_01012014, events_01022014, events_01032014...). Dann können Sie
SELECT INTO ... WHERE date = ...
zu jeder dieser Tabellen. Wenn Sie möchten, um die Abfrage die Daten von mehreren Tagen, die Sie verwenden können,UNION_ALL.and you can schedule the reading from kinesis and loading to Redshift every hour
- alle links auf wie dies zu tun, bitte?S3 -> Redshift
? Ich habe nicht gesehen, alle docs auf die Verwendung von Lambda-zum kopieren von Daten von S3 zu Rotverschiebung.aws-kinesis-connectors
's Rotverschiebung Beispiel, kann ich einfach den ANT-build (nach dem ändern der code für mein Projekt) vor Ort? Wenn das Programm nicht läuft, d.h. ich trafCTRL + z
, wird der Stream immer noch Ausgang zur Rotverschiebung?aws-kinesis-connectors
, (2) erstellen einer AWS Lambda-Funktion, dass bei einerPutRecord
zu können, läuft einINSERT
in die Rotverschiebung oder (3) ???. Von Ihrer Hilfe Antworten, ich glaube #2 ist schlecht, da es erfordert zu viele offene verbindungen zu Rotverschiebung - plusCOPY
>INSERT
pro Ihre Antwort auf diese Frage. #1 scheint ein guter Weg zu gehen, aber es ist mir nicht klar, wie ein Projekt für die Handhabung von JSON-Datensätze aus Kinesis -> Rotverschiebung.Eine Möglichkeit ist das erstellen von Zeitreihen-Tabellen in DynamoDB, wo Sie eine Tabelle erstellen, die jeden Tag oder Woche in DynamoDB zu schreiben, die jeder Benutzer-Interaktion. Am Ende des Zeitraums (Tag, Stunde oder Woche), Sie können kopieren Sie die Protokolle auf die Rotverschiebung.
Weitere details, auf die DynamoDB-Zeitreihen-Tabelle finden Sie in diesem Muster: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.TimeSeriesDataAccessPatterns
und diesem blog:
http://aws.typepad.com/aws/2012/09/optimizing-provisioned-throughput-in-amazon-dynamodb.html
Für die Rotverschiebung DynamoDB kopieren: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/RedshiftforDynamoDB.html
Hoffe, das hilft.
Obwohl es bereits eine akzeptierte Antwort hier, AWS lanciert einen neuen service namens Kinesis-Firehose die Griffe der aggregation entsprechend der Benutzer-definierten Abständen eine temporäre upload auf s3 und hochladen (SPEICHERN), um die Rotverschiebung, Wiederholungen und Fehler-handling, Durchsatz-management,etc...
Dies ist wahrscheinlich die einfachste und zuverlässigste Weg, dies zu tun.
Können Sie das schreiben von Daten in CSV-Datei auf der lokalen Festplatte und führen Sie dann Python/boto/psycopg2 Skript zum laden von Daten in Amazon Redshift.
In meinem CSV_Loader_For_Redshift ich genau das tun:
Komprimieren und laden von Daten auf S3 mit boto Python-Modul und multipart upload.
Verwenden psycopg2 COPY-Befehl, um Daten Anhängen zu Rotverschiebung Tabelle.
Einfach nur ein wenig egoistisch hier und beschreibt genau, was Schneepflug ,eine event-analytics-Plattform macht. Sie verwenden diese awesome einzigartige Weise des Sammelns von event-logs vom client und Aggregation von es auf S3.
Verwenden Sie Cloudfront für diese. Was Sie tun können, ist, Gastgeber eines pixels in einem der S3-buckets und-stellen, die Eimer hinter einer CloudFront-Verteilung wie ein Ursprung. Aktivieren Sie die Protokolle zu einem S3-bucket für das gleiche CloudFront.
Können Sie das senden von Protokollen als url-Parameter bei jedem Aufruf, dass die pixel auf dem client (ähnlich google analytics). Diese Protokolle können anschließend angereichert werden und Hinzugefügt, um die Rotverschiebung Datenbank Kopieren.
Diese löst die Zwecke der aggregation von Protokollen. Dieses setup um all das für Sie.
Können Sie auch einen Blick in Piwik die ein open-source-Analyse-service und sehen, ob Sie es ändern können speziell auf Ihre Bedürfnisse zugeschnitten.