2016-07-09 6 views
1

Ich bin vertraut mit Datastore die single-Write-pro-Sekunde-Grenze (ok, 5, vielleicht) für Entity-Gruppen. Wie geht das mit Transaktionen einher?Datenspeicher: Mehrere Schreibvorgänge für eine Entitätsgruppe innerhalb einer Transaktion überschreiten das Schreiblimit?

docs scheinen zu zeigen, dass ich mehrere Modifikationen innerhalb eines transaktions zum Beispiel des Hinzufügen mehrerer Nachkommen Entitäten tun kann:

Eine einzelne Transaktion kann in einer einzigen Gruppe mehr Entitäten ändern, oder neue Objekte hinzufügen die Gruppe, indem das Mutterunternehmen der neuen Einheit eine bestehende Entität in der Gruppe bildet.

https://cloud.google.com/appengine/docs/java/datastore/transactions

+0

Es ist technisch 1 Schreibvorgang pro Sekunde pro Entitätsgruppe, wobei eine Transaktion bis zu 500 Entitäten für eine Entitätsgruppe haben kann. Dies bedeutet, dass Sie maximal 500 Einheiten pro Sekunde in eine einzige Entitätsgruppe schreiben können. Beachten Sie auch, dass Sie einen höheren Wert pro Sekunde erreichen können, obwohl Sie das Risiko von Konflikten sowie die eventuelle Konsistenz des Systems erhöhen. –

+0

@DanMcGrath: Hm, das sollte in der Dokumentation geschrieben werden ... –

+0

@DanCornilescu, wir arbeiten aktiv daran, es zu verbessern. In unserer neuen Limits-Dokumentation sehen Sie beispielsweise eine deutlichere Darstellung: https://cloud.google.com/datastore/docs/concepts/limits –

Antwort

1

Ja, können Sie mehrere Schreiboperationen pro Einheit Gruppe innerhalb derselben Transaktion, aber mit Vorsicht tun:

  • Pay atention nicht innerhalb der gleichen Transaktion schreibt verursacht Konflikte haben, andernfalls wird die Transaktion schließlich fehlschlagen (selbst nach Wiederholungen)
  • versuchen, die Anzahl der Schreibvorgänge innerhalb jeder Transaktion gering zu halten oder irgendwie ausreichend Intervalle zwischen den Transaktionen sicherzustellen, so dass das Aggregat schreiben ops r aß (oder eher sein kurzfristiger Durchschnitt) bleibt (gut) unter der Grenze von 1 write/s - um Platz für momentane Spitzen und gelegentliche Wiederholungen von Fehlern zu lassen, die auch an dieser Grenze kauen. Andernfalls erhalten Sie Nebenläufigkeits-/Konkurrenzausnahmen. Siehe Objectify - many writes to same entity in short period of time with and without transaction

Und natürlich können Sie auf bis zu 25 Entitätsgruppen (zu diesem Zeitpunkt) innerhalb gruppenübergreifende Transaktionen (jeweils immer sein eigenen ~ 1 Schreib-/s Grenze für ein Aggregat von bis schreiben ~ 25 Schreib/s).

Es ist nicht trivial, die richtige Balance zwischen eventueller Konsistenz und Schreibtiefe zu finden. Diese Macht von Interesse sein: What would be the purpose of putting all datastore entities in a single group?

aktualisiert Kredit DanMcGrath Kommentar:

Es ist technisch 1 Schreibtransaktion pro Sekunde pro Entity-Gruppe, wo eine Transaktion bis zu 500 Einheiten für eine einzelne Entität hat Gruppe. Dies bedeutet, dass Sie maximal 500 Einheiten pro Sekunde in eine einzige Entitätsgruppe schreiben können. Beachten Sie auch, Sie können höher auf einmal pro Sekunde Höhepunkt, obwohl, wenn Sie es erhalten, erhöhen Sie Ihr Risiko des Schlagens sowie die eventuelle Konsistenz des Systems. - Dan McGrath Vor 1 Stunde

+0

Bestätigung von Google-Dokumenten: https://cloud.google.com/datastore/docs/concepts/structuring_for_strong_consistency – nflacco