Nur aktuellsten Wert beibehalten

Auf dieser Seite wird eine Strategie beschrieben, mit der Sie nur den neuesten Wert in einer Spalte einer Bigtable-Tabelle beibehalten können.

In allen Cloud Bigtable-Clientbibliotheken können Sie mithilfe von Filtern den neuesten Wert bzw. die Zelle einer bestimmten Zeile und Spalte lesen. In einigen Fällen müssen Sie nie ältere Versionen Ihrer Daten lesen. Sie können eine versionsbasierte Richtlinie für die automatische Speicherbereinigung verwenden, die angibt, dass nur eine Zelle in einer Spalte gespeichert wird. Dies kann jedoch bis zu einer Woche dauern für die automatische Speicherbereinigung erfolgt, kann Ihre Tabelle in der Praxis ältere Daten enthalten, die Sie nie lesen möchten.

Damit nur der neueste Wert beibehalten wird, sollten Sie einen delete-then-write-Ansatz verwenden, um Spalten in Ihrer Tabelle auf nur eine Zelle zu beschränken.

Löschen, dann schreiben

Wenn Sie nur einen Wert in einer Spalte beibehalten möchten, können Sie eine Anfrage senden, mit der die Spalte gelöscht und dann mit einem neuen Wert und Zeitstempel in einer atomaren Aktion neu erstellt wird.

Das folgende Java-Pseudocode-Beispiel zeigt, wie das funktionieren würde. Die Reihenfolge ist wichtig: Der Löschvorgang muss vor dem Schreibvorgang erfolgen.

RowMutation mutation = RowMutation.create(TABLE, ROW_KEY)
                .deleteCells(COLUMN_FAMILY, COLUMN_QUALIFIER, Range.TimestampRange.unbounded())
                .setCell((COLUMN_FAMILY, COLUMN_QUALIFIER, TIMESTAMP, VALUE);
dataClient.mutateRow(mutation);

Machen Sie folgende Angaben:

  • TABLE: Die ID der Tabelle
  • COLUMN_FAMILY: Spaltenfamilie mit der Spalte
  • COLUMN_QUALIFIER: Spaltenqualifizierer, der gelöscht und neu erstellt werden soll
  • TIMESTAMP: der neue Zeitstempel
  • VALUE: der neue Wert für die Spalte

Zeitstempel mit dem Wert null

Zuvor empfehlen wir eine Strategie, immer Schreibvorgänge mit einem Zeitstempel von 0 zu senden. Sie können diesen Ansatz weiterhin verwenden. Da jedoch gültige Zeitstempel nützlich sind, empfehlen wir stattdessen den Löschvorgang und dann den Schreibvorgang.

Wenn Sie den Zeitstempel für eine Zelle auf 0 oder einen beliebigen Wert setzen, der kleiner als die aktuelle Zeit in Millisekunden ist, und außerdem eine altersbasierte Richtlinie für die automatische Speicherbereinigung verwendet, wird Ihre Zelle möglicherweise bei der nächsten automatischen Speicherbereinigung gelöscht.

Nächste Schritte