Firestore im Datastore-Modus (Datastore) unterstützt eine Vielzahl von Datentypen für Attributwerte. Diese umfassen unter anderem:
- Ganzzahlen
- Gleitkommazahlen
- Strings
- Datumsangaben
- Binärdaten
Eine vollständige Liste der Typen finden Sie unter Eigenschaften und Werttypen.
Eigenschaften und Werttypen
Die mit einer Entität verknüpften Datenwerte bestehen aus einem oder mehreren Attributen. Jedes Attribut hat einen Namen und einen oder mehrere Werte. Ein Attribut kann Werte mit mehr als einem Typ haben und zwei Entitäten können Werte unterschiedlichen Typs für dasselbe Attribut haben. Attribute können indexiert oder nicht indexiert sein. Abfragen, die nach einem Attribut A sortieren oder filtern, ignorieren Entitäten, bei denen A nicht indexiert ist. Eine Entität kann höchstens 20.000 indexierte Attribute haben.
Die folgenden Werttypen werden unterstützt:
Werttyp | Java-Typ(en) | Sortierreihenfolge | Hinweise |
---|---|---|---|
Ganzzahl | short int long java.lang.Short java.lang.Integer java.lang.Long |
Numerisch | Gespeichert als lange Ganzzahl, dann Umwandlung in den Feldtyp Überlauf der außerhalb des Bereichs liegenden Werte |
Gleitkommazahl | float double java.lang.Float java.lang.Double |
Numerisch | 64 Bit mit doppelter Genauigkeit, IEEE 754 |
Boolesch | boolean java.lang.Boolean |
false <true |
|
Textstring (kurz) | java.lang.String |
Unicode | Bis zu 1.500 Byte Werte über 1.500 Byte geben IllegalArgumentException aus |
Textstring (lang) | com.google.appengine.api.datastore.Text |
Keine | Bis zu 1 Megabyte Nicht indexiert |
Bytestring (kurz) | com.google.appengine.api.datastore.ShortBlob |
Bytereihenfolge | Bis zu 1.500 Byte Werte, die länger als 1.500 Byte sind, geben IllegalArgumentException aus |
Bytestring (lang) | com.google.appengine.api.datastore.Blob |
Keine | Bis zu 1 Megabyte Nicht indexiert |
Datum und Uhrzeit | java.util.Date |
Chronologisch | |
Geografischer Punkt | com.google.appengine.api.datastore.GeoPt |
Nach Breitengrad, dann nach Längengrad |
|
Postanschrift | com.google.appengine.api.datastore.PostalAddress |
Unicode | |
Telefonnummer | com.google.appengine.api.datastore.PhoneNumber |
Unicode | |
E-Mail-Adresse | com.google.appengine.api.datastore.Email |
Unicode | |
Nutzer eines Google-Kontos | com.google.appengine.api.users.User |
E-Mail-Adresse in Unicode-Reihenfolge |
|
Instant-Messaging-Handle | com.google.appengine.api.datastore.IMHandle |
Unicode | |
Link | com.google.appengine.api.datastore.Link |
Unicode | |
Kategorie | com.google.appengine.api.datastore.Category |
Unicode | |
Bewertung | com.google.appengine.api.datastore.Rating |
Numerisch | |
Datastore-Schlüssel | com.google.appengine.api.datastore.Key oder das referenzierte Objekt (als untergeordnetes Element) |
Nach Pfadelementen (Art, Kennung, Art, Kennung...) |
Bis zu 1.500 Byte Werte, die länger als 1.500 Byte sind, geben IllegalArgumentException aus |
Blobstore-Schlüssel | com.google.appengine.api.blobstore.BlobKey |
Bytereihenfolge | |
Eingebettete Entität | com.google.appengine.api.datastore.EmbeddedEntity |
Keine | Nicht indexiert |
Null | null |
Keine |
Wichtig: Das Speichern von users.User
als Attributwert sollte unbedingt vermieden werden, da die E-Mail-Adresse und die eindeutige ID enthalten sind. Wenn ein Nutzer seine E-Mail-Adresse ändert und Sie das alte gespeicherte Objekt user.User
mit dem neuen user.User
-Wert vergleichen, würden sie nicht übereinstimmen. Stattdessen sollten Sie den Nutzer-ID-Wert User
als stabile eindeutige Kennung des Nutzers verwenden.
Für Textstrings und nicht codierte Binärdaten (Bytestrings) unterstützt Datastore zwei Werttypen:
- Kurze Strings (bis zu 1.500 Byte) werden indexiert und können in Filterbedingungen der Abfrage und in Sortierfolgen verwendet werden.
- Lange Strings (bis zu 1 Megabyte) werden nicht indexiert und können nicht in Abfragefiltern und Sortierfolgen verwendet werden.
Blob
. Dieser Typ steht nicht im Zusammenhang mit den Blobs in der Blobstore API.
Wenn eine Abfrage ein Attribut mit Werten verschiedener Typen enthält, verwendet Datastore eine deterministische Sortierung anhand der internen Darstellungen:
- Nullwerte
- Festkommazahlen
- Ganzzahlen
- Datums- und Uhrzeitwerte
- Bewertungen
- Boolesche Werte
- Bytesequenzen
- Bytestring
- Unicode-String
- Blobstore-Schlüssel
- Gleitkommazahlen
- Geografische Punkte
- Nutzer von Google-Konten
- Datastore-Schlüssel
Da lange Textstrings, lange Bytestrings und eingebettete Entitäten nicht indexiert werden, ist für sie keine Reihenfolge definiert.
Wiederkehrende Attribute
Sie können mehrere Werte in einem einzelnen Attribut speichern.
Eingebettete Entitäten
In manchen Fällen ist es sinnvoll, eine Entität als Attribut in eine andere Entität einzubetten. Dies kann beispielsweise nützlich sein, um eine hierarchische Struktur von Attributwerten innerhalb einer Entität zu erstellen. Mit der Java-Klasse EmbeddedEntity
ist das kein Problem:
Attribute in einer eingebetteten Entität werden nicht indexiert und können nicht in Abfragen verwendet werden. Sie können einer eingebetteten Entität optional einen Schlüssel zuordnen. Im Gegensatz zu einer vollwertigen Entität ist der Schlüssel jedoch nicht erforderlich und kann nicht zum Abrufen der Entität verwendet werden, selbst wenn er vorhanden ist.
Statt die Attribute der eingebetteten Entität manuell auszufüllen, können Sie sie mit der Methode setPropertiesFrom()
aus einer vorhandenen Entität kopieren:
Sie können später dieselbe Methode zum Wiederherstellen der ursprünglichen Entität aus der eingebetteten Entität verwenden:
Leere Liste verwenden
In der Vergangenheit konnte Datastore keine Attribute für eine leere Liste darstellen. Im Java SDK wurden leere Sammlungen daher als Nullwerte gespeichert, wodurch es nicht möglich ist, zwischen Nullwerten und leeren Listen zu unterscheiden. Zur Aufrechterhaltung der Abwärtskompatibilität bleibt dies das Standardverhalten, das sich wie folgt zusammenfassen lässt:
- Nullattribute werden in Datastore als Null geschrieben.
- Leere Sammlungen werden in den Datenspeicher als Null geschrieben.
- Nullwerte werden von Datastore als Null gelesen.
- Leere Sammlungen werden als Null gelesen.
Wenn Sie jedoch das Standardverhalten ändern, unterstützt das App Engine Datastore Java SDK das Speichern leerer Listen. Es wird empfohlen, die Auswirkungen zu erwägen, die durch Ändern des Standardverhaltens Ihrer Anwendung entstehen, und anschließend die Unterstützung für leere Listen zu aktivieren.
Legen Sie das Attribut DATASTORE_EMPTY_LIST_SUPPORT während der Initialisierung der Anwendung fest, um das Standardverhalten so zu ändern, dass Sie leere Listen verwenden können:
System.setProperty(DatastoreServiceConfig.DATASTORE_EMPTY_LIST_SUPPORT, Boolean.TRUE.toString());
Wird dieses Attribut wie oben auf true
gesetzt, gilt:
- Nullattribute werden in Datastore als Null geschrieben.
- Leere Sammlungen werden als leere Liste in Datastore geschrieben.
- Nullwerte werden von Datastore als Null gelesen.
- Beim Lesen aus Datastore wird eine leere Liste als leere Sammlung zurückgegeben.