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:
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:
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:
first : "Ada"
last : "Lovelace"
born : 1815
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
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Amaç-C
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
Python
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Gitmek
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.
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.
Yakut
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
let usersCollectionRef = db.collection("users")
Amaç-C
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
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Gitmek
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.
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.
Yakut
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
let aLovelaceDocumentReference = db.document("users/alovelace")
Amaç-C
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
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Gitmek
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.
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.
Yakut
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:
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:
name : "my chat room"
from : "alex"
msg : "Hello World!"
...
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
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Amaç-C
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
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Gitmek
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.
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.
Yakut
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.