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:
- Uygulamanızda izin verilen eşzamanlı ve etkin bağlantıların toplam sayısını, bunları veritabanı örneklerine bölerek artırın.
- Veritabanı örnekleri arasında yükü dengeleyin.
- 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.