Veritabanı Performansını Optimize Etme

Uygulamanızdaki Firebase Realtime Database performansı iyileştirmenin birkaç farklı yolu vardır. Performansınızı Realtime Database optimize etmek için neler yapabileceğinizi öğrenmek üzere farklı Realtime Database izleme araçlarıyla veri toplayın, ardından uygulamanızda değişiklikler yapın veya Realtime Database buna göre kullanın.

Realtime Database performansını izleme

İhtiyacınız olan ayrıntı düzeyine bağlı olarak, Realtime Database performansınızla ilgili verileri birkaç farklı araçla toplayabilirsiniz:

  • Üst düzey genel bakış: Dizinlenmemiş sorguların listesi ve okuma/yazma işlemlerine ilişkin gerçek zamanlı genel bakış için profil oluşturma aracını kullanın.
  • Faturalandırılan kullanım tahmini: Faturalandırılan kullanımınızı ve üst düzey performans metriklerini görmek için Firebase konsolunda bulunan kullanım metriklerini kullanın.
  • Ayrıntılı ayrıntılandırma: Veritabanınızın zaman içindeki performansına daha ayrıntılı bir şekilde bakmak için Cloud Monitoring simgesini kullanın.

Metriğe göre performansı artırma

Veri topladıktan sonra, iyileştirmek istediğiniz performans alanına göre aşağıdaki en iyi uygulamaları ve stratejileri inceleyin.

Performansı artırmaya yönelik stratejilere genel bakış
Metrik Açıklama En iyi uygulamalar
Yük/Kullanım Veritabanınızın kapasitesinin ne kadarının herhangi bir zamanda istek işleme için kullanıldığını optimize edin (**Yük** veya **io/database_load** metriklerinde gösterilir). Veri yapınızı optimize edin
Verileri veritabanları arasında parçalara ayırın
Dinleyici verimliliğini artırın
Sorguya dayalı kurallarla indirme işlemlerini sınırlayın
Bağlantıları optimize edin
Etkin bağlantı sayısı 200.000 bağlantı sınırının altında kalmak için veritabanınıza yapılan eşzamanlı ve etkin bağlantıların sayısını dengeleyin. Verileri veritabanları arasında parçalama
Yeni bağlantıları azaltma
Giden trafik bant genişliği Veritabanınızdaki indirme sayısı istediğinizden daha yüksekse okuma işlemlerinizin verimliliğini artırabilir ve şifreleme ek yükünü azaltabilirsiniz. Bağlantıları optimize etme
Veri yapınızı optimize etme
Sorguya dayalı kurallarla indirmeleri sınırlama
SSL oturumlarını yeniden kullanma
Dinleyici verimliliğini artırma
Verilere erişimi kısıtlama
Depolama Kullanılmayan verileri depolamadığınızdan emin olun veya depolanan verilerinizi diğer veritabanları ve/veya Firebase ürünleri arasında dengeleyerek kotanın altında kalın. Kullanılmayan verileri temizleyin
Veri yapınızı optimize edin
Verileri veritabanları arasında parçalara ayırın
Cloud Storage for Firebase kullanın

Bağlantıları optimize etme

GET ve PUT gibi RESTful istekler, kısa süreli olsa da bağlantı gerektirir. Bu sık ve kısa süreli bağlantılar, veritabanınızla kurulan gerçek zamanlı ve etkin bağlantılara kıyasla çok daha fazla bağlantı maliyeti, veritabanı yükü ve giden trafik bant genişliğine neden olabilir.

Mümkün olduğunda, REST API yerine uygulamanızın platformu için yerel SDK'ları kullanın. SDK'lar açık bağlantıları korur. Bu sayede, REST API ile artabilecek SSL şifreleme maliyetleri ve veritabanı yükü azalır.

REST API'yi kullanıyorsanız açık bir bağlantıyı sürdürmek için HTTP keep-alive kullanmayı veya sunucu tarafından gönderilen etkinlikleri kullanmayı düşünebilirsiniz. Bu yöntemler, SSL el sıkışmalarından kaynaklanan maliyetleri azaltabilir.

Verileri birden fazla veritabanına dağıtma

Verilerinizi birden fazla Realtime Database örneğine bölmek (veritabanı parçalama olarak da bilinir) üç avantaj sunar:

  1. Veritabanı örneklerine bölerek uygulamanızda izin verilen eşzamanlı ve etkin bağlantıların toplam sayısını artırın.
  2. Veritabanı örnekleri arasında yükü dengeleyin.
  3. Yalnızca ayrı veri kümelerine erişmesi gereken bağımsız kullanıcı gruplarınız varsa daha yüksek işleme hızı ve daha düşük gecikme için farklı veritabanı örnekleri kullanın.

Blaze fiyatlandırma planındaysanız aynı Firebase projesinde birden fazla veritabanı örneği oluşturabilir ve veritabanı örneklerinde ortak bir kullanıcı kimlik doğrulama yönteminden yararlanabilirsiniz.

Verileri parçalama hakkında daha fazla bilgi edinin.

Verimli veri yapıları oluşturma

Realtime Database, verileri bir yolun alt düğümlerinden ve yoldan aldığından veri yapınızı mümkün olduğunca düz tutmanız mantıklıdır. Bu sayede, istemcilere gereksiz veriler indirmeden ihtiyacınız olan verileri seçerek alabilirsiniz.

Verilerinizi yapılandırırken özellikle yazma ve silme işlemlerini göz önünde bulundurun. Örneğin, binlerce yapraklı yolların silinmesi maliyetli olabilir. Bunları birden fazla alt ağaç içeren ve düğüm başına daha az yaprak bulunan yollara bölmek silme işlemlerini hızlandırabilir.

Ayrıca her yazma işlemi, toplam veritabanı kullanımınızın% 0,1'ini kaplayabilir. Verilerinizi, SDK'lardaki update() yöntemleri veya RESTful PATCH istekleri aracılığıyla çok yollu güncellemeler olarak tek bir işlemde toplu yazma işlemlerine olanak tanıyacak şekilde yapılandırın.

Veri yapınızı optimize etmek ve performansı artırmak için veri yapılarıyla ilgili en iyi uygulamaları uygulayın.

Yetkisiz erişimi önleme

Realtime Database Security Rules ile veritabanınızda yetkisiz işlemleri önleyin. Örneğin, kurallar kullanmak kötü niyetli bir kullanıcının veritabanınızın tamamını tekrar tekrar indirmesini önleyebilir.

Firebase Realtime Database kurallarını kullanma hakkında daha fazla bilgi edinin.

İndirmeleri sınırlamak için sorguya dayalı kuralları kullanma

Realtime Database Security Rules veritabanınızdaki verilere erişimi kısıtlar ancak okuma işlemleri aracılığıyla döndürülen verilerde de sınır olarak kullanılabilir. query. ifadeleriyle tanımlanan sorguya dayalı kuralları kullandığınızda (ör. query.limitToFirst) sorgular yalnızca kural tarafından sınırlandırılmış verileri alır.

Örneğin, aşağıdaki kural, okuma erişimini yalnızca önceliğe göre sıralanmış bir sorgunun ilk 1.000 sonucuyla sınırlar:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

Realtime Database Security Rules hakkında daha fazla bilgi edinin.

Dizin sorguları

Verilerinizi dizine eklemek, uygulamanızın çalıştırdığı her sorgu için kullandığınız toplam bant genişliğini azaltır.

SSL oturumlarını yeniden kullanma

TLS oturum biletleri vererek devam ettirilen bağlantılarda SSL şifreleme ek yükü maliyetlerini azaltın. Bu özellik, özellikle veritabanına sık sık güvenli bağlantılar yapmanız gerekiyorsa faydalıdır.

Dinleyici verimliliğini artırma

Dinleyicilerinizi, senkronize ettikleri veri miktarını sınırlamak için mümkün olduğunca yolun sonuna yerleştirin. Dinleyicileriniz, almalarını istediğiniz verilere yakın olmalıdır. Veritabanınızın tamamının indirilmesine neden olacağından veritabanı kökünü dinlemeyin.

Dinleme işlemlerinizin döndürdüğü verileri sınırlamak için sorgular ekleyin ve yalnızca verilerdeki güncellemeleri indiren dinleyiciler kullanın. Örneğin, once() yerine on() kullanın. .once() simgesini, gerçekten veri güncellemesi gerektirmeyen işlemler için kullanın. Ayrıca, mümkün olduğunda en iyi performans için sorgularınızı orderByKey() kullanarak sıralayın. orderByChild() ile sıralama 6-8 kat daha yavaş olabilir. orderByValue() ile sıralama ise kalıcılık katmanından konumun tamamının okunmasını gerektirdiğinden büyük veri kümeleri için çok yavaş olabilir.

Ayrıca, dinleyicileri dinamik olarak eklediğinizden ve artık gerekli olmadıklarında kaldırdığınızdan emin olun.

Kullanılmayan verileri temizleme

Veritabanınızdaki kullanılmayan veya yinelenen verileri düzenli olarak kaldırın. Verilerinizi manuel olarak incelemek için yedekleme çalıştırabilir veya verilerinizi düzenli olarak bir Google Cloud Storage paketine yedekleyebilirsiniz. Ayrıca, depolanan verileri Cloud Storage for Firebase üzerinden barındırmayı da düşünebilirsiniz.

Güncelleyebileceğiniz ölçeklenebilir kodlar yayınlayın

IoT cihazlarına yerleştirilmiş uygulamalar, kolayca güncelleyebileceğiniz ölçeklenebilir kod içermelidir. Kullanım alanlarını kapsamlı bir şekilde test ettiğinizden, kullanıcı tabanınızı katlanarak büyütebileceğiniz senaryoları hesaba kattığınızdan ve kodunuzda güncellemeler dağıtma özelliğini eklediğinizden emin olun. Örneğin, verilerinizi parçalamaya karar verirseniz ileride yapmanız gerekebilecek büyük değişiklikleri dikkatlice değerlendirin.