Cloud Firestore Veri modeli

Cloud Firestore, NoSQL, belge odaklı bir veritabanıdır. SQL veritabanının aksine tablo veya satır yoktur. Bunun yerine, verileri koleksiyonlar halinde düzenlenen belgelerde depolarsınız.

Her belge bir dizi anahtar/değer çifti içerir. Cloud Firestore, küçük belgelerden oluşan büyük koleksiyonları depolamak için optimize edilmiştir.

Tüm belgeler koleksiyonlarda saklanmalıdır. Belgeler alt koleksiyonlar ve iç içe geçmiş nesneler içerebilir; bunların her ikisi de dizeler gibi ilkel alanları veya listeler gibi karmaşık nesneleri içerebilir.

Koleksiyonlar ve belgeler Cloud Firestore'da örtülü olarak oluşturulur. Bir koleksiyon içindeki bir belgeye veri atamanız yeterlidir. Koleksiyon veya belge mevcut değilse Cloud Firestore onu oluşturur.

Belgeler

Cloud Firestore'da depolama birimi belgedir. Belge, değerlerle eşlenen alanları içeren hafif bir kayıttır. Her belge bir adla tanımlanır.

alovelace kullanıcısını temsil eden bir belge şöyle görünebilir:

  • alovelace

    first : "Ada"
    last : "Lovelace"
    born : 1815

Bir belgedeki karmaşık, iç içe geçmiş nesnelere haritalar denir. Örneğin, yukarıdaki örnekte kullanıcının adını aşağıdaki gibi bir haritayla yapılandırabilirsiniz:

  • alovelace

    name :
    first : "Ada"
    last : "Lovelace"
    born : 1815

Belgelerin JSON'a çok benzediğini fark edebilirsiniz. Aslında temelde öyleler. Bazı farklılıklar vardır (örneğin, belgeler ekstra veri türlerini destekler ve boyutları 1 MB ile sınırlıdır), ancak genel olarak belgeleri hafif JSON kayıtları olarak değerlendirebilirsiniz.

Koleksiyonlar

Belgeler, yalnızca belge taşıyıcıları olan koleksiyonlarda bulunur. Örneğin, her biri bir belgeyle temsil edilen çeşitli kullanıcılarınızı içerecek bir users koleksiyonunuz olabilir:

  • kullanıcıları

    • alovelace

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • olgunlaşması

      first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore şemasız olduğundan, her belgeye hangi alanları koyacağınız ve bu alanlarda hangi veri türlerini depolayacağınız konusunda tam özgürlüğe sahipsiniz. Aynı koleksiyondaki belgelerin tümü farklı alanlar içerebilir veya bu alanlarda farklı türde veriler depolayabilir. Ancak belgeleri daha kolay sorgulayabilmeniz için birden fazla belgede aynı alanları ve veri türlerini kullanmak iyi bir fikirdir.

Bir koleksiyon belgeler içerir ve başka hiçbir şey içermez. Değerleri olan ham alanları doğrudan içeremez ve diğer koleksiyonları içeremez. (Cloud Firestore'da daha karmaşık verilerin nasıl yapılandırılacağına ilişkin bir açıklama için bkz . Hiyerarşik Veriler .)

Bir koleksiyondaki belgelerin adları benzersizdir. Kullanıcı kimlikleri gibi kendi anahtarlarınızı sağlayabilir veya Cloud Firestore'un sizin için otomatik olarak rastgele kimlikler oluşturmasına izin verebilirsiniz.

Koleksiyonları "oluşturmanıza" veya "silmenize" gerek yoktur. Bir koleksiyondaki ilk belgeyi oluşturduktan sonra koleksiyon var olur. Bir koleksiyondaki tüm belgeleri silerseniz koleksiyon artık mevcut olmaz.

Referanslar

Cloud Firestore'daki her belge, veritabanı içindeki konumuna göre benzersiz bir şekilde tanımlanır. Önceki örnek, koleksiyon users arasında alovelace bir belgeyi gösteriyordu. Kodunuzda bu konuma atıfta bulunmak için buraya bir referans oluşturabilirsiniz.

Web modular API

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');

Web namespaced API

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Süratli
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Kotlin+KTX

val alovelaceDocumentRef = db.collection("users").document("alovelace")

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Dart

final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Piton
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Gitmek

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$document = $db->collection('samples/php/users')->document('alovelace');
Birlik
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Yakut
document_ref = firestore.col("users").doc("alovelace")

Referans, yalnızca veritabanınızdaki bir konuma işaret eden hafif bir nesnedir. Orada veri bulunsun veya bulunmasın, bir referans oluşturabilirsiniz ve bir referans oluşturmak herhangi bir ağ işlemi gerçekleştirmez.

Ayrıca koleksiyonlara referanslar da oluşturabilirsiniz:

Web modular API

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web namespaced API

var usersCollectionRef = db.collection('users');
Süratli
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
let usersCollectionRef = db.collection("users")
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Kotlin+KTX

val usersCollectionRef = db.collection("users")

Java

CollectionReference usersCollectionRef = db.collection("users");

Dart

final usersCollectionRef = db.collection("users");
Java
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Piton
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Gitmek

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$collection = $db->collection('samples/php/users');
Birlik
CollectionReference collectionRef = db.Collection("users");
C#

C#

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

CollectionReference collectionRef = db.Collection("users");
Yakut
collection_ref = firestore.col "users"

Kolaylık olması açısından, bir belgenin veya koleksiyonun yolunu, yol bileşenleri eğik çizgiyle ( / ) ayrılmış şekilde bir dize olarak belirterek de referanslar oluşturabilirsiniz. Örneğin alovelace belgesine bir referans oluşturmak için:

Web modular API

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web namespaced API

var alovelaceDocumentRef = db.doc('users/alovelace');
Süratli
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
let aLovelaceDocumentReference = db.document("users/alovelace")
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Kotlin+KTX

val alovelaceDocumentRef = db.document("users/alovelace")

Java

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Dart

final aLovelaceDocRef = db.doc("users/alovelace");
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Piton
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Gitmek

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$document = $db->document('users/alovelace');
Birlik
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

DocumentReference documentRef = db.Document("users/alovelace");
Yakut
document_path_ref = firestore.doc "users/alovelace"

Hiyerarşik Veriler

Cloud Firestore'da hiyerarşik veri yapılarının nasıl çalıştığını anlamak için mesajların ve sohbet odalarının bulunduğu örnek bir sohbet uygulamasını düşünün.

Farklı sohbet odalarını depolamak için rooms adında bir koleksiyon oluşturabilirsiniz:

  • odaları

    • A

      name : "my chat room"

    • B

      ...

Artık sohbet odalarınız olduğuna göre mesajlarınızı nasıl saklayacağınıza karar verin. Bunları sohbet odasının belgesinde saklamak istemeyebilirsiniz. Cloud Firestore'daki belgeler hafif olmalı ve bir sohbet odası çok sayıda mesaj içermelidir. Ancak sohbet odanızın belgesinde alt koleksiyonlar olarak ek koleksiyonlar oluşturabilirsiniz.

Alt koleksiyonlar

Bu senaryoda iletileri saklamanın en iyi yolu alt koleksiyonları kullanmaktır. Alt koleksiyon, belirli bir belgeyle ilişkili bir koleksiyondur.

rooms koleksiyonunuzdaki her oda belgesi için messages adı verilen bir alt koleksiyon oluşturabilirsiniz:

  • odaları

    • A

      name : "my chat room"

      • mesajları

        • mesajı1

          from : "alex"
          msg : "Hello World!"

        • mesajı2

          ...

    • B

      ...

Bu örnekte, alt koleksiyondaki bir iletiye aşağıdaki kodla bir başvuru oluşturacaksınız:

Web modular API

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");

Web namespaced API

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Süratli
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Kotlin+KTX

val messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")

Java

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Dart

final messageRef = db
    .collection("rooms")
    .doc("roomA")
    .collection("messages")
    .doc("message1");
Java
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Piton
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Gitmek

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Birlik
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Yakut
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Koleksiyonların ve belgelerin değişen düzenine dikkat edin. Koleksiyonlarınız ve belgeleriniz her zaman bu modeli takip etmelidir. Bir koleksiyondaki bir koleksiyona veya bir belgedeki bir belgeye referans veremezsiniz.

Alt koleksiyonlar, verileri hiyerarşik olarak yapılandırmanıza olanak tanıyarak verilere erişimi kolaylaştırır. roomA tüm mesajları almak için alt koleksiyon messages bir koleksiyon referansı oluşturabilir ve diğer koleksiyon referanslarında olduğu gibi bu mesajlarla etkileşimde bulunabilirsiniz.

Alt koleksiyonlardaki belgeler, verileri daha fazla iç içe yerleştirmenize olanak tanıyan alt koleksiyonlar da içerebilir. Verileri 100 seviyeye kadar derinlikte iç içe yerleştirebilirsiniz.