Cloud Firestore, NoSQL, belge tabanlı bir veritabanıdır. SQL veritabanından farklı olarak tablo veya satır yoktur. Bunun yerine verileri koleksiyonlar halinde düzenlenen dokümanlarda depolarsınız.
Her belge bir dizi anahtar/değer çifti içerir. Cloud Firestore, küçük dokümanlardan oluşan büyük koleksiyonları depolamak için optimize edilmiştir.
Tüm dokümanlar koleksiyonlarda depolanmalıdır. Dokümanlar, alt koleksiyonlar ve iç içe yerleştirilmiş nesneler içerebilir. Bu nesneler, dize gibi basit alanlar veya liste gibi karmaşık nesneler içerebilir.
Koleksiyonlar ve dokümanlar Cloud Firestore içinde dolaylı olarak oluşturulur. Koleksiyondaki bir dokümana veri atamanız yeterlidir. Koleksiyon veya belge mevcut değilse Cloud Firestore bunları oluşturur.
Dokümanlar
Cloud Firestore'te depolama birimi dokümandır. Belge, değerlerle eşleşen alanları içeren hafif bir kayıttır. Her doküman bir adla tanımlanır.
alovelace
kullanıcısını temsil eden bir doküman şöyle görünebilir:
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Bir dokümanda bulunan karmaşık, iç içe yerleştirilmiş nesnelere harita denir. Örneğin, yukarıdaki örnekteki kullanıcının adını bir harita ile şu şekilde yapılandırabilirsiniz:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Dokümanların JSON'a çok benzediğini fark edebilirsiniz. Aslında temel olarak öyledir. Bazı farklılıklar vardır (örneğin, dokümanlar ek veri türlerini destekler ve boyutları 1 MB ile sınırlıdır). Ancak genel olarak dokümanları hafif JSON kayıtları olarak değerlendirebilirsiniz.
Koleksiyonlar
Dokümanlar, dokümanlar için kapsayıcı olan koleksiyonlarda bulunur. Örneğin, her biri bir dokümanla temsil edilen çeşitli kullanıcılarınızı içeren bir users
koleksiyonunuz olabilir:
kullanıcı
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore şemasız olduğundan her dokümana hangi alanları ve bu alanlarda hangi veri türlerini ekleyeceğiniz konusunda tam özgürlük sahibisiniz. Aynı koleksiyondaki belgelerin tümü farklı alanlar içerebilir veya bu alanlarda farklı veri türleri depolayabilir. Ancak dokümanları daha kolay sorgulayabilmek için birden fazla dokümanda aynı alanları ve veri türlerini kullanmak iyi bir fikirdir.
Koleksiyonlar yalnızca doküman içerir. Doğrudan değer içeren ham alanlar ve başka koleksiyonlar içeremez. (Cloud Firestore'de daha karmaşık verilerin nasıl yapılandırılacağına dair açıklama için Hiyerarşik Veriler bölümüne bakın.)
Koleksiyondaki dokümanların adları benzersizdir. Kullanıcı kimlikleri gibi kendi anahtarlarınızı sağlayabilir veya Cloud Firestore'ün sizin için otomatik olarak rastgele kimlikler oluşturmasına izin verebilirsiniz.
Koleksiyon "oluşturmanız" veya "silmeniz" gerekmez. Koleksiyondaki ilk dokümanı oluşturduktan sonra koleksiyon oluşturulur. Bir koleksiyondaki tüm dokümanları silerseniz koleksiyon artık mevcut olmaz.
Referanslar
Cloud Firestore içindeki her doküman, veritabanındaki konumuyla benzersiz şekilde tanımlanır. Önceki örnekte, users
koleksiyonundaki alovelace
dokümanı gösterilmiştir. Kodunuzda bu konuma referans vermek için bu konuma referans oluşturabilirsiniz.
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
let alovelaceDocumentRef = db.collection("users").document("alovelace")
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
val alovelaceDocumentRef = db.collection("users").document("alovelace")
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
Referans, veritabanınızdaki bir konumu işaret eden hafif bir nesnedir. Veri bulunsa da bulunmasa da referans oluşturabilirsiniz. Referans oluşturmak herhangi bir ağ işlemi gerçekleştirmez.
Koleksiyonlara da referans oluşturabilirsiniz:
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
var usersCollectionRef = db.collection('users');
let usersCollectionRef = db.collection("users")
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
val usersCollectionRef = db.collection("users")
CollectionReference usersCollectionRef = db.collection("users");
final usersCollectionRef = db.collection("users");
CollectionReference users_collection_reference = db->Collection("users");
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
CollectionReference collectionRef = db.Collection("users");
C#
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
Kolaylık sağlamak için bir belgenin veya koleksiyonun yolunu, yol bileşenleri eğik çizgiyle (/
) ayrılmış bir dize olarak belirterek de referans oluşturabilirsiniz. Örneğin, alovelace
belgesine referans oluşturmak için:
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
var alovelaceDocumentRef = db.doc('users/alovelace');
let aLovelaceDocumentReference = db.document("users/alovelace")
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
val alovelaceDocumentRef = db.document("users/alovelace")
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
final aLovelaceDocRef = db.doc("users/alovelace");
DocumentReference alovelace_document = db->Document("users/alovelace");
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
DocumentReference documentRef = db.Document("users/alovelace");
C#
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
Hiyerarşik Veriler
Hiyerarşik veri yapılarının Cloud Firestore'te nasıl çalıştığını anlamak için mesajlar ve sohbet odaları içeren örnek bir sohbet uygulamasını düşünün.
Farklı sohbet odalarını depolamak için rooms
adlı bir koleksiyon oluşturabilirsiniz:
oda
odaA
name : "my chat room"
odaB
...
Sohbet odalarınız olduğuna göre mesajlarınızı nasıl depolayacağınıza karar verin. Bunları sohbet odasının dokümanında saklamak istemeyebilirsiniz. Cloud Firestore içindeki dokümanlar hafif olmalıdır ve sohbet odaları çok sayıda mesaj içerebilir. Ancak sohbet odanızı belgenizde alt koleksiyonlar olarak ek koleksiyonlar oluşturabilirsiniz.
Alt koleksiyonlar
Bu senaryoda iletileri depolamanın en iyi yolu alt koleksiyonları kullanmaktır. Alt koleksiyon, belirli bir dokümanla ilişkili bir koleksiyondur.
rooms
koleksiyonunuzdaki her oda dokümanı için messages
adlı bir alt koleksiyon oluşturabilirsiniz:
oda
odaA
name : "my chat room"
mesajlar
mesaj1
from : "alex"
msg : "Hello World!"
message2
...
odaB
...
Bu örnekte, aşağıdaki kodla alt koleksiyondaki bir iletiye referans oluşturursunuz:
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
Koleksiyonlar ve dokümanların değişen düzenine dikkat edin. Koleksiyonlarınız ve belgelerinizin adı her zaman bu kalıbı izlemelidir. Bir koleksiyondaki koleksiyona veya bir dokümanda dokümana referans veremezsiniz.
Alt koleksiyonlar, verileri hiyerarşik olarak yapılandırmanıza olanak tanıyarak verilere erişimi kolaylaştırır. roomA
altındaki tüm mesajları almak için messages
alt koleksiyonuna bir koleksiyon referansı oluşturabilir ve bu referansla diğer koleksiyon referanslarıyla yaptığınız gibi etkileşimde bulunabilirsiniz.
Alt koleksiyonlardaki dokümanlar da alt koleksiyon içerebilir. Bu sayede verileri daha da iç içe yerleştirebilirsiniz. Verileri 100 düzeye kadar iç içe yerleştirebilirsiniz.