2016-06-20 22 views
0

Momentan verschiebe ich Daten von der Cassandra-Datenbank nach amazon dynamoDB. Als ich Konzepte der dynamoDB-Implementierung durchging, habe ich einige Fragen bezüglich der Aktualisierung von Zählern in dynamoDB.Amazon dynamoDB Counters Aktualisieren und Objekte erhalten

Frage 1:

In Cassandra in der Regel verwenden wir store_id, store_id + Datum, campaign_id, campaign_id + Datum Kombinationen der Zähler zu aktualisieren.

In Amazon DynamoDB haben wir HASHKEY und RANGEKEY. Wir können nur HASHKEY oder HASHKEY mit RANGEKEY verwenden. Hier habe ich zwei Möglichkeiten.

Option 1:

Platzierung store_id/campaign_id auf HashKey und das Datum auf RANGEKEY.

Option 2:

wie Cassandra Struktur, Kann ich store_id, store_id + Datum, campaign_id, campaign_id + Datum als HashKey (Nein Bereich Taste).

Welche Option ist gut für Best Practices?

Wenn ich die Werte von dynamoDB lese, brauche ich die vom Benutzer angegebenen Gesamtzählerwerte von store_id und campaign_id sowie den Bereich.

Frage 2:

Ich möchte für bestimmten Speicher Anzahl der Kampagne Lasten berechnen. Wir laden die Kampagne, wenn der Nutzer den Store besucht. Wenn beispielsweise ein "Alpha" -Benutzer das Geschäft besucht und wir die Kampagne gezeigt haben, erhöhen Sie den Kampagnenladezähler.

Ich muss die Kampagnenlasten basierend auf dem vom Benutzer angegebenen Zeitraum berechnen. In Cassandra habe ich folgende Struktur implementiert.

campaign_id - Lasten - 10 (10 Benutzer diese Kampagne gesehen haben)

campaign_id + 20.160.403 - Lasten - 4 (4 Benutzer haben diese Kampagne auf diese Daten zu sehen)

Wie kann ich das gleiche Konzept implementieren in Amazon dynamoDB.

Ich habe festgestellt, dass wir DynamoDB nicht verwenden können, Batch-Update zu verwenden, um Attribute (Counter) in mehreren Elementen (Keys) zu aktualisieren. In diesem Fall werden wir mehr Schreibvorgänge haben als Cassandra.

Beispiel:

campaign_load Zähler:

Mit hector api können wir campaign_load Zähler zu einer Zeit mit folgenden Kombinationen aktualisieren. store_id, store_id + datenschlüssel, campaign_id, campaign_id + datekey.

(4 Schlüssel mit einem Schreiben) - Ich benutze Hector API für die Verbindung mit Cassandra Node.

Aber in Amazon DynamoDB müssen wir 4 Schreibvorgänge machen. Jedes Attribut im Element wird separat aktualisiert. (4 Tasten mit 4 Schreibvorgängen)

Writebatch-Konzept hier nicht sinnvoll. Weil es die vorhandenen Elemente überschreibt und die Zähler nicht aktualisiert.

Bei steigenden Zählern erhöht sich auch die Anzahl der Schreibvorgänge.

In meiner Anwendung verwende ich mehr Zähler. Kann irgendjemand vorschlagen, dass hwo die Zähler aktualisiert?

+0

Eigentlich ist die Frage 2 nicht klar. Wäre klar, wenn Sie die tatsächliche Anforderung eher als Ihr Verständnis und einige teilweise Lösung bereitstellen können. – notionquest

+0

Danke für Ihre Antwort .. Ich habe Quesiton 2 bearbeitet. Hoffe, Sie verstehen das Konzept – John

+0

Die Antwort aktualisiert 2. – notionquest

Antwort

0

Frage 1: - Es hängt von Ihrem Abfrage-Muster ab. Option 1 sollte eine bevorzugte Option sein, wenn store_id/campaign_id eine eindeutige Kombination für den Primärschlüssel bereitstellen kann. Außerdem kann die Anwendung die Datenbank nur mit store_id/campaign_id abfragen. Ich bin mir nicht sicher, ob die Anwendung in allen Anwendungsfällen Werte aller vier Felder enthalten würde.

Bitte beachten Sie, dass Sie möglicherweise die gesamte Datenbank scannen müssen, was eine kostspielige Operation in Dynamo DB ist, wenn Sie den HASH-Schlüssel nicht haben. In Anbetracht dieses Punktes sollte Option 1 bevorzugt werden, wenn store_id/campaign_id den eindeutigen Wert liefern kann.

Hash-Taste + Bereichsschlüssel muss eindeutig sein.

Frage 2: - Sie Unter der Annahme, mit der Option gehen 1 können Sie den Zähler um zwei Arten aktualisieren: 1) durch Hash-Schlüssel allein dh Speicher-ID und Kampagnen-ID - Die Anzahl der Eintrage Updates gleich Anzahl von Artikeln, die für die Geschäfts-ID und die Kampagnen-ID-Kombination vorhanden sind 2) durch Rautentaste + Bereichstastenkombination - nur ein Eintrag aktualisiert

Der Wert des Zählerattributs kann für jedes Element um 1 oder n erhöht werden.

In DynamoDB entspricht ein Element einem Datensatz in der Datenbank.

Schauen Sie sich die Atomic Counter-Option in Dynamodb an. DynamoDB Atomic Counters Link

+0

Nach Ihrer Anfrage habe ich die Frage bearbeitet. Hoffe, Sie können die Frage verstehen 2 – John

+0

Frage 2: Das heißt, Sie vorschlagen, dass wir 4 Update-Anforderungen an dynamoDB machen müssen (Hashkey allein, Hash-Schlüssel + Bereichstastenkombination für Kampagnen-ID und Store-ID) richtig? – John

Verwandte Themen