Cloud Firestore için en iyi uygulamalar

Hızlı referans olarak burada listelenen en iyi uygulamaları kullanın Cloud Firestore kullanan bir uygulama derlerken geçerlidir.

Veritabanı konumu

Veritabanı örneğinizi oluşturduğunuzda, veritabanını seçin konum kullanmanızı öneririz. Geniş kapsamlı ağ atlamaları daha hataya açıktır ve sorgu gecikmesini artırır.

Cihazların kullanılabilirliğini ve dayanıklılığını uygulamanız için çok bölgeli bir konum seçin ve En az iki bölgeye kritik işlem kaynakları yerleştirin.

Yazma oranının daha düşük olması için maliyetlerin daha düşük olması amacıyla bölgesel konum seçin uygulamanız gecikmeye karşı hassassa veya diğer GCP kaynaklarıyla ortak konum için çözüm sunar.

Doküman Kimlikleri

  • . ve .. doküman kimliklerinden kaçının.
  • Belge kimliklerinde / düz eğik çizgi kullanmaktan kaçının.
  • Aşağıdakiler gibi tekdüze şekilde artan belge kimlikleri kullanmayın:

    • Customer1, Customer2, Customer3...
    • Product 1, Product 2, Product 3...

    Bu tür sıralı kimlikler, gecikmeyi etkileyen hotspot'lara yol açabilir.

Alan Adları

  • Ekstra alanlar gerektirdiğinden alan adlarında aşağıdaki karakterlerden kaçının çıkış:

    • . devre
    • [ sol köşeli ayraç
    • ] sağ köşeli parantez
    • * yıldız işareti
    • ` vurgu işareti

Dizinler

Yazma gecikmesini azaltma

Yazma gecikmesinde ana etken, dizin dağılmasıdır. Paydaşların yönetiminde dizin dağılmasını azaltma:

  • Ayarla koleksiyon düzeyinde dizin muafiyetleri hakkında daha fazla bilgi edinin. Varsayılan olarak kolay bir yöntem, Azalan ve Dizi dizine ekleme. Dizine eklenen kullanılmayan değerlerin kaldırılması depolama alanı maliyetlerini de azaltır.

  • Bir işlemdeki belge sayısını azaltın. Büyük sayıda metin yazmak için atomik grup oluşturmak yerine toplu yazıcı kullanmayı düşünün yazar.

Dizin muafiyetleri

Çoğu uygulama için otomatik dizine eklemenin yanı sıra bağlantılarını kullanın. Ancak isterseniz tek alan muafiyetleri aşağıdaki durumlarda:

Durum Açıklama
Geniş dize alanları

Genellikle kullanırsanız, alanı muaf tutarak depolama maliyetlerini azaltabilirsiniz. olabilir.

Sıralı değerleri olan belgeler içeren bir koleksiyona yüksek yazma hızları

Bir alanı dizine eklemede bir bir zaman damgası gibi, bir koleksiyondaki dokümanların maksimum toplama işlemi saniyede 500 yazmadır. Sıralı değerlere sahip alana göre sorgulama yapmazsanız alanı muaf tutabilirsiniz. dizine eklenmesini engelleyebilirsiniz.

Örneğin, yazma hızı yüksek olan bir IoT kullanım alanında, zaman damgası alanı olan belgeler içeren bir koleksiyon, saniyede 500 yazma sınırına yaklaşabilir.

TTL alanları

TTL (geçerlilik süresi) politikalarını kullanıyorsanız TTL'nin alanına bir zaman damgası girilmelidir. TTL alanlarında dizine ekleme varsayılan olarak etkindir ve performansı daha yüksek trafik oranlarında etkiler. En iyi uygulama olarak, tek alan muafiyeti vardır.

Büyük dizi veya eşleme alanları

Büyük dizi veya eşleme alanları,belge başına 40.000 dizin girişi sınırına yaklaşabilir. Geniş bir diziye veya eşleme alanına dayalı sorgulama yapmıyorsanız dizine ekleme işleminden muaf tutmanız gerekir.

Okuma ve yazma işlemleri

  • Bir uygulamanın tek bir dokümanı güncelleyebileceği tam maksimum hız, büyük ölçüde iş yüküne bağlıdır. Daha fazla bilgi için Tek bir dokümanda yapılan güncellemeler başlıklı makaleyi inceleyin.

  • Uygun durumlarda, eşzamanlı çağrılar yerine eşzamansız çağrıları kullanın. Eşzamansız çağrılar gecikmenin etkisini en aza indirir. Örneğin, Yeşil Ofis projenizde önce bir doküman aramasının ve sorgunun sonuçlarını gerektiren bir yanıt oluşturabilirsiniz. Arama ve sorguda veri bağımlılığı yoksa başlamadan önce arama tamamlanana kadar eşzamanlı olarak beklemenize gerek yoktur. sorgu başlatılır.

  • Ofset kullanmayın. Bunun yerine imleçler için de geçerlidir. Ofset kullanımı ancak bu dokümanlar, atlanan belgelerin dahili olarak alınır. Atlanan dokümanlar, dokümanın ve uygulamanız, her bir kullanıcı için gereken okuma geri yükleyebilirsiniz.

İşlem yeniden deneme sayısı

Cloud Firestore SDK'ları ve istemci kitaplıklar otomatik olarak yeniden deneme başarısız oldu geçici hataları çözmek için kullanır. Uygulamanız Şuradan Cloud Firestore: REST veya Doğrudan RPC API'leri yerine bir SDK yerine uygulamasının, güvenilirliği artırmak için işlem yeniden denemeleri uygulaması gerekir.

Gerçek zamanlı güncellemeler

Gerçek zamanlı güncellemelerle ilgili en iyi uygulamalar için şuraya bakın: Gerçek zamanlı sorguları geniş ölçekte anlama.

Ölçeklendirilebilecek tasarımlar yapma

Aşağıdaki en iyi uygulamalar, zararlı olabilecek durumlardan çakışma sorunları oluşturabilir.

Tek bir dokümanda yapılan güncellemeler

Uygulamanızı tasarlarken uygulamanızın tek bir dokümanı ne kadar hızlı güncellediğini düşünün. İş yükünüzün performansını belirlemenin en iyi yolu, teşvik etmek anlamına gelir. Bir uygulamanın tek bir dokümanı güncelleyebileceği tam maksimum hız önemli ölçüde iş yüküne bağlıdır. Etkenler arasında yazma hızı, istekler arasındaki çekişme ve etkilenen dizin sayısı bulunur.

Belge yazma işlemi, belgeyi ve ilişkili tüm dizinleri günceller. Cloud Firestore, yazma işlemini çoğunlukta olması gerekir. Yeterince yüksek yazma hızlarında veri tabanı çakışma, daha yüksek gecikme veya başka hatalarla karşılaşabilir.

Dar bir belge aralığında yüksek okuma, yazma ve silme oranları

Dokümanları sözlüksel olarak kapatmak için yüksek okuma veya yazma hızlarından kaçının ya da uygulama çakışma hatalarıyla karşılaşacaktır. Bu sorunun adı bir sorun ortaya çıkabilir ve uygulama, hotspot oluşumunu şu:

  • Çok yüksek bir oranda yeni dokümanlar oluşturur ve monoton olarak artan kimlikleri ayırır.

    Cloud Firestore, belge kimliklerini dağılım algoritması kullanarak ayırır. Siz kullanarak yeni dokümanlar oluşturursanız yazmalarda hotspot ile karşılaşmaz. otomatik belge kimlikleri.

  • Birkaç dokümanla bir koleksiyonda yüksek oranda yeni dokümanlar oluşturur.

  • Tekerlekli olarak artan bir alana sahip yeni dokümanlar oluşturur. Örneğin, zaman damgasını artırabilirsiniz.

  • Koleksiyondaki dokümanları yüksek oranda siler.

  • Veritabanına çok yüksek bir hızda yazma .

Silinmiş verileri atlamaktan kaçının

Yakın zamanda silinmiş verileri atlayan sorgulardan kaçının. Bir sorgunun atlanması gerekebilir ilk sorgu sonuçları yakın zamanda yeni kullanıcılar silindi.

Çok sayıda silinmiş veriyi atlaması gereken iş yüküne örnek olarak en eski çalışma öğelerini bulmaya çalışan bir. Sorgu şu şekilde görünebilir:

docs = db.collection('WorkItems').order_by('created').limit(100)
delete_batch = db.batch()
for doc in docs.stream():
  finish_work(doc)
  delete_batch.delete(doc.reference)
delete_batch.commit()

Bu sorgu her çalıştırıldığında created alanı (en son silinen dokümanlarda da yer alır.) Bu da sorguları yavaşlatır.

Performansı artırmak için start_at yöntemini kullanarak en iyi değeri bulun harika bir başlangıç. Örneğin:

completed_items = db.collection('CompletionStats').document('all stats').get()
docs = db.collection('WorkItems').start_at(
    {'created': completed_items.get('last_completed')}).order_by(
        'created').limit(100)
delete_batch = db.batch()
last_completed = None
for doc in docs.stream():
  finish_work(doc)
  delete_batch.delete(doc.reference)
  last_completed = doc.get('created')

if last_completed:
  delete_batch.update(completed_items.reference,
                      {'last_completed': last_completed})
  delete_batch.commit()

NOT: Yukarıdaki örnekte, yüksek yazma hızlarına yönelik bir kalıp olmayan monoton olarak artan bir alan kullanılmaktadır.

Trafiği artırma

Yeni koleksiyonlara gelen trafiği kademeli olarak veya sözlüksel olarak artırmanız gerekir. Cloud Firestore'a hazırlanmak için yeterli süre tanımak amacıyla belgeleri kapatın gerekli belgeleri sağlamalısınız. En fazla 500 sayfayla başlamanızı öneririz. yeni bir koleksiyona kopyalama ve ardından trafikte %50 artış her 5 dakikada bir Benzer şekilde yazma trafiğinizi de artırabilir, ancak Cloud Firestore Standart Sınırları'na uymalıdır. Emin olun İşlemlerin anahtar aralığı boyunca nispeten eşit bir şekilde dağıtılmasını sağlamaktır. Bu adı "500/50/5" kuralı.

Trafiği yeni bir koleksiyona taşıma

Kademeli artış, özellikle uygulama trafiğini başka bir koleksiyona taşımaktır. Bu taşıma işlemini gerçekleştirmenin basit bir yolu belge mevcut değilse yeni koleksiyon örneğinden koleksiyonudur. Ancak bu durum, web sitenize gelen trafikteki ani artışa yeni koleksiyondaki dokümanları sözlüksel olarak kapatın. Cloud Firestore yeni koleksiyonu artan trafik için etkili şekilde hazırlayamayabilir. özellikle de az sayıda belge içeriyorsa.

Birçok dokümanın doküman kimliğini değiştirdiğinizde de benzer bir sorun ortaya çıkabilir aynı koleksiyonda yer alır.

Trafiği yeni bir koleksiyona taşımak için en iyi strateji verilerinize bağlıdır model. Aşağıda paralel okumalar olarak bilinen bir örnek strateji verilmiştir. Yapmanız gerekenler bu stratejinin verileriniz için etkili olup olmadığını belirleme ve paralel operasyonların maliyet üzerindeki etkisi ile ilgili önemli bir husus, taşımayı öğreteceğim.

Paralel okumalar

Trafiği yeni bir koleksiyona taşırken paralel okumalar uygulamak için şunu okuyun: önce eski koleksiyondan kaldırın. Belge eksikse şuradan okuyun: yeni bir koleksiyon görürsünüz. Var olmayan dokümanların okunma oranının yüksek olması, bu nedenle, yükünüzü kademeli olarak, yeni sürüme geçirecek koleksiyonudur. Daha iyi bir strateji, eski dokümanı yeni koleksiyona kopyalamaktır ardından eski dokümanı silin. Paralel okumaları kademeli olarak artırarak Cloud Firestore, yeni koleksiyona gelen trafiği işleyebilir.

Okuma veya yazma işlemlerini yeni bir koleksiyonda kademeli olarak artırmak için olası bir strateji rastgele bir yüzde seçmek için User-ID'nin deterministik bir karmasını kullanmaktır yeni dokümanlar yazmaya çalışan kullanıcılar olabilir. Kullanıcının Kimlik karması, işleviniz veya kullanıcı davranışı nedeniyle bozulmaz.

Bu arada, tüm verilerinizi eski dokümanlardan görebilirsiniz. Toplu işiniz sıralı belgeye yazma işlemlerini önlemelidir kimlik bilgilerini kullanabilirsiniz. Toplu iş tamamlandığında, yalnızca okuma iznine sahip yeni koleksiyondan.

Bu stratejide yapılan bir geliştirme, tek seferde küçük kullanıcı gruplarını taşımaktır. Kullanıcı dokümanına, söz konusu kullanıcının taşıma durumunu izleyen bir alan ekleyin. Taşınacak kullanıcı grubunu, kullanıcı kimliğinin karma değerine göre seçin. Tekliflerinizi otomatikleştirmek ve optimize etmek için kullanıcı grubu için dokümanları taşımak ve paralel okumalar yapabilirsiniz. ortasındasınız.

Her iki eski dosyanın ikisine de yazmadığınız sürece eski sürüme kolayca dönemeyeceğinizi unutmayın. kontrol edilir. Bu da Cloud Firestore ücretleri alınır.

Gizlilik

  • Cloud proje kimliğinde hassas bilgileri depolamaktan kaçının. Cloud Proje Kimliği projeniz bitebilir.
  • Veri uygunluğuna dair en iyi uygulama olarak, hassas verileri depolamaya belge adlarındaki ve doküman alan adlarındaki bilgileri içerebilir.

Yetkisiz erişimi engelleyin

Veritabanınızdaki yetkisiz işlemleri önlemek için Cloud Firestore Güvenlik Kuralları. Örneğin, kuralları kullanarak farklı sürekli olarak veritabanınızın tamamını indirir.

Cloud Firestore Güvenlik Kurallarını kullanma hakkında daha fazla bilgi edinin.