2016-08-01 18 views
1

Ich verwende eine relay/graphql/googlecloud-Einrichtung für ein Projekt, das Daten unwiderruflich speichert.Die aktuelle Version jedes Datensatzes mit der Google Cloud Datastore-Abfrage zurücksenden

Ich habe eine Reihe von Feldern, die einen neuen Datensatz jedes Mal, wenn eine Änderung erstellen auf eines der Felder gemacht strukturiert wie folgt:

Project 
- Start Date 
- End Date 
- Description 
- ... 
- ... 

Das erste Mal, wenn ein Projekt erstellt wird mit einem Zeitstempel gespeichert wird und eine Versionsnummer. Zum Beispiel:

Alle Änderungen nach diesem erstellt eine neue Versionsnummer, aber immer noch den gleichen Zeitstempel.

1470065550-2 

Wenn man bedenkt, dass es unveränderlich ist, wird es möglicherweise viele Versionen eines Projekts geben. Wenn es auch viele Projekte gibt, kann dies dazu führen, dass eine große Anzahl von Datensätzen geholt wird.

Wenn ich eine Liste von Projekten aus dem Datenspeicher abrufen möchte, gebe ich nur die jeweils neueste Version zurück, was der beste Weg wäre geht das? Wenn die Versionsnummer inkrementiert wird, weiß ich nie, welcher der neueste ist.

Zum Beispiel, wenn ich Reihen hatte zwei Projekte enthalten, die beide mit mehreren Versionen und ich mag die neueste Version von jedem holen:

1470065550-1 
1470065550-2 
1470065550-3 
1470065550-4 
1470065550-5 
1470065550-6 
1470065550-7 <--- Current Version for 1470065550 
1567789887-1 
1567789887-2 
1567789887-3 <--- Current Version for 1567789887 

Basierend auf den obigen Zeilen ich die Abfrage muß nur die neuesten zurückkehren Version der beiden Projekte:

1470065550-7 <--- Current Version for 1470065550 
1567789887-3 <--- Current Version for 1567789887 
+0

"Wenn die Versionsnummer inkrementiert wird, weiß ich nie, welche die letzte ist." <- das macht keinen Sinn. Können Sie mir bitte erklären, warum Sie die letzte Versionsnummer eines Projekts nicht kennen? –

+0

Ich habe ein Beispiel hinzugefügt. Sorry, ich war anfangs nicht sehr klar – BennyTicklez

Antwort

0

Sie wahrscheinlich zu Ihrem Tag ändern möchten [google-Cloud-Datenspeicher] statt [google-Cloud-Storage], weil Sie wahrscheinlich Menschen fehlt, die wirklich Experten für Datenspeicher sind .

Aber nur um meine zwei Cent auf Ihre Frage zu bieten: Es kann am einfachsten sein, ein Feld für "aktuelle" hinzuzufügen und dann eine Transaktion verwenden, um es atomar zu wechseln. Dann ist es ein einfacher Filter für die Verwendung in jeder anderen Abfrage.

Wenn Sie das nicht können, ist es ein wenig schwierig, Ihre Frage zu beantworten, weil Sie uns nicht die Abfrage gegeben haben, die Sie erstellen, um diese Ergebnisse zu erhalten. Der typische Weg, um einen Maximalwert zu bekommen ist eine Grenze von 1 wie so zu sortieren und setzen:

var query = datastore 
    .createQuery('Projects') 
    .order('timestamp') 
    .limit(1); 

Aber angesichts der Art und Weise Sie die Daten speichern, ich glaube nicht, Sie können dies tun, wenn Sie überfahren von -9 bis -10, weil -10 normalerweise in lexikografischen Sortierungen vor -9 steht (ich habe jedoch nicht überprüft, wie dies im Datenspeicher funktioniert). Möglicherweise müssen Sie das Pad auf Null setzen.

+0

Ich verwende derzeit eine GQL-Abfrage. Das Problem ist, dass es keine GROUP BY gibt, die Sie in einer mySQL-Abfrage verwenden können, um das Ergebnis zu erzielen, nach dem ich suche – BennyTicklez