2016-04-07 14 views
2

vor kurzem begann ich DynamoDB zu verwenden, um Ereignisse wie diese mit Struktur zu speichern:NoSQL (Mongo, DynaoDB) mit Elasticsearch vs einzigen Elasticsearch

{start_date: '2016-04-01 15:00:00', end_date: '2016-04-01 15:30:00', from_id: 320, to_id: 360, type: 'yourtype', duration: 1800}

Aber als ich begann, sie zu analysieren ich mit der Tatsache konfrontiert, dass DynamoDB hat keine Aggregationen, hat Lese-/Schreib-Limits, Response-Size-Limits usw. Dann habe ich ein Plugin installiert, um Daten auf ES zu indizieren. Als Ergebnis sehe ich, dass ich DynamoDB nicht mehr verwenden muss. Also meine Frage ist wann müssen Sie unbedingt NoSQL (in meinem Fall DynamoDB) Instanz zusammen mit Elasticsearch? Wird ES ES Performance herunterfahren, wenn Sie dort nicht nur Indizes, sondern vollständige Dokumente speichern? (Ja, ich weiß, ES ist nur ein Index, aber in einigen Fällen könnten solche Ansätze kosteneffektiver sein als MySQL Cluster)

Antwort

3

Der Grund, warum Sie Daten in DynamoDB schreiben und dann automatisch in Elasticsearch mit DynamoDB indexieren lassen Streams sind, weil DynamoDB oder MySQL in diesem Fall als zuverlässiger Datenspeicher gilt. Elasticsearch ist ein Index und gilt im Allgemeinen nicht als geeigneter Ort, um Daten zu speichern, die Sie wirklich nicht verlieren können.

DynamoDB selbst hat Probleme mit dem Speichern von Zeitreihenereignisdaten und das Aggregieren ist unmöglich, wie Sie angegeben haben. Sie können jedoch DynamoDB-Streams in Verbindung mit AWS Lambda und einer separaten DynamoDB-Tabelle verwenden, um Sichten für Aggregationen zu materialisieren, je nachdem, was Sie zu berechnen versuchen. Abhängig von Ihrem Anwendungsfall und der erforderlichen Flexibilität kann dies etwas zu berücksichtigen sein.

Die Verwendung von Elasticsearch als das einzige Ziel für Dinge wie Logs wird im Allgemeinen als akzeptabel angesehen, wenn Sie bereit sind, die Möglichkeit eines Datenverlustes zu akzeptieren. Wenn die Datensätze, die Sie speichern und analysieren möchten, wirklich zu wertvoll sind, um sie zu verlieren, sollten Sie sie wirklich woanders speichern und Elasticsearch die abgefragte Kopie haben. Elasticsearch ermöglicht sehr flexible Aggregationen, so dass es ein ausgezeichnetes Werkzeug für diese Art von Anwendungsfall ist.

Als eine vollständige Alternative können Sie AWS Kinesis Firehose verwenden, um die Ereignisse aufzunehmen und in S3 dauerhaft zu speichern. Sie können dann ein S3-Ereignis verwenden, um eine AWS-Lambda-Funktion auszulösen, um die Daten an Elasticsearch zu senden, wo Sie sie aggregieren können. Dies ist eine erschwingliche Lösung mit dem einzigen großen Nachteil, die 60 Sekunden Verzögerung, die Firehose auferlegt. Wenn Sie bei diesem Ansatz Daten in Ihrem Elasticsearch-Cluster verlieren, können Sie die Daten aus den in S3 gespeicherten Dateien erneut laden.

Verwandte Themen