Veritabanı Performansını Optimize Etme

Uygulamanızdaki Firebase Realtime Database performansı iyileştirmenin birkaç farklı yolu vardır. Performansınızı 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

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şlemlerinin 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 metriklerinizi 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.

Bir bakışta performans artırma stratejileri
Metrik Açıklama En iyi uygulamalar
Yük/Kullanım Veritabanınızın kapasitesinin ne kadarının belirli bir zamanda istekleri işlemek için kullanıldığını optimize edin (**Load** 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ı aşmamak için veritabanınıza yapılan eşzamanlı ve etkin bağlantı sayısını dengeleyin. Verileri veritabanları arasında parçalama
Yeni bağlantıları azaltma
Giden bant genişliği Veritabanınızdan yapılan indirme işlemleri istediğinizden daha yüksek görünüyorsa 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 temizleme
Veri yapınızı optimize etme
Verileri veritabanları arasında parçalama
Cloud Storage for Firebase kullanma

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ıza yapılan gerçek zamanlı ve etkin bağlantılara kıyasla çok daha fazla bağlantı maliyeti, veritabanı yükü ve giden bant genişliği oluşturabilir.

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. Uygulamanızda izin verilen eşzamanlı ve etkin bağlantıların toplam sayısını, bunları veritabanı örneklerine bölerek 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ını kullanıyorsanız aynı Firebase projesinde birden fazla veritabanı örneği oluşturabilir ve veritabanı örneklerinde ortak bir kullanıcı kimlik doğrulama yönteminden yararlanabilirsiniz.

Verilerin nasıl parçalanacağı ve ne zaman parçalanacağı hakkında daha fazla bilgi edinin.

Verimli veri yapıları oluşturma

Realtime Database, verileri hem yoldan hem de yolun alt düğümlerinden 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 yapraklı 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 izin verecek ş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ı izleyin.

Yetkisiz erişimi engelleme

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

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şlemleriyle döndürülen verilerde sınır olarak da kullanılabilir. query. ifadeleri (ör. query.limitToFirst) ile tanımlanan sorguya dayalı kuralları kullandığınızda sorgular yalnızca kural tarafından sınırlandırılan verileri alır.

Örneğin, aşağıdaki kural, okuma erişimini önceliğe göre sıralanmış bir sorgunun yalnızca 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 kurmanız gerekiyorsa faydalıdır.

Dinleyici verimliliğini artırma

Dinleyicilerin senkronize ettiği veri miktarını sınırlamak için onları mümkün olduğunca ilerideki bir yola yönlendirin. 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, on() yerine once() kullanın. .once() simgesini, gerçekten veri güncellemesi gerektirmeyen işlemler için ayırı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 ve orderByValue() ile sıralama, 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.

Dinleyicileri dinamik olarak eklediğinizden ve artık gerekli olmadıklarında kaldırdığınızdan da 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 işlemi yapabilir 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 kodunuza 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.